@avalabs/svm-module 3.13.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import { SYSTEM_PROGRAM_ADDRESS, identifySystemInstruction, SystemInstruction, p
12
12
  import { identifyTokenInstruction, TokenInstruction, parseTransferCheckedInstruction, parseTransferInstruction } from '@solana-program/token';
13
13
  import on from '@blockaid/client';
14
14
 
15
- function qe(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}a(qe,"charsum");function be(t){let e,r=0;for(e=0;e<t.length;e++){let n=qe(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}a(be,"arrayHash");var Ie=a(async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=q.exponential()})=>{let s=0,a=0,c;for(;a<r;){a>0&&await zt(s);try{let i=await t(a);if(e(i))return i}catch(i){c=i;}s=n(a),a++;}let p=c?`Max retry exceeded. ${c}`:"Max retry exceeded.";throw new Error(p)},"retry"),we=class we{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let s=n-e+1,a=e*r,c=2*r*(Math.pow(2,s)-1);return a+c}}};a(we,"RetryBackoffPolicy");var q=we;function zt(t){return new Promise(e=>setTimeout(e,t))}a(zt,"delay");var Ne=a(t=>Ie({operation:e=>t(e>0),maxRetries:2,backoffPolicy:q.constant(1),isSuccess:e=>e?.status?.error_code!==429}),"coingeckoRetry");async function U(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let s=await n.json();return e.parse(s)}a(U,"fetchAndVerify");var De=class De{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}};a(De,"CoingeckoProxyClient");var se=De;var Wt=z$1.array(z$1.object({internalId:z$1.string(),id:z$1.string(),symbol:z$1.string(),name:z$1.string(),image:z$1.string().optional().nullable(),current_price:z$1.number().optional().nullable(),price_change_percentage_24h:z$1.number().optional().nullable(),market_cap:z$1.number().optional().nullable(),total_volume:z$1.number().optional().nullable(),platforms:z$1.record(z$1.string(),z$1.string())})),Ce=class Ce{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Wt)}};a(Ce,"WatchlistProxyClient");var ye=Ce;var K,j,H,Z,_e=class _e{constructor({storage:e$1,proxyApiUrl:r,fetch:n}){d(this,K,void 0);d(this,j,void 0);d(this,H,void 0);d(this,Z,void 0);b(this,"transformSimplePriceResponse",a((e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let a=e[s];n[s]={},r.forEach(c=>{n[s]={[c]:{price:a?.[c],change24:a?.[`${c}_24h_change`],vol24:a?.[`${c}_24h_vol`],marketCap:a?.[`${c}_market_cap`]}};});}),n},"transformSimplePriceResponse"));e(this,K,e$1),e(this,j,r),e(this,H,n??globalThis.fetch),e(this,Z,getBasicCoingeckoHttp(void 0,c(this,H)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new ye(c(this,j)).watchlistToken({tokens:e.symbol,currency:r})).filter(a=>e.isNative?a.internalId===`NATIVE-${e.symbol.toLowerCase()}`:a.platforms[e.caip2Id]===e.address),[s]=n;return s?{priceInCurrency:s.current_price??0,change24:s.price_change_percentage_24h??0,marketCap:s.market_cap??0,vol24:s.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${be(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=c(this,K)?.get?.(a),n)return n;try{n=await Ne(c=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:c}));}catch{n=void 0;}return c(this,K)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let s,c$1=`getPricesWithMarketDataByAddresses-${`${be(e)}-${r}-${n}`}`;if(s=c(this,K)?.get?.(c$1),s)return s;try{s=await Ne(p=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:p}));}catch(p){console.error(p),s=void 0;}return c(this,K)?.set?.(c$1,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){if(s){let a=await new se(c(this,j),c(this,H)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(a,[n])}return simpleTokenPrice(c(this,Z),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:s=!1,change24:a=!1,lastUpdated:c$1=!1,useCoingeckoProxy:p=!1,shouldThrow:i=!0}){if(p){let m=await new se(c(this,j),c(this,H)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:a,include_last_updated_at:c$1});return this.transformSimplePriceResponse(m,r)}return simplePrice(c(this,Z),{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:a,lastUpdated:c$1,shouldThrow:i})}};K=new WeakMap,j=new WeakMap,H=new WeakMap,Z=new WeakMap,a(_e,"TokenService");var ae=_e;object({date:string(),usd:record(number())});var Ee=a((t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),"textItem");var _=a((t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e}),"addressItem"),Be=a((t,e)=>({label:t,type:DetailItemType.ADDRESS_LIST,value:e}),"addressListItem");var ie=a((t,e)=>({label:t,type:DetailItemType.DATA,value:e}),"dataItem");var He=process.env.GLACIER_API_KEY;var ce=a(()=>He,"getGlacierApiKey");var Qt=["glacier-api.avax.network","proxy-api.avax.network","proxy-api-dev.avax.network"];function Le(t){let e=new URL(t),r=ce();if(r&&Qt.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}a(Le,"addGlacierAPIKeyIfNeeded");({rltoken:ce()});var z=a((t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}}),"rpcErrorOpts");var Ye={name:"SVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/svm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/svm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1","solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z"],namespaces:["solana"]},cointype:"501",permissions:{rpc:{dapps:!0,methods:["solana_signTransaction","solana_signAndSendTransaction","solana_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var tr={proxyApiUrl:"https://proxy-api.avax.network"},rr={proxyApiUrl:"https://proxy-api-dev.avax.network"},Je=a(t=>{switch(t){case Environment.PRODUCTION:return tr;case Environment.DEV:return rr}},"getEnv");var Ze=a(t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string","hasDerivationDetails");var Q=a(({accountIndex:t})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");return {[NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}},"buildDerivationPath");var Qe=a(async t=>{let{approvalController:e,secretId:r}=t,n=Ze(t)?Q(t).SVM:void 0,s=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[NetworkVMType.SVM]:base58.encode(hex.decode(s))}},"deriveAddress");var et=a(async t=>{let{approvalController:e,secretId:r,accountIndices:n,derivationPathType:s}=t;if(n.length===0)return [];await init();let a=await Promise.all(n.map(async p=>{let i=Q({accountIndex:p,derivationPathType:s}).SVM,m=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:i});return Uint8Array.from(Buffer.from(m,"hex"))}));return (await deriveAddressesForSvm(a)).map(p=>({[NetworkVMType.SVM]:p}))},"deriveAddresses");var tt="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",rt="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",nt="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",ot="/proxy/nownodes/sol",st="https://api.devnet.solana.com";var at="DUMMY_API_KEY";var M=a(({isTestnet:t,proxyApiUrl:e})=>{let r=t?st:e+ot,n=Le(r);return getSolanaProvider({isTestnet:t,rpcUrl:n})},"getProvider");var Ue=1e6,V={high:150*Ue,medium:75*Ue,low:2*Ue},dr=a(t=>(t.length===0?[V.low,V.low]:t.length===1?[t[0],V.low]:t).slice().sort((r,n)=>r-n),"ensureEnoughData");async function it(t,e){let s=await(await M({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(s.length===0||s.every(y=>y.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(V.high),maxPriorityFeePerGas:BigInt(V.high)},medium:{maxFeePerGas:BigInt(V.medium),maxPriorityFeePerGas:BigInt(V.medium)},low:{maxFeePerGas:BigInt(V.low),maxPriorityFeePerGas:BigInt(V.low)},baseFee:BigInt(V.low),displayDecimals:9,isFixedFee:!1};let c=dr(s.map(y=>Number(y.prioritizationFee))),p=c.at(0),i=c.at(-1),m=Math.floor(c.length/2),l=c.length%2===1?c[m]:(c[m-1]+c[m])/2,d=BigInt(Math.ceil(i*1.05)),u=BigInt(Math.ceil(l*1.05)),g=BigInt(Math.ceil(p*1.05));return {high:{maxFeePerGas:d,maxPriorityFeePerGas:d},medium:{maxFeePerGas:u,maxPriorityFeePerGas:u},low:{maxFeePerGas:g,maxPriorityFeePerGas:g},baseFee:g,displayDecimals:9,isFixedFee:!1}}a(it,"getNetworkFee");var fr=z$1.object({address:z$1.string(),name:z$1.string(),symbol:z$1.string(),contractType:z$1.literal(TokenType.SPL),caip2Id:z$1.string().startsWith("solana:"),decimals:z$1.number(),chainId:z$1.number().optional(),logoUri:z$1.string().optional(),color:z$1.string().optional()}),ct=z$1.array(fr);async function pt({caip2Id:t,proxyApiUrl:e}){try{return (await U([`${e}/solana-tokens?caip2Id=${t}`],ct)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}a(pt,"getTokens");var lt=z$1.object({nativeBalance:z$1.object({lamports:z$1.string(),solana:z$1.string()}),nfts:z$1.array(z$1.object({associatedTokenAddress:z$1.string(),mint:z$1.string(),name:z$1.string(),symbol:z$1.string()})),tokens:z$1.array(z$1.object({associatedTokenAddress:z$1.string(),mint:z$1.string(),amountRaw:z$1.string(),amount:z$1.string(),decimals:z$1.number(),name:z$1.string(),symbol:z$1.string(),logo:z$1.string().optional().nullable()}))});var pe,le,Te,mt,Fe=class Fe{constructor(e$1){d(this,Te);d(this,pe,void 0);d(this,le,void 0);e(this,pe,`${e$1.proxyApiUrl}/proxy/moralis`),e(this,le,e$1.fetch??globalThis.fetch);}async getPortfolio({address:e,network:r}){try{let n=f(this,Te,mt).call(this,`/account/${r}/${e}/portfolio`),s=await U([n],lt,c(this,le));return {address:e,portfolio:s}}catch(n){console.error("getPortfolio() failed:",n);let s=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${s}`}}}};pe=new WeakMap,le=new WeakMap,Te=new WeakSet,mt=a(function(e){return `${c(this,pe)}${e}`},"#buildUrl"),a(Fe,"MoralisService");var ee=Fe;var W=a(t=>{switch(t.caipId){case tt:return "mainnet";case rt:return "devnet";case nt:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}},"getNetworkName");var ft=a(async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:s,fetch:a})=>{let c=new ee({proxyApiUrl:e,fetch:a}),p=n.pricingProviders?.coingecko.nativeTokenId??"",i=n.pricingProviders?.coingecko.assetPlatformId??"",m=r.toLowerCase(),l=W(n),d=await Promise.all(t.map(h=>c.getPortfolio({address:h,network:l}))),u=new Set(d.flatMap(h=>"portfolio"in h?h.portfolio.tokens.map(({mint:T})=>T):[])),g=await(i?s.getPricesByAddresses(Array.from(u),i,m):Promise.resolve(void 0)),y=await s.getWatchlistDataForToken({tokenDetails:{symbol:n.networkToken.symbol,isNative:!0,caip2Id:n.caipId??""},currency:m});return d.reduce((h,T)=>{if("error"in T)return {...h,[T.address]:{error:T.error}};let k=new TokenUnit(T.portfolio.nativeBalance.lamports,9,"SOL"),v=y.priceInCurrency!==void 0?k.mul(y.priceInCurrency):void 0,P={type:TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:k.toSubUnit(),balanceDisplayValue:k.toString(),balanceInCurrency:v?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:v?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:p,...y},E=T.portfolio.tokens.reduce((A,{amountRaw:b,symbol:S,decimals:x,mint:I,name:N,logo:L})=>{let O=new TokenUnit(b,x,S),ue=gr(I,m,g),fe=ue.priceInCurrency!==void 0?O.mul(ue.priceInCurrency):void 0,X={type:TokenType.SPL,address:I,name:N,symbol:S,decimals:x,balance:O.toSubUnit(),balanceDisplayValue:O.toString(),balanceInCurrency:fe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:fe?.toDisplay({fixedDp:2}),logoUri:L??void 0,reputation:null,...ue};return {...A,[I]:X}},{});return {...h,[T.address]:{[n.networkToken.symbol]:P,...E}}},{})},"getBalances"),gr=a((t,e,r)=>({priceInCurrency:r?.[t??""]?.[e]?.price??void 0,marketCap:r?.[t??""]?.[e]?.marketCap??void 0,vol24:r?.[t??""]?.[e]?.vol24??void 0,change24:r?.[t??""]?.[e]?.change24??void 0}),"getMarketData");var Oe=a(t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),"simplifyTokenBalance"),yt=a((t,e,r,n)=>{let s=e!==-1?t[e]:r.preTokenBalances.find(i=>!t.includes(i.owner))?.owner||r.postTokenBalances.find(i=>!t.includes(i.owner))?.owner,a=r.preTokenBalances.reduce((i,{owner:m,mint:l,amount:d})=>({...i,[`${m}-${l}`]:d}),{}),c=r.postTokenBalances.reduce((i,{owner:m,mint:l,amount:d,decimals:u})=>{let g=`${m}-${l}`,y=a[g]??0n,h=d-y;if(h===0n)return i;let T=h>0n&&m===s,k=h<0n&&m===s;if(T){let v=Object.keys(a).find(A=>{let[b,S]=A.split("-");if(S!==l||b===s)return !1;let x=a[A],I=r.postTokenBalances.find(({owner:L,mint:O})=>L===b&&O===l);return !I||I.amount<x});if(!v)return i;let P=n.tokens?.filter(A=>"contractType"in A).find(A=>A.address===l)??{contractType:TokenType.SPL,decimals:u,address:l,symbol:"Unknown",name:"Unknown"},E={...P,type:P.contractType,from:{...P,address:v.split("-")[0]},to:{...P,address:m},amount:new TokenUnit(h,u,"").toDisplay()};return [...i,E]}else if(k){let v=r.postTokenBalances.find(({owner:A,mint:b})=>b===l&&A!==s&&(a[`${A}-${l}`]??0n)<(r.postTokenBalances.find(S=>S.owner===A&&S.mint===l)?.amount??0n));if(!v)return i;let P=n.tokens?.filter(A=>"contractType"in A).find(A=>A.address===l)??{contractType:TokenType.SPL,decimals:u,address:l,symbol:"Unknown",name:"Unknown"},E={...P,type:P.contractType,from:{...P,address:s},to:{...P,address:v.owner},amount:new TokenUnit(-h,u,"").toDisplay()};return [...i,E]}return i},[]),p=hr(t,e,r,n,c,s);return p&&c.push(p),c},"extractTokenTranfers"),hr=a((t,e,{paidFee:r,preBalances:n,postBalances:s},a,c=[],p)=>{if(e===-1){if(c.length>0&&p&&c.some(S=>S.to?.address===p)){let S=t.findIndex(x=>x===p);if(S!==-1){let x=n[S],N=s[S]-x;if(N<=0){let L=Math.abs(N)+r;if(L>r){let O=new TokenUnit(L,a.networkToken.decimals,""),fe=s.map((X,oe)=>X-n[oe]).reduce((X,oe,ze)=>ze!==S&&oe>X.amount&&oe>0?{index:ze,amount:oe}:X,{index:0,amount:0});return {amount:O.toDisplay(),from:{address:p},to:{address:t[fe.index]},name:a.networkToken.name,symbol:a.networkToken.symbol,type:TokenType.NATIVE}}}}}return null}let i=t[e],m=n[e],d=s[e]-m,u=s.map((b,S)=>b-n[S]),g=c.length>0,y=d!==0?d+r:0,h=y>0,T=0,k=!1;if(g&&e===0&&p){let b=c.some(x=>x.to?.address===p),S=c.some(x=>x.from?.address===p);b&&!S&&(h=!1,k=!0,T=s.map((N,L)=>N-n[L]).reduce((N,L,O)=>O!==e&&L>N.amount&&L>0?{index:O,amount:L}:N,{index:0,amount:0}).index);}if(g&&d<0){let b=u.reduce((S,x,I)=>I!==e&&x>S.amount?{index:I,amount:x}:S,{index:0,amount:0});b.amount>r*2&&!k&&(y=b.amount,h=!0,T=b.index);}else g&&d<=0&&c.some(S=>S.to?.address===i)&&(y=Math.abs(d)+r,h=!1,T=u.reduce((x,I,N)=>N!==e&&I>x.amount&&I>0?{index:N,amount:I}:x,{index:0,amount:0}).index);if(!y)return null;let v=new TokenUnit(Math.abs(y),a.networkToken.decimals,"");if(!g){let b=u.reduce(({index:S,change:x},I,N)=>I>x?{index:N,change:I}:{index:S,change:x},{index:0,change:u[0]});T=h?0:b.index;}let P=t[T],E=h?P||i:p||i,A=h?p||i:P||p||i;return {amount:v.toDisplay(),from:{address:E},to:{address:A},name:a.networkToken.name,symbol:a.networkToken.symbol,type:TokenType.NATIVE}},"extractNativeTransfer");var me=a(t=>t.status==="fulfilled","isFulfilled");function gt(t){return e=>!!e[t]}a(gt,"hasPropertyDefined");var Tt=a(async({network:t,address:e,proxyApiUrl:r})=>{let n=M({isTestnet:!!t.isTestnet,proxyApiUrl:r}),a=(await n.getSignaturesForAddress(address(e),{limit:25}).send()).map(i=>i.signature),c=a;try{let i=new ee({proxyApiUrl:r}),m=W(t),l=await i.getPortfolio({address:e,network:m});if("portfolio"in l){let d=l.portfolio.tokens.map(k=>k.associatedTokenAddress),u=l.portfolio.nfts.map(k=>k.associatedTokenAddress),y=[...d,...u].map(async k=>{try{return (await n.getSignaturesForAddress(address(k),{limit:25}).send()).map(P=>P.signature)}catch(v){return console.error("Failed to get signatures for ATA:",k,v),[]}}),T=(await Promise.allSettled(y)).filter(me).map(k=>k.value).flat();c=Array.from(new Set([...a,...T]));}}catch(i){console.error("ATA discovery failed with error:",i);}return (await Promise.allSettled(c.map(async i=>({txHash:i.toString(),tx:await n.getTransaction(i,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(me).map(i=>i.value).filter(gt("tx"))},"getWrappedTransactions");var Pt=a((t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""},"getExplorerLink");async function St({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await Tt({network:t,address:e,proxyApiUrl:r})).map(({txHash:a,tx:c})=>{if(!c.meta)return null;let{meta:p,transaction:{message:i}}=c,m=i.accountKeys.map(h=>h.toString()),l=m.indexOf(e),d=l!==-1;!d&&p.preTokenBalances&&(p.preTokenBalances.some(T=>T.owner===e)||(p.postTokenBalances??[]).some(T=>T.owner===e))&&(d=!0,l=-1);let u=l!==-1&&l<i.header.numRequiredSignatures,g=yt(m,l,{paidFee:u?Number(p.fee):0,preBalances:p.preBalances.map(Number),postBalances:p.postBalances.map(Number),preTokenBalances:(p.preTokenBalances??[]).map(Oe),postTokenBalances:(p.postTokenBalances??[]).map(Oe)},t),y=Pr(g,e);return {hash:a,txType:y,gasUsed:String(c.meta.computeUnitsConsumed??"0"),tokens:g,from:g[0]?.from?.address??m[0],to:g[0]?.to?.address??(u?"":e),isOutgoing:u,isIncoming:!u,isSender:u,timestamp:Number(c.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(c.meta.fee)/Number(c.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:Pt(a,t.explorerUrl)}}).filter(a=>a!==null)}:Promise.reject({error:rpcErrors.invalidParams("Network must have a CAIP-2 id")})}a(St,"getTransactionHistory");var Pr=a((t,e)=>{if(t.length===0)return TransactionType.UNKNOWN;let r=t.filter(a=>a.from?.address===e||a.to?.address===e);if(r.length===0)return TransactionType.UNKNOWN;let n=r.some(a=>a.from?.address===e),s=r.some(a=>a.to?.address===e);return n&&s?TransactionType.SWAP:n?TransactionType.SEND:s?TransactionType.RECEIVE:TransactionType.UNKNOWN},"inferTxType");var kt=a(t=>{if(t?.type==="InstructionError")switch(t.code){case"ResultWithNegativeLamports":return {type:AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"Your account does not have enough SOL to perform the operation"}}}return t?.type==="TransactionError"&&t.message.toLowerCase().includes("insufficient funds for rent")?{type:AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"The recipient account needs a minimum balance to exist on Solana (rent). Try increasing the amount you send."}}:{type:AlertType.WARNING,details:{title:"Transaction simulation has failed",description:"It is possible that this transaction will fail. Please proceed with caution."}}},"getAlertForError"),Me={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction is malicious, do not proceed.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};function At(t){return t.ins.length===0&&t.outs.length===0}a(At,"isBalanceChangeEmpty");function xt(t){return t!=null}a(xt,"isNotNullish");var vt=a((t,e,r,n)=>{if(!isInstructionForProgram(t,SYSTEM_PROGRAM_ADDRESS)||!isInstructionWithAccounts(t)||!isInstructionWithData(t))return null;try{if(identifySystemInstruction(t)!==SystemInstruction.TransferSol)return null;let{accounts:a,data:c}=parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),i=a.source.address===r===!0?"outs":"ins";return e[i].push({token:{...n,address:""},items:[{displayValue:new TokenUnit(c.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[_("From",a.source.address),_("To",a.destination.address)]}}catch{return null}},"tryToParseSolTransfer");var Br=a(async(t,e)=>{try{let r=await t.getAccountInfo(e,{encoding:"jsonParsed"}).send();if(Array.isArray(r.value?.data))return null;let n=r.value?.data.parsed.info;return typeof n?.mint=="string"?n.mint:null}catch{return null}},"getTokenMintFromAccountInfo"),Rt=a(async(t,e,r,n,s)=>{if(!s?.length||!isInstructionWithAccounts(e)||!isInstructionWithData(e))return null;try{let a=identifyTokenInstruction(e);if(a!==TokenInstruction.Transfer&&a!==TokenInstruction.TransferChecked)return null;let c=a===TokenInstruction.TransferChecked?parseTransferCheckedInstruction:parseTransferInstruction,{accounts:p,data:i}=c({...e,data:Uint8Array.from(e.data)}),m=await Br(t,p.source.address);if(!m)return null;let l=s.find(y=>y.address.toLowerCase()===m.toLowerCase());if(!l)return null;let u=(p.source.address===n||p.authority.address===n)===!0?"outs":"ins",g="decimals"in i?i.decimals:l.decimals;return r[u].push({token:l,items:[{displayValue:new TokenUnit(i.amount,g,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${l.symbol}`,items:[_("From",p.source.address),_("To",p.destination.address)]}}catch{return null}},"tryToParseSPLTransfer");var bt=a(async(t,e,r,n)=>{let s=await deserializeTransactionMessage(t,n),a={ins:[],outs:[]},c=await Promise.allSettled(s.instructions.map(async p=>vt(p,a,e,r.networkToken)??await Rt(n,p,a,e,r.tokens)??null)).then(p=>p.filter(me).map(i=>i.value).filter(xt));return {balanceChange:a,details:c}},"parseTransaction");var wt=a((t,e,r)=>{let n=e.account_summary.account_assets_diff??[],s={},a={},c=Object.keys(e.assets_diff??{}).filter(p=>p!==t);return n.forEach(({asset:p,in:i,out:m})=>{let l=Or(p,r);if(!l)return;let d="address"in l?l.address:l.symbol;i&&(s[d]||(s[d]={token:l,items:[]}),s[d].items.push({displayValue:String(i.value),usdPrice:typeof i.usd_price=="number"?String(i.usd_price):void 0})),m&&(a[d]||(a[d]={token:l,items:[]}),a[d].items.push({displayValue:String(m.value),usdPrice:typeof m.usd_price=="number"?String(m.usd_price):void 0}));}),{balanceChange:{ins:Object.values(s),outs:Object.values(a)},otherAffectedAddresses:c}},"processBalanceChange"),Ur=a(t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),"convertNativeAssetToToken"),Fr=a((t,e)=>({type:TokenType.SPL,address:t.address,caip2Id:e.caipId??"",contractType:TokenType.SPL,decimals:t.decimals,name:t.name,symbol:t.symbol,logoUri:t.logo||void 0}),"convertTokenAssetToToken"),Or=a((t,e)=>t.type==="TOKEN"?Fr(t,e):t.type==="SOL"||t.type==="ETH"?Ur(t):null,"convertDiffAssetToToken");var Nt=a(async({params:t,dAppUrl:e,blockaid:r})=>{try{return await r.solana.message.scan({chain:t.chain,options:["simulation","validation"],encoding:"base64",metadata:{url:e},transactions:[t.transactionBase64],account_address:base64.encode(base58.decode(t.account))})}catch(n){return console.error("solana.message.scan() error",n),null}},"scanSolanaTransaction");var ke=a(async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,s=await Nt(t),{simulation:a,validation:c}=s?.result??{},p=a?.account_summary?a:void 0,i={title:"Transaction Details",items:[ie("Raw Data",t.params.transactionBase64)]},m=[i],l=!1,d,u;if(!c||c.result_type==="Warning"?u=Me[AlertType.WARNING]:c.result_type==="Malicious"?u=Me[AlertType.DANGER]:s?.error_details&&(u=kt(s.error_details)),p){let{balanceChange:g,otherAffectedAddresses:y}=wt(n.account,p,e);if(d=g,y.length>0){let h=p.account_summary.account_assets_diff,T=h?.filter(P=>P.out&&P.out.raw_value>0)??[],k=h?.filter(P=>P.in&&P.in.raw_value>0)??[];T.length>0&&k.length>0?(i.items.push(_("Account",n.account)),i.items.push(Be("Interacting with",y))):(i.items.push(_(y.length===1?"From":"Account",n.account)),i.items.push(y.length===1?_("To",y[0]):Be("Interacting with",y)));}else i.items.push(_("Account",n.account));l=!0;}else {let{balanceChange:g,details:y}=await bt(n.transactionBase64,n.account,e,r);d=g,m.push(...y);}return {isSimulationSuccessful:l,details:m,alert:u,balanceChange:d}},"explainTransaction");var Gr="https://explorer.solana.com";function Ae(t,e,r="tx"){try{let n=t.explorerUrl?new URL(t.explorerUrl):new URL(Gr);return n.pathname+=`${r}/${e}`,n.toString()}catch{return `${t.explorerUrl}/${r}/${e}`}}a(Ae,"getExplorerAddressByNetwork");var Ge=400,Kr=15,Ct=a(async({provider:t,txHash:e,approvalController:r,request:n,network:s,commitment:a="confirmed",maxRetries:c=Kr})=>{let p=0,i=null,m=Ae(s,e,"tx");for(;p<c;)try{let l=await t.getSignatureStatuses([signature(e)],{searchTransactionHistory:!0}).send();if(!l?.value?.[0]){await new Promise(g=>setTimeout(g,Ge)),p++;continue}let{confirmationStatus:d,err:u}=l.value[0];if(u)return console.error("[waitForTransactionConfirmation] Transaction failed:",u),r.onTransactionReverted({txHash:e,request:n}),!1;if(d&&d!==i&&(i=d,d==="processed"&&r.onTransactionPending({txHash:e,request:n,explorerLink:m}),a==="processed"&&d==="processed"||a==="confirmed"&&["confirmed","finalized"].includes(d)||a==="finalized"&&d==="finalized"))return r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0;await new Promise(g=>setTimeout(g,Ge)),p++;}catch(l){if(l instanceof Error&&l.message.includes("Transaction failed"))return console.error("[waitForTransactionConfirmation] Transaction explicitly failed"),r.onTransactionReverted({txHash:e,request:n}),!1;await new Promise(d=>setTimeout(d,Ge)),p++;}return i==="confirmed"||i==="finalized"?(r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0):(r.onTransactionReverted({txHash:e,request:n}),!1)},"waitForTransactionConfirmation");var zr=z$1.object({account:z$1.string(),serializedTx:z$1.string().base64(),sendOptions:z$1.object({preflightCommitment:z$1.enum(["processed","confirmed","finalized"]).optional(),maxRetries:z$1.bigint().optional(),minContextSlot:z$1.bigint().optional(),skipPreflight:z$1.boolean().optional()}).optional()}),Wr=z$1.tuple([zr]),_t=a(t=>Wr.safeParse(t),"parseRequestParams");var Bt=a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=_t(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.invalidParams(z("Transaction params are invalid",i))};let[{account:m,serializedTx:l,sendOptions:d}]=c,u=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:g,isSimulationSuccessful:y,alert:h,balanceChange:T}=await ke({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:l},blockaid:s},network:e,provider:u}),k={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:g,alert:h,balanceChange:T,networkFeeSelector:!1,isSimulationSuccessful:y},v={type:RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:m,data:l},P=await r.requestApproval({request:t,displayData:k,signingData:v});if("error"in P)return {error:P.error};let E;try{E=await jr(u,P,d);let A=Ae(e,E);return await r.onTransactionPending({txHash:E,request:t,explorerLink:A}),Ct({provider:u,txHash:E,approvalController:r,request:t,network:e,commitment:d?.preflightCommitment}),{result:E}}catch(A){return console.error(A),{error:rpcErrors.internal(z("Transaction failed",A))}}},"signAndSendTransaction"),jr=a(async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send(),"getTxHash");var Hr=z$1.object({account:z$1.string(),serializedTx:z$1.string().base64()}),Yr=z$1.tuple([Hr]),Lt=a(t=>Yr.safeParse(t),"parseRequestParams");var Ft=a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=Lt(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.invalidParams(z("Transaction params are invalid",i))};let[{account:m,serializedTx:l}]=c,d=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:u,isSimulationSuccessful:g,alert:y,balanceChange:h}=await ke({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:l},blockaid:s},network:e,provider:d}),T={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:u,alert:y,balanceChange:h&&At(h)?void 0:h,networkFeeSelector:!1,isSimulationSuccessful:g},k={type:RpcMethod.SOLANA_SIGN_TRANSACTION,account:m,data:l},v=await r.requestApproval({request:t,displayData:T,signingData:k});return "error"in v?{error:v.error}:"signedData"in v?{result:v.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}},"signTransaction");var Ot=a(t=>{try{let e=base64.decode(t);return getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}},"isTransactionBytes");var Qr=z$1.object({account:z$1.string(),serializedMessage:z$1.string().base64()}).refine(({serializedMessage:t})=>!Ot(t),{message:"Cannot use signMessage() calls for signing transactions"}),en=z$1.tuple([Qr]),Mt=a(t=>en.safeParse(t),"parseRequestParams");var Gt=a(async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:s,success:a,error:c}=Mt(n);if(!a)return console.error("invalid params",c),{error:rpcErrors.invalidParams(z("Message signing params are invalid",c))};let[{account:p,serializedMessage:i}]=s,m=new TextDecoder,l={title:"Sign Message",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},details:[{title:"Message Details",items:[_("Account",p),Ee("Message",m.decode(base64.decode(i))),ie("Raw Message (Base-64)",i)]}],networkFeeSelector:!1},d={type:RpcMethod.SOLANA_SIGN_MESSAGE,account:p,data:i},u=await r.requestApproval({request:t,displayData:l,signingData:d});return "error"in u?{error:u.error}:"signedData"in u?{result:u.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}},"signMessage");var B,G,de,re,ne,Ke=class Ke{constructor({approvalController:e$1,environment:r,appInfo:n,runtime:s}){d(this,B,void 0);d(this,G,void 0);d(this,de,void 0);d(this,re,void 0);d(this,ne,void 0);let{proxyApiUrl:a}=Je(r);e(this,de,n),e(this,B,a),e(this,G,e$1),e(this,ne,s),c(this,B),c(this,G),c(this,de),e(this,re,new on({baseURL:a+"/proxy/blockaid/",apiKey:at,httpAgent:s?.httpAgent,fetch:s?.fetch}));}async getProvider(e){return M({isTestnet:!!e.isTestnet,proxyApiUrl:c(this,B)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return Q(e)}deriveAddress(e){return Qe({...e,approvalController:c(this,G)})}deriveAddresses(e){return et({...e,approvalController:c(this,G)})}getBalances(e){let r=new ae({storage:e.storage,proxyApiUrl:c(this,B),fetch:c(this,ne)?.fetch});return ft({...e,tokenService:r,proxyApiUrl:c(this,B),fetch:c(this,ne)?.fetch})}getManifest(){let e=parseManifest(Ye);return e.success?e.data:void 0}getNetworkFee(e){return it(e,c(this,B))}getTransactionHistory(e){return St({network:e.network,address:e.address,proxyApiUrl:c(this,B)})}getTokens(e){return e.caipId?pt({caip2Id:e.caipId,proxyApiUrl:c(this,B)}):Promise.reject({error:rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.SOLANA_SIGN_TRANSACTION:return Ft({approvalController:c(this,G),proxyApiUrl:c(this,B),network:r,request:e,blockaid:c(this,re)});case RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return Bt({approvalController:c(this,G),proxyApiUrl:c(this,B),network:r,request:e,blockaid:c(this,re)});case RpcMethod.SOLANA_SIGN_MESSAGE:return Gt({approvalController:c(this,G),network:r,request:e})}return {error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};B=new WeakMap,G=new WeakMap,de=new WeakMap,re=new WeakMap,ne=new WeakMap,a(Ke,"SvmModule");var Kt=Ke;
15
+ function qe(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}a(qe,"charsum");function be(t){let e,r=0;for(e=0;e<t.length;e++){let n=qe(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}a(be,"arrayHash");var Ie=a(async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=q.exponential()})=>{let s=0,a=0,c;for(;a<r;){a>0&&await zt(s);try{let i=await t(a);if(e(i))return i}catch(i){c=i;}s=n(a),a++;}let p=c?`Max retry exceeded. ${c}`:"Max retry exceeded.";throw new Error(p)},"retry"),we=class we{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}static linearThenExponential(e,r){return n=>{if(n<e)return (n+1)*r;let s=n-e+1,a=e*r,c=2*r*(Math.pow(2,s)-1);return a+c}}};a(we,"RetryBackoffPolicy");var q=we;function zt(t){return new Promise(e=>setTimeout(e,t))}a(zt,"delay");var Ne=a(t=>Ie({operation:e=>t(e>0),maxRetries:2,backoffPolicy:q.constant(1),isSuccess:e=>e?.status?.error_code!==429}),"coingeckoRetry");async function U(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let s=await n.json();return e.parse(s)}a(U,"fetchAndVerify");var De=class De{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,s=new URLSearchParams(n);return U([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${s}`,{method:"POST",headers:{"Content-Type":"application/json"}}],RawSimplePriceResponseSchema,this.fetchFn)}};a(De,"CoingeckoProxyClient");var se=De;var Wt=z$1.array(z$1.object({internalId:z$1.string(),id:z$1.string(),symbol:z$1.string(),name:z$1.string(),image:z$1.string().optional().nullable(),current_price:z$1.number().optional().nullable(),price_change_percentage_24h:z$1.number().optional().nullable(),market_cap:z$1.number().optional().nullable(),total_volume:z$1.number().optional().nullable(),platforms:z$1.record(z$1.string(),z$1.string())})),Ce=class Ce{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return U([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Wt)}};a(Ce,"WatchlistProxyClient");var ye=Ce;var K,j,H,Z,_e=class _e{constructor({storage:e$1,proxyApiUrl:r,fetch:n}){d(this,K,void 0);d(this,j,void 0);d(this,H,void 0);d(this,Z,void 0);b(this,"transformSimplePriceResponse",a((e,r=[VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(s=>{let a=e[s];n[s]={},r.forEach(c=>{n[s]={[c]:{price:a?.[c],change24:a?.[`${c}_24h_change`],vol24:a?.[`${c}_24h_vol`],marketCap:a?.[`${c}_market_cap`]}};});}),n},"transformSimplePriceResponse"));e(this,K,e$1),e(this,j,r),e(this,H,n??globalThis.fetch),e(this,Z,getBasicCoingeckoHttp(void 0,c(this,H)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=VsCurrencyType.USD}){let n=(await new ye(c(this,j)).watchlistToken({tokens:e.symbol,currency:r})).filter(a=>e.isNative?a.internalId===`NATIVE-${e.symbol.toLowerCase()}`:a.platforms[e.caip2Id]===e.address),[s]=n;return s?{priceInCurrency:s.current_price??0,change24:s.price_change_percentage_24h??0,marketCap:s.market_cap??0,vol24:s.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${be(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=c(this,K)?.get?.(a),n)return n;try{n=await Ne(c=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:c}));}catch{n=void 0;}return c(this,K)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=VsCurrencyType.USD){let s,c$1=`getPricesWithMarketDataByAddresses-${`${be(e)}-${r}-${n}`}`;if(s=c(this,K)?.get?.(c$1),s)return s;try{s=await Ne(p=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:p}));}catch(p){console.error(p),s=void 0;}return c(this,K)?.set?.(c$1,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=VsCurrencyType.USD,useCoingeckoProxy:s=!1}){if(s){let a=await new se(c(this,j),c(this,H)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(a,[n])}return simpleTokenPrice(c(this,Z),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[VsCurrencyType.USD],marketCap:n=!1,vol24:s=!1,change24:a=!1,lastUpdated:c$1=!1,useCoingeckoProxy:p=!1,shouldThrow:i=!0}){if(p){let m=await new se(c(this,j),c(this,H)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:s,include_24hr_change:a,include_last_updated_at:c$1});return this.transformSimplePriceResponse(m,r)}return simplePrice(c(this,Z),{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:a,lastUpdated:c$1,shouldThrow:i})}};K=new WeakMap,j=new WeakMap,H=new WeakMap,Z=new WeakMap,a(_e,"TokenService");var ae=_e;object({date:string(),usd:record(number())});var Ee=a((t,e,r="horizontal")=>({label:t,alignment:r,type:DetailItemType.TEXT,value:e}),"textItem");var _=a((t,e)=>({label:t,type:DetailItemType.ADDRESS,value:e}),"addressItem"),Be=a((t,e)=>({label:t,type:DetailItemType.ADDRESS_LIST,value:e}),"addressListItem");var ie=a((t,e)=>({label:t,type:DetailItemType.DATA,value:e}),"dataItem");var He=process.env.GLACIER_API_KEY;var ce=a(()=>He,"getGlacierApiKey");var Qt=["glacier-api.avax.network","proxy-api.avax.network","proxy-api-dev.avax.network","core-proxy-api.avax.network","core-proxy-api.avax-test.network"];function Le(t){let e=new URL(t),r=ce();if(r&&Qt.includes(e.hostname)){let n=e.searchParams;return n.set("token",r),e.search=n.toString(),e.toString()}return t}a(Le,"addGlacierAPIKeyIfNeeded");({rltoken:ce()});var z=a((t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}}),"rpcErrorOpts");var Ye={name:"SVM",description:"",version:"0.0.1",sources:{module:{checksum:"",location:{npm:{filePath:"dist/index.js",packageName:"@avalabs/svm-module",registry:"https://registry.npmjs.org"}}},provider:{checksum:"",location:{npm:{filePath:"dist/provider/index.js",packageName:"@avalabs/svm-module",registry:"https://registry.npmjs.org"}}}},network:{chainIds:["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1","solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z"],namespaces:["solana"]},cointype:"501",permissions:{rpc:{dapps:!0,methods:["solana_signTransaction","solana_signAndSendTransaction","solana_signMessage"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var tr={proxyApiUrl:"https://proxy-api.avax.network"},rr={proxyApiUrl:"https://proxy-api-dev.avax.network"},Je=a(t=>{switch(t){case Environment.PRODUCTION:return tr;case Environment.DEV:return rr}},"getEnv");var Ze=a(t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string","hasDerivationDetails");var Q=a(({accountIndex:t})=>{if(t<0)throw rpcErrors.invalidParams("Account index must be a non-negative integer");return {[NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}},"buildDerivationPath");var Qe=a(async t=>{let{approvalController:e,secretId:r}=t,n=Ze(t)?Q(t).SVM:void 0,s=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[NetworkVMType.SVM]:base58.encode(hex.decode(s))}},"deriveAddress");var et=a(async t=>{let{approvalController:e,secretId:r,accountIndices:n,derivationPathType:s}=t;if(n.length===0)return [];await init();let a=await Promise.all(n.map(async p=>{let i=Q({accountIndex:p,derivationPathType:s}).SVM,m=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:i});return Uint8Array.from(Buffer.from(m,"hex"))}));return (await deriveAddressesForSvm(a)).map(p=>({[NetworkVMType.SVM]:p}))},"deriveAddresses");var tt="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",rt="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",nt="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",ot="/proxy/nownodes/sol",st="https://api.devnet.solana.com";var at="DUMMY_API_KEY";var M=a(({isTestnet:t,proxyApiUrl:e})=>{let r=t?st:e+ot,n=Le(r);return getSolanaProvider({isTestnet:t,rpcUrl:n})},"getProvider");var Ue=1e6,V={high:150*Ue,medium:75*Ue,low:2*Ue},dr=a(t=>(t.length===0?[V.low,V.low]:t.length===1?[t[0],V.low]:t).slice().sort((r,n)=>r-n),"ensureEnoughData");async function it(t,e){let s=await(await M({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(s.length===0||s.every(y=>y.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(V.high),maxPriorityFeePerGas:BigInt(V.high)},medium:{maxFeePerGas:BigInt(V.medium),maxPriorityFeePerGas:BigInt(V.medium)},low:{maxFeePerGas:BigInt(V.low),maxPriorityFeePerGas:BigInt(V.low)},baseFee:BigInt(V.low),displayDecimals:9,isFixedFee:!1};let c=dr(s.map(y=>Number(y.prioritizationFee))),p=c.at(0),i=c.at(-1),m=Math.floor(c.length/2),l=c.length%2===1?c[m]:(c[m-1]+c[m])/2,d=BigInt(Math.ceil(i*1.05)),u=BigInt(Math.ceil(l*1.05)),g=BigInt(Math.ceil(p*1.05));return {high:{maxFeePerGas:d,maxPriorityFeePerGas:d},medium:{maxFeePerGas:u,maxPriorityFeePerGas:u},low:{maxFeePerGas:g,maxPriorityFeePerGas:g},baseFee:g,displayDecimals:9,isFixedFee:!1}}a(it,"getNetworkFee");var fr=z$1.object({address:z$1.string(),name:z$1.string(),symbol:z$1.string(),contractType:z$1.literal(TokenType.SPL),caip2Id:z$1.string().startsWith("solana:"),decimals:z$1.number(),chainId:z$1.number().optional(),logoUri:z$1.string().optional(),color:z$1.string().optional()}),ct=z$1.array(fr);async function pt({caip2Id:t,proxyApiUrl:e}){try{return (await U([`${e}/solana-tokens?caip2Id=${t}`],ct)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}a(pt,"getTokens");var lt=z$1.object({nativeBalance:z$1.object({lamports:z$1.string(),solana:z$1.string()}),nfts:z$1.array(z$1.object({associatedTokenAddress:z$1.string(),mint:z$1.string(),name:z$1.string(),symbol:z$1.string()})),tokens:z$1.array(z$1.object({associatedTokenAddress:z$1.string(),mint:z$1.string(),amountRaw:z$1.string(),amount:z$1.string(),decimals:z$1.number(),name:z$1.string(),symbol:z$1.string(),logo:z$1.string().optional().nullable()}))});var pe,le,Te,mt,Fe=class Fe{constructor(e$1){d(this,Te);d(this,pe,void 0);d(this,le,void 0);e(this,pe,`${e$1.proxyApiUrl}/proxy/moralis`),e(this,le,e$1.fetch??globalThis.fetch);}async getPortfolio({address:e,network:r}){try{let n=f(this,Te,mt).call(this,`/account/${r}/${e}/portfolio`),s=await U([n],lt,c(this,le));return {address:e,portfolio:s}}catch(n){console.error("getPortfolio() failed:",n);let s=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${s}`}}}};pe=new WeakMap,le=new WeakMap,Te=new WeakSet,mt=a(function(e){return `${c(this,pe)}${e}`},"#buildUrl"),a(Fe,"MoralisService");var ee=Fe;var W=a(t=>{switch(t.caipId){case tt:return "mainnet";case rt:return "devnet";case nt:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}},"getNetworkName");var ft=a(async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:s,fetch:a})=>{let c=new ee({proxyApiUrl:e,fetch:a}),p=n.pricingProviders?.coingecko.nativeTokenId??"",i=n.pricingProviders?.coingecko.assetPlatformId??"",m=r.toLowerCase(),l=W(n),d=await Promise.all(t.map(h=>c.getPortfolio({address:h,network:l}))),u=new Set(d.flatMap(h=>"portfolio"in h?h.portfolio.tokens.map(({mint:T})=>T):[])),g=await(i?s.getPricesByAddresses(Array.from(u),i,m):Promise.resolve(void 0)),y=await s.getWatchlistDataForToken({tokenDetails:{symbol:n.networkToken.symbol,isNative:!0,caip2Id:n.caipId??""},currency:m});return d.reduce((h,T)=>{if("error"in T)return {...h,[T.address]:{error:T.error}};let k=new TokenUnit(T.portfolio.nativeBalance.lamports,9,"SOL"),v=y.priceInCurrency!==void 0?k.mul(y.priceInCurrency):void 0,P={type:TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:k.toSubUnit(),balanceDisplayValue:k.toString(),balanceInCurrency:v?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:v?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:p,...y},E=T.portfolio.tokens.reduce((A,{amountRaw:b,symbol:S,decimals:x,mint:I,name:N,logo:L})=>{let O=new TokenUnit(b,x,S),ue=gr(I,m,g),fe=ue.priceInCurrency!==void 0?O.mul(ue.priceInCurrency):void 0,X={type:TokenType.SPL,address:I,name:N,symbol:S,decimals:x,balance:O.toSubUnit(),balanceDisplayValue:O.toString(),balanceInCurrency:fe?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:fe?.toDisplay({fixedDp:2}),logoUri:L??void 0,reputation:null,...ue};return {...A,[I]:X}},{});return {...h,[T.address]:{[n.networkToken.symbol]:P,...E}}},{})},"getBalances"),gr=a((t,e,r)=>({priceInCurrency:r?.[t??""]?.[e]?.price??void 0,marketCap:r?.[t??""]?.[e]?.marketCap??void 0,vol24:r?.[t??""]?.[e]?.vol24??void 0,change24:r?.[t??""]?.[e]?.change24??void 0}),"getMarketData");var Oe=a(t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),"simplifyTokenBalance"),yt=a((t,e,r,n)=>{let s=e!==-1?t[e]:r.preTokenBalances.find(i=>!t.includes(i.owner))?.owner||r.postTokenBalances.find(i=>!t.includes(i.owner))?.owner,a=r.preTokenBalances.reduce((i,{owner:m,mint:l,amount:d})=>({...i,[`${m}-${l}`]:d}),{}),c=r.postTokenBalances.reduce((i,{owner:m,mint:l,amount:d,decimals:u})=>{let g=`${m}-${l}`,y=a[g]??0n,h=d-y;if(h===0n)return i;let T=h>0n&&m===s,k=h<0n&&m===s;if(T){let v=Object.keys(a).find(A=>{let[b,S]=A.split("-");if(S!==l||b===s)return !1;let x=a[A],I=r.postTokenBalances.find(({owner:L,mint:O})=>L===b&&O===l);return !I||I.amount<x});if(!v)return i;let P=n.tokens?.filter(A=>"contractType"in A).find(A=>A.address===l)??{contractType:TokenType.SPL,decimals:u,address:l,symbol:"Unknown",name:"Unknown"},E={...P,type:P.contractType,from:{...P,address:v.split("-")[0]},to:{...P,address:m},amount:new TokenUnit(h,u,"").toDisplay()};return [...i,E]}else if(k){let v=r.postTokenBalances.find(({owner:A,mint:b})=>b===l&&A!==s&&(a[`${A}-${l}`]??0n)<(r.postTokenBalances.find(S=>S.owner===A&&S.mint===l)?.amount??0n));if(!v)return i;let P=n.tokens?.filter(A=>"contractType"in A).find(A=>A.address===l)??{contractType:TokenType.SPL,decimals:u,address:l,symbol:"Unknown",name:"Unknown"},E={...P,type:P.contractType,from:{...P,address:s},to:{...P,address:v.owner},amount:new TokenUnit(-h,u,"").toDisplay()};return [...i,E]}return i},[]),p=hr(t,e,r,n,c,s);return p&&c.push(p),c},"extractTokenTranfers"),hr=a((t,e,{paidFee:r,preBalances:n,postBalances:s},a,c=[],p)=>{if(e===-1){if(c.length>0&&p&&c.some(S=>S.to?.address===p)){let S=t.findIndex(x=>x===p);if(S!==-1){let x=n[S],N=s[S]-x;if(N<=0){let L=Math.abs(N)+r;if(L>r){let O=new TokenUnit(L,a.networkToken.decimals,""),fe=s.map((X,oe)=>X-n[oe]).reduce((X,oe,ze)=>ze!==S&&oe>X.amount&&oe>0?{index:ze,amount:oe}:X,{index:0,amount:0});return {amount:O.toDisplay(),from:{address:p},to:{address:t[fe.index]},name:a.networkToken.name,symbol:a.networkToken.symbol,type:TokenType.NATIVE}}}}}return null}let i=t[e],m=n[e],d=s[e]-m,u=s.map((b,S)=>b-n[S]),g=c.length>0,y=d!==0?d+r:0,h=y>0,T=0,k=!1;if(g&&e===0&&p){let b=c.some(x=>x.to?.address===p),S=c.some(x=>x.from?.address===p);b&&!S&&(h=!1,k=!0,T=s.map((N,L)=>N-n[L]).reduce((N,L,O)=>O!==e&&L>N.amount&&L>0?{index:O,amount:L}:N,{index:0,amount:0}).index);}if(g&&d<0){let b=u.reduce((S,x,I)=>I!==e&&x>S.amount?{index:I,amount:x}:S,{index:0,amount:0});b.amount>r*2&&!k&&(y=b.amount,h=!0,T=b.index);}else g&&d<=0&&c.some(S=>S.to?.address===i)&&(y=Math.abs(d)+r,h=!1,T=u.reduce((x,I,N)=>N!==e&&I>x.amount&&I>0?{index:N,amount:I}:x,{index:0,amount:0}).index);if(!y)return null;let v=new TokenUnit(Math.abs(y),a.networkToken.decimals,"");if(!g){let b=u.reduce(({index:S,change:x},I,N)=>I>x?{index:N,change:I}:{index:S,change:x},{index:0,change:u[0]});T=h?0:b.index;}let P=t[T],E=h?P||i:p||i,A=h?p||i:P||p||i;return {amount:v.toDisplay(),from:{address:E},to:{address:A},name:a.networkToken.name,symbol:a.networkToken.symbol,type:TokenType.NATIVE}},"extractNativeTransfer");var me=a(t=>t.status==="fulfilled","isFulfilled");function gt(t){return e=>!!e[t]}a(gt,"hasPropertyDefined");var Tt=a(async({network:t,address:e,proxyApiUrl:r})=>{let n=M({isTestnet:!!t.isTestnet,proxyApiUrl:r}),a=(await n.getSignaturesForAddress(address(e),{limit:25}).send()).map(i=>i.signature),c=a;try{let i=new ee({proxyApiUrl:r}),m=W(t),l=await i.getPortfolio({address:e,network:m});if("portfolio"in l){let d=l.portfolio.tokens.map(k=>k.associatedTokenAddress),u=l.portfolio.nfts.map(k=>k.associatedTokenAddress),y=[...d,...u].map(async k=>{try{return (await n.getSignaturesForAddress(address(k),{limit:25}).send()).map(P=>P.signature)}catch(v){return console.error("Failed to get signatures for ATA:",k,v),[]}}),T=(await Promise.allSettled(y)).filter(me).map(k=>k.value).flat();c=Array.from(new Set([...a,...T]));}}catch(i){console.error("ATA discovery failed with error:",i);}return (await Promise.allSettled(c.map(async i=>({txHash:i.toString(),tx:await n.getTransaction(i,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(me).map(i=>i.value).filter(gt("tx"))},"getWrappedTransactions");var Pt=a((t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""},"getExplorerLink");async function St({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await Tt({network:t,address:e,proxyApiUrl:r})).map(({txHash:a,tx:c})=>{if(!c.meta)return null;let{meta:p,transaction:{message:i}}=c,m=i.accountKeys.map(h=>h.toString()),l=m.indexOf(e),d=l!==-1;!d&&p.preTokenBalances&&(p.preTokenBalances.some(T=>T.owner===e)||(p.postTokenBalances??[]).some(T=>T.owner===e))&&(d=!0,l=-1);let u=l!==-1&&l<i.header.numRequiredSignatures,g=yt(m,l,{paidFee:u?Number(p.fee):0,preBalances:p.preBalances.map(Number),postBalances:p.postBalances.map(Number),preTokenBalances:(p.preTokenBalances??[]).map(Oe),postTokenBalances:(p.postTokenBalances??[]).map(Oe)},t),y=Pr(g,e);return {hash:a,txType:y,gasUsed:String(c.meta.computeUnitsConsumed??"0"),tokens:g,from:g[0]?.from?.address??m[0],to:g[0]?.to?.address??(u?"":e),isOutgoing:u,isIncoming:!u,isSender:u,timestamp:Number(c.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(c.meta.fee)/Number(c.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:Pt(a,t.explorerUrl)}}).filter(a=>a!==null)}:Promise.reject({error:rpcErrors.invalidParams("Network must have a CAIP-2 id")})}a(St,"getTransactionHistory");var Pr=a((t,e)=>{if(t.length===0)return TransactionType.UNKNOWN;let r=t.filter(a=>a.from?.address===e||a.to?.address===e);if(r.length===0)return TransactionType.UNKNOWN;let n=r.some(a=>a.from?.address===e),s=r.some(a=>a.to?.address===e);return n&&s?TransactionType.SWAP:n?TransactionType.SEND:s?TransactionType.RECEIVE:TransactionType.UNKNOWN},"inferTxType");var kt=a(t=>{if(t?.type==="InstructionError")switch(t.code){case"ResultWithNegativeLamports":return {type:AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"Your account does not have enough SOL to perform the operation"}}}return t?.type==="TransactionError"&&t.message.toLowerCase().includes("insufficient funds for rent")?{type:AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"The recipient account needs a minimum balance to exist on Solana (rent). Try increasing the amount you send."}}:{type:AlertType.WARNING,details:{title:"Transaction simulation has failed",description:"It is possible that this transaction will fail. Please proceed with caution."}}},"getAlertForError"),Me={[AlertType.WARNING]:{type:AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[AlertType.DANGER]:{type:AlertType.DANGER,details:{title:"Scam transaction",description:"This transaction is malicious, do not proceed.",body:["This transaction is malicious","do not proceed"],actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};function At(t){return t.ins.length===0&&t.outs.length===0}a(At,"isBalanceChangeEmpty");function xt(t){return t!=null}a(xt,"isNotNullish");var vt=a((t,e,r,n)=>{if(!isInstructionForProgram(t,SYSTEM_PROGRAM_ADDRESS)||!isInstructionWithAccounts(t)||!isInstructionWithData(t))return null;try{if(identifySystemInstruction(t)!==SystemInstruction.TransferSol)return null;let{accounts:a,data:c}=parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),i=a.source.address===r===!0?"outs":"ins";return e[i].push({token:{...n,address:""},items:[{displayValue:new TokenUnit(c.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[_("From",a.source.address),_("To",a.destination.address)]}}catch{return null}},"tryToParseSolTransfer");var Br=a(async(t,e)=>{try{let r=await t.getAccountInfo(e,{encoding:"jsonParsed"}).send();if(Array.isArray(r.value?.data))return null;let n=r.value?.data.parsed.info;return typeof n?.mint=="string"?n.mint:null}catch{return null}},"getTokenMintFromAccountInfo"),Rt=a(async(t,e,r,n,s)=>{if(!s?.length||!isInstructionWithAccounts(e)||!isInstructionWithData(e))return null;try{let a=identifyTokenInstruction(e);if(a!==TokenInstruction.Transfer&&a!==TokenInstruction.TransferChecked)return null;let c=a===TokenInstruction.TransferChecked?parseTransferCheckedInstruction:parseTransferInstruction,{accounts:p,data:i}=c({...e,data:Uint8Array.from(e.data)}),m=await Br(t,p.source.address);if(!m)return null;let l=s.find(y=>y.address.toLowerCase()===m.toLowerCase());if(!l)return null;let u=(p.source.address===n||p.authority.address===n)===!0?"outs":"ins",g="decimals"in i?i.decimals:l.decimals;return r[u].push({token:l,items:[{displayValue:new TokenUnit(i.amount,g,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${l.symbol}`,items:[_("From",p.source.address),_("To",p.destination.address)]}}catch{return null}},"tryToParseSPLTransfer");var bt=a(async(t,e,r,n)=>{let s=await deserializeTransactionMessage(t,n),a={ins:[],outs:[]},c=await Promise.allSettled(s.instructions.map(async p=>vt(p,a,e,r.networkToken)??await Rt(n,p,a,e,r.tokens)??null)).then(p=>p.filter(me).map(i=>i.value).filter(xt));return {balanceChange:a,details:c}},"parseTransaction");var wt=a((t,e,r)=>{let n=e.account_summary.account_assets_diff??[],s={},a={},c=Object.keys(e.assets_diff??{}).filter(p=>p!==t);return n.forEach(({asset:p,in:i,out:m})=>{let l=Or(p,r);if(!l)return;let d="address"in l?l.address:l.symbol;i&&(s[d]||(s[d]={token:l,items:[]}),s[d].items.push({displayValue:String(i.value),usdPrice:typeof i.usd_price=="number"?String(i.usd_price):void 0})),m&&(a[d]||(a[d]={token:l,items:[]}),a[d].items.push({displayValue:String(m.value),usdPrice:typeof m.usd_price=="number"?String(m.usd_price):void 0}));}),{balanceChange:{ins:Object.values(s),outs:Object.values(a)},otherAffectedAddresses:c}},"processBalanceChange"),Ur=a(t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),"convertNativeAssetToToken"),Fr=a((t,e)=>({type:TokenType.SPL,address:t.address,caip2Id:e.caipId??"",contractType:TokenType.SPL,decimals:t.decimals,name:t.name,symbol:t.symbol,logoUri:t.logo||void 0}),"convertTokenAssetToToken"),Or=a((t,e)=>t.type==="TOKEN"?Fr(t,e):t.type==="SOL"||t.type==="ETH"?Ur(t):null,"convertDiffAssetToToken");var Nt=a(async({params:t,dAppUrl:e,blockaid:r})=>{try{return await r.solana.message.scan({chain:t.chain,options:["simulation","validation"],encoding:"base64",metadata:{url:e},transactions:[t.transactionBase64],account_address:base64.encode(base58.decode(t.account))})}catch(n){return console.error("solana.message.scan() error",n),null}},"scanSolanaTransaction");var ke=a(async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,s=await Nt(t),{simulation:a,validation:c}=s?.result??{},p=a?.account_summary?a:void 0,i={title:"Transaction Details",items:[ie("Raw Data",t.params.transactionBase64)]},m=[i],l=!1,d,u;if(!c||c.result_type==="Warning"?u=Me[AlertType.WARNING]:c.result_type==="Malicious"?u=Me[AlertType.DANGER]:s?.error_details&&(u=kt(s.error_details)),p){let{balanceChange:g,otherAffectedAddresses:y}=wt(n.account,p,e);if(d=g,y.length>0){let h=p.account_summary.account_assets_diff,T=h?.filter(P=>P.out&&P.out.raw_value>0)??[],k=h?.filter(P=>P.in&&P.in.raw_value>0)??[];T.length>0&&k.length>0?(i.items.push(_("Account",n.account)),i.items.push(Be("Interacting with",y))):(i.items.push(_(y.length===1?"From":"Account",n.account)),i.items.push(y.length===1?_("To",y[0]):Be("Interacting with",y)));}else i.items.push(_("Account",n.account));l=!0;}else {let{balanceChange:g,details:y}=await bt(n.transactionBase64,n.account,e,r);d=g,m.push(...y);}return {isSimulationSuccessful:l,details:m,alert:u,balanceChange:d}},"explainTransaction");var Gr="https://explorer.solana.com";function Ae(t,e,r="tx"){try{let n=t.explorerUrl?new URL(t.explorerUrl):new URL(Gr);return n.pathname+=`${r}/${e}`,n.toString()}catch{return `${t.explorerUrl}/${r}/${e}`}}a(Ae,"getExplorerAddressByNetwork");var Ge=400,Kr=15,Ct=a(async({provider:t,txHash:e,approvalController:r,request:n,network:s,commitment:a="confirmed",maxRetries:c=Kr})=>{let p=0,i=null,m=Ae(s,e,"tx");for(;p<c;)try{let l=await t.getSignatureStatuses([signature(e)],{searchTransactionHistory:!0}).send();if(!l?.value?.[0]){await new Promise(g=>setTimeout(g,Ge)),p++;continue}let{confirmationStatus:d,err:u}=l.value[0];if(u)return console.error("[waitForTransactionConfirmation] Transaction failed:",u),r.onTransactionReverted({txHash:e,request:n}),!1;if(d&&d!==i&&(i=d,d==="processed"&&r.onTransactionPending({txHash:e,request:n,explorerLink:m}),a==="processed"&&d==="processed"||a==="confirmed"&&["confirmed","finalized"].includes(d)||a==="finalized"&&d==="finalized"))return r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0;await new Promise(g=>setTimeout(g,Ge)),p++;}catch(l){if(l instanceof Error&&l.message.includes("Transaction failed"))return console.error("[waitForTransactionConfirmation] Transaction explicitly failed"),r.onTransactionReverted({txHash:e,request:n}),!1;await new Promise(d=>setTimeout(d,Ge)),p++;}return i==="confirmed"||i==="finalized"?(r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0):(r.onTransactionReverted({txHash:e,request:n}),!1)},"waitForTransactionConfirmation");var zr=z$1.object({account:z$1.string(),serializedTx:z$1.string().base64(),sendOptions:z$1.object({preflightCommitment:z$1.enum(["processed","confirmed","finalized"]).optional(),maxRetries:z$1.bigint().optional(),minContextSlot:z$1.bigint().optional(),skipPreflight:z$1.boolean().optional()}).optional()}),Wr=z$1.tuple([zr]),_t=a(t=>Wr.safeParse(t),"parseRequestParams");var Bt=a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=_t(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.invalidParams(z("Transaction params are invalid",i))};let[{account:m,serializedTx:l,sendOptions:d}]=c,u=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:g,isSimulationSuccessful:y,alert:h,balanceChange:T}=await ke({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:l},blockaid:s},network:e,provider:u}),k={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:g,alert:h,balanceChange:T,networkFeeSelector:!1,isSimulationSuccessful:y},v={type:RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:m,data:l},P=await r.requestApproval({request:t,displayData:k,signingData:v});if("error"in P)return {error:P.error};let E;try{E=await jr(u,P,d);let A=Ae(e,E);return await r.onTransactionPending({txHash:E,request:t,explorerLink:A}),Ct({provider:u,txHash:E,approvalController:r,request:t,network:e,commitment:d?.preflightCommitment}),{result:E}}catch(A){return console.error(A),{error:rpcErrors.internal(z("Transaction failed",A))}}},"signAndSendTransaction"),jr=a(async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send(),"getTxHash");var Hr=z$1.object({account:z$1.string(),serializedTx:z$1.string().base64()}),Yr=z$1.tuple([Hr]),Lt=a(t=>Yr.safeParse(t),"parseRequestParams");var Ft=a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=Lt(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.invalidParams(z("Transaction params are invalid",i))};let[{account:m,serializedTx:l}]=c,d=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:u,isSimulationSuccessful:g,alert:y,balanceChange:h}=await ke({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:l},blockaid:s},network:e,provider:d}),T={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:u,alert:y,balanceChange:h&&At(h)?void 0:h,networkFeeSelector:!1,isSimulationSuccessful:g},k={type:RpcMethod.SOLANA_SIGN_TRANSACTION,account:m,data:l},v=await r.requestApproval({request:t,displayData:T,signingData:k});return "error"in v?{error:v.error}:"signedData"in v?{result:v.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}},"signTransaction");var Ot=a(t=>{try{let e=base64.decode(t);return getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}},"isTransactionBytes");var Qr=z$1.object({account:z$1.string(),serializedMessage:z$1.string().base64()}).refine(({serializedMessage:t})=>!Ot(t),{message:"Cannot use signMessage() calls for signing transactions"}),en=z$1.tuple([Qr]),Mt=a(t=>en.safeParse(t),"parseRequestParams");var Gt=a(async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:s,success:a,error:c}=Mt(n);if(!a)return console.error("invalid params",c),{error:rpcErrors.invalidParams(z("Message signing params are invalid",c))};let[{account:p,serializedMessage:i}]=s,m=new TextDecoder,l={title:"Sign Message",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} is requesting to sign the following message`,logoUri:t.dappInfo.icon},details:[{title:"Message Details",items:[_("Account",p),Ee("Message",m.decode(base64.decode(i))),ie("Raw Message (Base-64)",i)]}],networkFeeSelector:!1},d={type:RpcMethod.SOLANA_SIGN_MESSAGE,account:p,data:i},u=await r.requestApproval({request:t,displayData:l,signingData:d});return "error"in u?{error:u.error}:"signedData"in u?{result:u.signedData}:{error:rpcErrors.invalidRequest("No signed data returned")}},"signMessage");var B,G,de,re,ne,Ke=class Ke{constructor({approvalController:e$1,environment:r,appInfo:n,runtime:s}){d(this,B,void 0);d(this,G,void 0);d(this,de,void 0);d(this,re,void 0);d(this,ne,void 0);let{proxyApiUrl:a}=Je(r);e(this,de,n),e(this,B,a),e(this,G,e$1),e(this,ne,s),c(this,B),c(this,G),c(this,de),e(this,re,new on({baseURL:a+"/proxy/blockaid/",apiKey:at,httpAgent:s?.httpAgent,fetch:s?.fetch}));}async getProvider(e){return M({isTestnet:!!e.isTestnet,proxyApiUrl:c(this,B)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return Q(e)}deriveAddress(e){return Qe({...e,approvalController:c(this,G)})}deriveAddresses(e){return et({...e,approvalController:c(this,G)})}getBalances(e){let r=new ae({storage:e.storage,proxyApiUrl:c(this,B),fetch:c(this,ne)?.fetch});return ft({...e,tokenService:r,proxyApiUrl:c(this,B),fetch:c(this,ne)?.fetch})}getManifest(){let e=parseManifest(Ye);return e.success?e.data:void 0}getNetworkFee(e){return it(e,c(this,B))}getTransactionHistory(e){return St({network:e.network,address:e.address,proxyApiUrl:c(this,B)})}getTokens(e){return e.caipId?pt({caip2Id:e.caipId,proxyApiUrl:c(this,B)}):Promise.reject({error:rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.SOLANA_SIGN_TRANSACTION:return Ft({approvalController:c(this,G),proxyApiUrl:c(this,B),network:r,request:e,blockaid:c(this,re)});case RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return Bt({approvalController:c(this,G),proxyApiUrl:c(this,B),network:r,request:e,blockaid:c(this,re)});case RpcMethod.SOLANA_SIGN_MESSAGE:return Gt({approvalController:c(this,G),network:r,request:e})}return {error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};B=new WeakMap,G=new WeakMap,de=new WeakMap,re=new WeakMap,ne=new WeakMap,a(Ke,"SvmModule");var Kt=Ke;
16
16
 
17
17
  export { Kt as SvmModule };
18
18
  //# sourceMappingURL=out.js.map