@avalabs/svm-module 3.4.0 → 3.5.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.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -11,14 +11,14 @@ var coreUtilsSdk = require('@avalabs/core-utils-sdk');
|
|
|
11
11
|
var kit = require('@solana/kit');
|
|
12
12
|
var system = require('@solana-program/system');
|
|
13
13
|
var token = require('@solana-program/token');
|
|
14
|
-
var
|
|
14
|
+
var qr = require('@blockaid/client');
|
|
15
15
|
|
|
16
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var qr__default = /*#__PURE__*/_interopDefault(qr);
|
|
19
19
|
|
|
20
|
-
var Se=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=j.exponential()})=>{let a=0,o=0,i;for(;o<r;){o>0&&await Et(a);try{let s=await t(o);if(e(s))return s}catch(s){i=s;}a=n(o),o++;}let c=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(c)},j=class{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 a=n-e+1,o=e*r,i=2*r*(Math.pow(2,a)-1);return o+i}}};function Et(t){return new Promise(e=>setTimeout(e,t))}var Pe=t=>Se({operation:e=>t(e>0),maxRetries:2,backoffPolicy:j.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Be(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ke(t){let e,r=0;for(e=0;e<t.length;e++){let n=Be(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function B(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var Q=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return B([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return B([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var Ct=zod.z.array(zod.z.object({internalId:zod.z.string(),id:zod.z.string(),symbol:zod.z.string(),name:zod.z.string(),image:zod.z.string().optional().nullable(),current_price:zod.z.number().optional().nullable(),price_change_percentage_24h:zod.z.number().optional().nullable(),market_cap:zod.z.number().optional().nullable(),total_volume:zod.z.number().optional().nullable(),platforms:zod.z.record(zod.z.string(),zod.z.string())})),se=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return B([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Ct)}};var Ue=coreCoingeckoSdk.getBasicCoingeckoHttp(),$,K,ee=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,$,void 0);chunkTKL4UUHE_cjs.c(this,K,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let o=e[a];n[a]={},r.forEach(i=>{n[a]={[i]:{price:o?.[i],change24:o?.[`${i}_24h_change`],vol24:o?.[`${i}_24h_vol`],marketCap:o?.[`${i}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,$,e),chunkTKL4UUHE_cjs.d(this,K,r);}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let a=(await new se(chunkTKL4UUHE_cjs.b(this,K)).watchlistToken({tokens:e.symbol,currency:r})).filter(o=>e.isNative?o.internalId===`NATIVE-${e.symbol.toLowerCase()}`:o.platforms[e.caip2Id]===e.address)[0];return a?{priceInCurrency:a.current_price??0,change24:a.price_change_percentage_24h??0,marketCap:a.market_cap??0,vol24:a.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,o=`getSimplePrice-${e?`${ke(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,$)?.get?.(o),n)return n;try{n=await Pe(i=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,$)?.set?.(o,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,i=`getPricesWithMarketDataByAddresses-${`${ke(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,$)?.get?.(i),a)return a;try{a=await Pe(c=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:c}));}catch(c){console.error(c),a=void 0;}return chunkTKL4UUHE_cjs.b(this,$)?.set?.(i,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let o=await new Q(chunkTKL4UUHE_cjs.b(this,K)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(o,[n])}return coreCoingeckoSdk.simpleTokenPrice(Ue,{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:a=!1,change24:o=!1,lastUpdated:i=!1,useCoingeckoProxy:c=!1,shouldThrow:s=!0}){if(c){let m=await new Q(chunkTKL4UUHE_cjs.b(this,K)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:o,include_last_updated_at:i});return this.transformSimplePriceResponse(m,r)}return coreCoingeckoSdk.simplePrice(Ue,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:o,lastUpdated:i,shouldThrow:s})}};$=new WeakMap,K=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var Ae=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var D=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),xe=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var te=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});process.env.GLACIER_API_KEY;var z=(t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}});var Me={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 $t={proxyApiUrl:"https://proxy-api.avax.network"},zt={proxyApiUrl:"https://proxy-api-dev.avax.network"},Ve=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return $t;case vmModuleTypes.Environment.DEV:return zt}};var Ge=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var ce=({accountIndex:t})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");return {[vmModuleTypes.NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}};var $e=async t=>{let{approvalController:e,secretId:r}=t,n=Ge(t)?ce(t).SVM:void 0,a=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[vmModuleTypes.NetworkVMType.SVM]:base.base58.encode(base.hex.decode(a))}};var ze="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",We="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Ke="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",je="/proxy/nownodes/sol",qe="https://api.devnet.solana.com";var He="DUMMY_API_KEY";var M=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?qe:e+je});var Re=1e6,F={high:150*Re,medium:75*Re,low:2*Re},Xt=t=>(t.length===0?[F.low,F.low]:t.length===1?[t[0],F.low]:t).slice().sort((r,n)=>r-n);async function Ye(t,e){let a=await(await M({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(a.length===0||a.every(g=>g.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(F.high),maxPriorityFeePerGas:BigInt(F.high)},medium:{maxFeePerGas:BigInt(F.medium),maxPriorityFeePerGas:BigInt(F.medium)},low:{maxFeePerGas:BigInt(F.low),maxPriorityFeePerGas:BigInt(F.low)},baseFee:BigInt(F.low),displayDecimals:9,isFixedFee:!1};let i=Xt(a.map(g=>Number(g.prioritizationFee))),c=i.at(0),s=i.at(-1),m=Math.floor(i.length/2),p=i.length%2===1?i[m]:(i[m-1]+i[m])/2,l=BigInt(Math.ceil(s*1.05)),d=BigInt(Math.ceil(p*1.05)),u=BigInt(Math.ceil(c*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:u,maxPriorityFeePerGas:u},baseFee:u,displayDecimals:9,isFixedFee:!1}}var Zt=zod.z.object({address:zod.z.string(),name:zod.z.string(),symbol:zod.z.string(),contractType:zod.z.literal(vmModuleTypes.TokenType.SPL),caip2Id:zod.z.string().startsWith("solana:"),decimals:zod.z.number(),chainId:zod.z.number().optional(),logoUri:zod.z.string().optional(),color:zod.z.string().optional()}),Xe=zod.z.array(Zt);async function Je({caip2Id:t,proxyApiUrl:e}){try{return (await B([`${e}/solana-tokens?caip2Id=${t}`],Xe)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}var Ze=zod.z.object({nativeBalance:zod.z.object({lamports:zod.z.string(),solana:zod.z.string()}),nfts:zod.z.array(zod.z.object({associatedTokenAddress:zod.z.string(),mint:zod.z.string(),name:zod.z.string(),symbol:zod.z.string()})),tokens:zod.z.array(zod.z.object({associatedTokenAddress:zod.z.string(),mint:zod.z.string(),amountRaw:zod.z.string(),amount:zod.z.string(),decimals:zod.z.number(),name:zod.z.string(),symbol:zod.z.string(),logo:zod.z.string().optional().nullable()}))});var re,le,Qe,H=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,le);chunkTKL4UUHE_cjs.c(this,re,void 0);chunkTKL4UUHE_cjs.d(this,re,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,le,Qe).call(this,`/account/${r}/${e}/portfolio`),a=await B([n],Ze);return {address:e,portfolio:a}}catch(n){console.error("getPortfolio() failed:",n);let a=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${a}`}}}};re=new WeakMap,le=new WeakSet,Qe=function(e){return `${chunkTKL4UUHE_cjs.b(this,re)}${e}`};var W=t=>{switch(t.caipId){case ze:return "mainnet";case We:return "devnet";case Ke:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var rt=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:a})=>{let o=new H({proxyApiUrl:e}),i=n.pricingProviders?.coingecko.nativeTokenId??"",c=n.pricingProviders?.coingecko.assetPlatformId??"",s=r.toLowerCase(),m=W(n),p=await Promise.all(t.map(g=>o.getPortfolio({address:g,network:m}))),l=new Set(p.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:f})=>f):[])),d=await(c?a.getPricesByAddresses(Array.from(l),c,s):Promise.resolve(void 0)),u=await a.getWatchlistDataForToken({tokenDetails:{symbol:n.networkToken.symbol,isNative:!0,caip2Id:n.caipId??""},currency:s});return p.reduce((g,f)=>{if("error"in f)return {...g,[f.address]:{error:f.error}};let S=new coreUtilsSdk.TokenUnit(f.portfolio.nativeBalance.lamports,9,"SOL"),A=u.priceInCurrency!==void 0?S.mul(u.priceInCurrency):void 0,h={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:S.toSubUnit(),balanceDisplayValue:S.toString(),balanceInCurrency:A?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:A?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:i,...u},x=f.portfolio.tokens.reduce((_,{amountRaw:P,symbol:R,decimals:T,mint:k,name:I,logo:b})=>{let w=new coreUtilsSdk.TokenUnit(P,T,R),U=er(k,s,d),Te=U.priceInCurrency!==void 0?w.mul(U.priceInCurrency):void 0,he={type:vmModuleTypes.TokenType.SPL,address:k,name:I,symbol:R,decimals:T,balance:w.toSubUnit(),balanceDisplayValue:w.toString(),balanceInCurrency:Te?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:Te?.toDisplay({fixedDp:2}),logoUri:b??void 0,reputation:null,...U};return {..._,[k]:he}},{});return {...g,[f.address]:{[n.networkToken.symbol]:h,...x}}},{})},er=(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});var Ie=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),nt=(t,e,r,n)=>{let a=e!==-1?t[e]:r.preTokenBalances.find(s=>!t.includes(s.owner))?.owner||r.postTokenBalances.find(s=>!t.includes(s.owner))?.owner,o=r.preTokenBalances.reduce((s,{owner:m,mint:p,amount:l})=>({...s,[`${m}-${p}`]:l}),{}),i=r.postTokenBalances.reduce((s,{owner:m,mint:p,amount:l,decimals:d})=>{let u=`${m}-${p}`,g=o[u]??0n,f=l-g;if(f===0n)return s;let S=f>0n&&m===a,A=f<0n&&m===a;if(S){let h=Object.keys(o).find(P=>{let[R,T]=P.split("-");if(T!==p||R===a)return !1;let k=o[P],I=r.postTokenBalances.find(({owner:w,mint:U})=>w===R&&U===p);return !I||I.amount<k});if(!h)return s;let x=n.tokens?.filter(P=>"contractType"in P).find(P=>P.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:d,address:p,symbol:"Unknown",name:"Unknown"},_={...x,type:x.contractType,from:{...x,address:h.split("-")[0]},to:{...x,address:m},amount:new coreUtilsSdk.TokenUnit(f,d,"").toDisplay()};return [...s,_]}else if(A){let h=r.postTokenBalances.find(({owner:P,mint:R})=>R===p&&P!==a&&(o[`${P}-${p}`]??0n)<(r.postTokenBalances.find(T=>T.owner===P&&T.mint===p)?.amount??0n));if(!h)return s;let x=n.tokens?.filter(P=>"contractType"in P).find(P=>P.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:d,address:p,symbol:"Unknown",name:"Unknown"},_={...x,type:x.contractType,from:{...x,address:a},to:{...x,address:h.owner},amount:new coreUtilsSdk.TokenUnit(-f,d,"").toDisplay()};return [...s,_]}return s},[]),c=tr(t,e,r,n,i,a);return c&&i.push(c),i},tr=(t,e,{paidFee:r,preBalances:n,postBalances:a},o,i=[],c)=>{if(e===-1){if(i.length>0&&c&&i.some(T=>T.to?.address===c)){let T=t.findIndex(k=>k===c);if(T!==-1){let k=n[T],b=a[T]-k;if(b<=0){let w=Math.abs(b)+r;if(w>r){let U=new coreUtilsSdk.TokenUnit(w,o.networkToken.decimals,""),he=a.map((ae,Z)=>ae-n[Z]).reduce((ae,Z,_e)=>_e!==T&&Z>ae.amount&&Z>0?{index:_e,amount:Z}:ae,{index:0,amount:0});return {amount:U.toDisplay(),from:{address:c},to:{address:t[he.index]},name:o.networkToken.name,symbol:o.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}}}}}return null}let s=t[e],m=n[e],l=a[e]-m,d=a.map((R,T)=>R-n[T]),u=i.length>0,g=l!==0?l+r:0,f=g>0,S=0,A=!1;if(u&&e===0&&c){let R=i.some(k=>k.to?.address===c),T=i.some(k=>k.from?.address===c);R&&!T&&(f=!1,A=!0,S=a.map((b,w)=>b-n[w]).reduce((b,w,U)=>U!==e&&w>b.amount&&w>0?{index:U,amount:w}:b,{index:0,amount:0}).index);}if(u&&l<0){let R=d.reduce((T,k,I)=>I!==e&&k>T.amount?{index:I,amount:k}:T,{index:0,amount:0});R.amount>r*2&&!A&&(g=R.amount,f=!0,S=R.index);}else u&&l<=0&&i.some(T=>T.to?.address===s)&&(g=Math.abs(l)+r,f=!1,S=d.reduce((k,I,b)=>b!==e&&I>k.amount&&I>0?{index:b,amount:I}:k,{index:0,amount:0}).index);if(!g)return null;let h=new coreUtilsSdk.TokenUnit(Math.abs(g),o.networkToken.decimals,"");if(!u){let R=d.reduce(({index:T,change:k},I,b)=>I>k?{index:b,change:I}:{index:T,change:k},{index:0,change:d[0]});S=f?0:R.index;}let x=t[S],_=f?x||s:c||s,P=f?c||s:x||c||s;return {amount:h.toDisplay(),from:{address:_},to:{address:P},name:o.networkToken.name,symbol:o.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};var ne=t=>t.status==="fulfilled";function ot(t){return e=>!!e[t]}var st=async({network:t,address:e,proxyApiUrl:r})=>{let n=M({isTestnet:!!t.isTestnet,proxyApiUrl:r}),o=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(s=>s.signature),i=o;try{let s=new H({proxyApiUrl:r}),m=W(t),p=await s.getPortfolio({address:e,network:m});if("portfolio"in p){let l=p.portfolio.tokens.map(A=>A.associatedTokenAddress),d=p.portfolio.nfts.map(A=>A.associatedTokenAddress),g=[...l,...d].map(async A=>{try{return (await n.getSignaturesForAddress(kit.address(A),{limit:25}).send()).map(x=>x.signature)}catch(h){return console.error("Failed to get signatures for ATA:",A,h),[]}}),S=(await Promise.allSettled(g)).filter(ne).map(A=>A.value).flat();i=Array.from(new Set([...o,...S]));}}catch(s){console.error("ATA discovery failed with error:",s);}return (await Promise.allSettled(i.map(async s=>({txHash:s.toString(),tx:await n.getTransaction(s,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(ne).map(s=>s.value).filter(ot("tx"))};var it=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function ct({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await st({network:t,address:e,proxyApiUrl:r})).map(({txHash:o,tx:i})=>{if(!i.meta)return null;let{meta:c,transaction:{message:s}}=i,m=s.accountKeys.map(f=>f.toString()),p=m.indexOf(e),l=p!==-1;!l&&c.preTokenBalances&&(c.preTokenBalances.some(S=>S.owner===e)||(c.postTokenBalances??[]).some(S=>S.owner===e))&&(l=!0,p=-1);let d=p!==-1&&p<s.header.numRequiredSignatures,u=nt(m,p,{paidFee:d?Number(c.fee):0,preBalances:c.preBalances.map(Number),postBalances:c.postBalances.map(Number),preTokenBalances:(c.preTokenBalances??[]).map(Ie),postTokenBalances:(c.postTokenBalances??[]).map(Ie)},t),g=nr(u,e);return {hash:o,txType:g,gasUsed:String(i.meta.computeUnitsConsumed??"0"),tokens:u,from:u[0]?.from?.address??m[0],to:u[0]?.to?.address??(d?"":e),isOutgoing:d,isIncoming:!d,isSender:d,timestamp:Number(i.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(i.meta.fee)/Number(i.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:it(o,t.explorerUrl)}}).filter(o=>o!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var nr=(t,e)=>{if(t.length===0)return vmModuleTypes.TransactionType.UNKNOWN;let r=t.filter(o=>o.from?.address===e||o.to?.address===e);if(r.length===0)return vmModuleTypes.TransactionType.UNKNOWN;let n=r.some(o=>o.from?.address===e),a=r.some(o=>o.to?.address===e);return n&&a?vmModuleTypes.TransactionType.SWAP:n?vmModuleTypes.TransactionType.SEND:a?vmModuleTypes.TransactionType.RECEIVE:vmModuleTypes.TransactionType.UNKNOWN};var pt=t=>{if(t?.type==="InstructionError")switch(t.code){case"ResultWithNegativeLamports":return {type:vmModuleTypes.AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"Your account does not have enough SOL to perform the operation"}}}return {type:vmModuleTypes.AlertType.WARNING,details:{title:"Transaction simulation has failed",description:"It is possible that this transaction will fail. Please proceed with caution."}}},be={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.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 lt(t){return t.ins.length===0&&t.outs.length===0}function mt(t){return t!=null}var dt=(t,e,r,n)=>{if(!kit.isInstructionForProgram(t,system.SYSTEM_PROGRAM_ADDRESS)||!kit.isInstructionWithAccounts(t)||!kit.isInstructionWithData(t))return null;try{if(system.identifySystemInstruction(t)!==system.SystemInstruction.TransferSol)return null;let{accounts:o,data:i}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),s=o.source.address===r===!0?"outs":"ins";return e[s].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[D("From",o.source.address),D("To",o.destination.address)]}}catch{return null}};var hr=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}},ut=async(t,e,r,n,a)=>{if(!a?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e))return null;try{let o=token.identifyTokenInstruction(e);if(o!==token.TokenInstruction.Transfer&&o!==token.TokenInstruction.TransferChecked)return null;let i=o===token.TokenInstruction.TransferChecked?token.parseTransferCheckedInstruction:token.parseTransferInstruction,{accounts:c,data:s}=i({...e,data:Uint8Array.from(e.data)}),m=await hr(t,c.source.address);if(!m)return null;let p=a.find(g=>g.address.toLowerCase()===m.toLowerCase());if(!p)return null;let d=(c.source.address===n||c.authority.address===n)===!0?"outs":"ins",u="decimals"in s?s.decimals:p.decimals;return r[d].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(s.amount,u,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[D("From",c.source.address),D("To",c.destination.address)]}}catch{return null}};var ft=async(t,e,r,n)=>{let a=await coreWalletsSdk.deserializeTransactionMessage(t,n),o={ins:[],outs:[]},i=await Promise.allSettled(a.instructions.map(async c=>dt(c,o,e,r.networkToken)??await ut(n,c,o,e,r.tokens)??null)).then(c=>c.filter(ne).map(s=>s.value).filter(mt));return {balanceChange:o,details:i}};var yt=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],a={},o={},i=Object.keys(e.assets_diff??{}).filter(c=>c!==t);return n.forEach(({asset:c,in:s,out:m})=>{let p=Ar(c,r);if(!p)return;let l="address"in p?p.address:p.symbol;s&&(a[l]||(a[l]={token:p,items:[]}),a[l].items.push({displayValue:String(s.value),usdPrice:typeof s.usd_price=="number"?String(s.usd_price):void 0})),m&&(o[l]||(o[l]={token:p,items:[]}),o[l].items.push({displayValue:String(m.value),usdPrice:typeof m.usd_price=="number"?String(m.usd_price):void 0}));}),{balanceChange:{ins:Object.values(a),outs:Object.values(o)},otherAffectedAddresses:i}},Pr=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),kr=(t,e)=>({type:vmModuleTypes.TokenType.SPL,address:t.address,caip2Id:e.caipId??"",contractType:vmModuleTypes.TokenType.SPL,decimals:t.decimals,name:t.name,symbol:t.symbol,logoUri:t.logo||void 0}),Ar=(t,e)=>t.type==="TOKEN"?kr(t,e):t.type==="SOL"||t.type==="ETH"?Pr(t):null;var Tt=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:base.base64.encode(base.base58.decode(t.account))})}catch(n){return console.error("solana.message.scan() error",n),null}};var ue=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,a=await Tt(t),{simulation:o,validation:i}=a?.result??{},c={title:"Transaction Details",items:[te("Raw Data",t.params.transactionBase64)]},s=[c],m=!1,p,l;if(!i||i.result_type==="Warning"?l=be[vmModuleTypes.AlertType.WARNING]:i.result_type==="Malicious"?l=be[vmModuleTypes.AlertType.DANGER]:a?.error_details&&(l=pt(a.error_details)),o){let{balanceChange:d,otherAffectedAddresses:u}=yt(n.account,o,e);if(p=d,u.length>0){let g=o.account_summary.account_assets_diff,f=g?.filter(h=>h.out&&h.out.raw_value>0)??[],S=g?.filter(h=>h.in&&h.in.raw_value>0)??[];f.length>0&&S.length>0?(c.items.push(D("Account",n.account)),c.items.push(xe("Interacting with",u))):(c.items.push(D(u.length===1?"From":"Account",n.account)),c.items.push(u.length===1?D("To",u[0]):xe("Interacting with",u)));}else c.items.push(D("Account",n.account));m=!0;}else {let{balanceChange:d,details:u}=await ft(n.transactionBase64,n.account,e,r);p=d,s.push(...u);}return {isSimulationSuccessful:m,details:s,alert:l,balanceChange:p}};var Rr="https://explorer.solana.com";function fe(t,e,r="tx"){try{let n=t.explorerUrl?new URL(t.explorerUrl):new URL(Rr);return n.pathname+=`${r}/${e}`,n.toString()}catch{return `${t.explorerUrl}/${r}/${e}`}}var Ne=400,br=15,St=async({provider:t,txHash:e,approvalController:r,request:n,network:a,commitment:o="confirmed",maxRetries:i=br})=>{let c=0,s=null,m=fe(a,e,"tx");for(;c<i;)try{let p=await t.getSignatureStatuses([kit.signature(e)],{searchTransactionHistory:!0}).send();if(!p?.value?.[0]){await new Promise(u=>setTimeout(u,Ne)),c++;continue}let{confirmationStatus:l,err:d}=p.value[0];if(d)return console.error("[waitForTransactionConfirmation] Transaction failed:",d),r.onTransactionReverted({txHash:e,request:n}),!1;if(l&&l!==s&&(s=l,l==="processed"&&r.onTransactionPending({txHash:e,request:n,explorerLink:m}),o==="processed"&&l==="processed"||o==="confirmed"&&["confirmed","finalized"].includes(l)||o==="finalized"&&l==="finalized"))return r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0;await new Promise(u=>setTimeout(u,Ne)),c++;}catch(p){if(p instanceof Error&&p.message.includes("Transaction failed"))return console.error("[waitForTransactionConfirmation] Transaction explicitly failed"),r.onTransactionReverted({txHash:e,request:n}),!1;await new Promise(l=>setTimeout(l,Ne)),c++;}return s==="confirmed"||s==="finalized"?(r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0):(r.onTransactionReverted({txHash:e,request:n}),!1)};var wr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64(),sendOptions:zod.z.object({preflightCommitment:zod.z.enum(["processed","confirmed","finalized"]).optional(),maxRetries:zod.z.bigint().optional(),minContextSlot:zod.z.bigint().optional(),skipPreflight:zod.z.boolean().optional()}).optional()}),Nr=zod.z.tuple([wr]),Pt=t=>Nr.safeParse(t);var At=async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:a})=>{let{params:o}=t,{data:i,success:c,error:s}=Pt(o);if(!c)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams(z("Transaction params are invalid",s))};let[{account:m,serializedTx:p,sendOptions:l}]=i,d=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:u,isSimulationSuccessful:g,alert:f,balanceChange:S}=await ue({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:p},blockaid:a},network:e,provider:d}),A={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:u,alert:f,balanceChange:S,networkFeeSelector:!1,isSimulationSuccessful:g},h={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:m,data:p},x=await r.requestApproval({request:t,displayData:A,signingData:h});if("error"in x)return {error:x.error};let _;try{_=await _r(d,x,l);let P=fe(e,_);return await r.onTransactionPending({txHash:_,request:t,explorerLink:P}),St({provider:d,txHash:_,approvalController:r,request:t,network:e,commitment:l?.preflightCommitment}),{result:_}}catch(P){return console.error(P),{error:rpcErrors.rpcErrors.internal(z("Transaction failed",P))}}},_r=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var Er=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Cr=zod.z.tuple([Er]),xt=t=>Cr.safeParse(t);var Rt=async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:a})=>{let{params:o}=t,{data:i,success:c,error:s}=xt(o);if(!c)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams(z("Transaction params are invalid",s))};let[{account:m,serializedTx:p}]=i,l=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:u,alert:g,balanceChange:f}=await ue({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:p},blockaid:a},network:e,provider:l}),S={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:g,balanceChange:f&<(f)?void 0:f,networkFeeSelector:!1,isSimulationSuccessful:u},A={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:m,data:p},h=await r.requestApproval({request:t,displayData:S,signingData:A});return "error"in h?{error:h.error}:"signedData"in h?{result:h.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var It=t=>{try{let e=base.base64.decode(t);return kit.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}};var Or=zod.z.object({account:zod.z.string(),serializedMessage:zod.z.string().base64()}).refine(({serializedMessage:t})=>!It(t),{message:"Cannot use signMessage() calls for signing transactions"}),Mr=zod.z.tuple([Or]),bt=t=>Mr.safeParse(t);var Nt=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:a,success:o,error:i}=bt(n);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams(z("Message signing params are invalid",i))};let[{account:c,serializedMessage:s}]=a,m=new TextDecoder,p={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:[D("Account",c),Ae("Message",m.decode(base.base64.decode(s))),te("Raw Message (Base-64)",s)]}],networkFeeSelector:!1},l={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE,account:c,data:s},d=await r.requestApproval({request:t,displayData:p,signingData:l});return "error"in d?{error:d.error}:"signedData"in d?{result:d.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var E,G,oe,J,_t=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:a}){chunkTKL4UUHE_cjs.c(this,E,void 0);chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.c(this,oe,void 0);chunkTKL4UUHE_cjs.c(this,J,void 0);let{proxyApiUrl:o}=Ve(r);chunkTKL4UUHE_cjs.d(this,oe,n),chunkTKL4UUHE_cjs.d(this,E,o),chunkTKL4UUHE_cjs.d(this,G,e),chunkTKL4UUHE_cjs.b(this,E),chunkTKL4UUHE_cjs.b(this,G),chunkTKL4UUHE_cjs.b(this,oe),chunkTKL4UUHE_cjs.d(this,J,new $r__default.default({baseURL:o+"/proxy/blockaid/",apiKey:He,httpAgent:a?.httpAgent,fetch:a?.fetch}));}async getProvider(e){return M({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return ce(e)}deriveAddress(e){return $e({...e,approvalController:chunkTKL4UUHE_cjs.b(this,G)})}getBalances(e){let r=new ee({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)});return rt({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)})}getManifest(){let e=vmModuleTypes.parseManifest(Me);return e.success?e.data:void 0}getNetworkFee(e){return Ye(e,chunkTKL4UUHE_cjs.b(this,E))}getTransactionHistory(e){return ct({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)})}getTokens(e){return e.caipId?Je({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)}):Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION:return Rt({approvalController:chunkTKL4UUHE_cjs.b(this,G),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),network:r,request:e,blockaid:chunkTKL4UUHE_cjs.b(this,J)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return At({approvalController:chunkTKL4UUHE_cjs.b(this,G),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),network:r,request:e,blockaid:chunkTKL4UUHE_cjs.b(this,J)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return Nt({approvalController:chunkTKL4UUHE_cjs.b(this,G),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};E=new WeakMap,G=new WeakMap,oe=new WeakMap,J=new WeakMap;
|
|
20
|
+
function Oe(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ve(t){let e,r=0;for(e=0;e<t.length;e++){let n=Oe(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}var Re=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=q.exponential()})=>{let o=0,s=0,i;for(;s<r;){s>0&&await Lt(o);try{let a=await t(s);if(e(a))return a}catch(a){i=a;}o=n(s),s++;}let c=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(c)},q=class{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 o=n-e+1,s=e*r,i=2*r*(Math.pow(2,o)-1);return s+i}}};function Lt(t){return new Promise(e=>setTimeout(e,t))}var be=t=>Re({operation:e=>t(e>0),maxRetries:2,backoffPolicy:q.constant(1),isSuccess:e=>e?.status?.error_code!==429});async function L(t,e,r=fetch){let n=await r(...t);if(!n.ok)throw new Error(`Request failed with status ${n.status}`);let o=await n.json();return e.parse(o)}var ne=class{constructor(e,r){this.proxyApiUrl=e;this.fetchFn=r;}simplePrice(e){let r=new URLSearchParams(e);return L([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema,this.fetchFn)}simplePriceByContractAddresses(e){let{id:r,...n}=e,o=new URLSearchParams(n);return L([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema,this.fetchFn)}};var Ut=zod.z.array(zod.z.object({internalId:zod.z.string(),id:zod.z.string(),symbol:zod.z.string(),name:zod.z.string(),image:zod.z.string().optional().nullable(),current_price:zod.z.number().optional().nullable(),price_change_percentage_24h:zod.z.number().optional().nullable(),market_cap:zod.z.number().optional().nullable(),total_volume:zod.z.number().optional().nullable(),platforms:zod.z.record(zod.z.string(),zod.z.string())})),de=class{constructor(e){this.proxyApiUrl=e;}watchlistToken(e){let r=new URLSearchParams(e);return L([`${this.proxyApiUrl}/watchlist/tokens?${r}`,{method:"GET",headers:{"Content-Type":"application/json"}}],Ut)}};var $,K,j,X,oe=class{constructor({storage:e,proxyApiUrl:r,fetch:n}){chunkTKL4UUHE_cjs.c(this,$,void 0);chunkTKL4UUHE_cjs.c(this,K,void 0);chunkTKL4UUHE_cjs.c(this,j,void 0);chunkTKL4UUHE_cjs.c(this,X,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(o=>{let s=e[o];n[o]={},r.forEach(i=>{n[o]={[i]:{price:s?.[i],change24:s?.[`${i}_24h_change`],vol24:s?.[`${i}_24h_vol`],marketCap:s?.[`${i}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,$,e),chunkTKL4UUHE_cjs.d(this,K,r),chunkTKL4UUHE_cjs.d(this,j,n??globalThis.fetch),chunkTKL4UUHE_cjs.d(this,X,coreCoingeckoSdk.getBasicCoingeckoHttp(void 0,chunkTKL4UUHE_cjs.b(this,j)));}async getWatchlistDataForToken({tokenDetails:e,currency:r=coreCoingeckoSdk.VsCurrencyType.USD}){let n=(await new de(chunkTKL4UUHE_cjs.b(this,K)).watchlistToken({tokens:e.symbol,currency:r})).filter(s=>e.isNative?s.internalId===`NATIVE-${e.symbol.toLowerCase()}`:s.platforms[e.caip2Id]===e.address),[o]=n;return o?{priceInCurrency:o.current_price??0,change24:o.price_change_percentage_24h??0,marketCap:o.market_cap??0,vol24:o.total_volume??0}:{priceInCurrency:0,change24:0,marketCap:0,vol24:0}}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${ve(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,$)?.get?.(s),n)return n;try{n=await be(i=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:i}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,$)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,i=`getPricesWithMarketDataByAddresses-${`${ve(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.b(this,$)?.get?.(i),o)return o;try{o=await be(c=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:c}));}catch(c){console.error(c),o=void 0;}return chunkTKL4UUHE_cjs.b(this,$)?.set?.(i,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let s=await new ne(chunkTKL4UUHE_cjs.b(this,K),chunkTKL4UUHE_cjs.b(this,j)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return coreCoingeckoSdk.simpleTokenPrice(chunkTKL4UUHE_cjs.b(this,X),{assetPlatformId:e,tokenAddresses:r,currencies:[n],marketCap:!0,vol24:!0,change24:!0})}async simplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD],marketCap:n=!1,vol24:o=!1,change24:s=!1,lastUpdated:i=!1,useCoingeckoProxy:c=!1,shouldThrow:a=!0}){if(c){let m=await new ne(chunkTKL4UUHE_cjs.b(this,K),chunkTKL4UUHE_cjs.b(this,j)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:s,include_last_updated_at:i});return this.transformSimplePriceResponse(m,r)}return coreCoingeckoSdk.simplePrice(chunkTKL4UUHE_cjs.b(this,X),{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:s,lastUpdated:i,shouldThrow:a})}};$=new WeakMap,K=new WeakMap,j=new WeakMap,X=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var Ie=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var _=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),we=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var se=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});process.env.GLACIER_API_KEY;var z=(t,e)=>({message:`${t}${e instanceof Error?`: ${e.message}`:""}`,data:{cause:e}});var Ge={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 qt={proxyApiUrl:"https://proxy-api.avax.network"},Kt={proxyApiUrl:"https://proxy-api-dev.avax.network"},ze=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return qt;case vmModuleTypes.Environment.DEV:return Kt}};var We=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var fe=({accountIndex:t})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");return {[vmModuleTypes.NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}};var qe=async t=>{let{approvalController:e,secretId:r}=t,n=We(t)?fe(t).SVM:void 0,o=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[vmModuleTypes.NetworkVMType.SVM]:base.base58.encode(base.hex.decode(o))}};var Ke="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",je="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",He="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",Ye="/proxy/nownodes/sol",Xe="https://api.devnet.solana.com";var Je="DUMMY_API_KEY";var O=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?Xe:e+Ye});var De=1e6,M={high:150*De,medium:75*De,low:2*De},Qt=t=>(t.length===0?[M.low,M.low]:t.length===1?[t[0],M.low]:t).slice().sort((r,n)=>r-n);async function Ze(t,e){let o=await(await O({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(o.length===0||o.every(y=>y.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(M.high),maxPriorityFeePerGas:BigInt(M.high)},medium:{maxFeePerGas:BigInt(M.medium),maxPriorityFeePerGas:BigInt(M.medium)},low:{maxFeePerGas:BigInt(M.low),maxPriorityFeePerGas:BigInt(M.low)},baseFee:BigInt(M.low),displayDecimals:9,isFixedFee:!1};let i=Qt(o.map(y=>Number(y.prioritizationFee))),c=i.at(0),a=i.at(-1),m=Math.floor(i.length/2),p=i.length%2===1?i[m]:(i[m-1]+i[m])/2,l=BigInt(Math.ceil(a*1.05)),d=BigInt(Math.ceil(p*1.05)),u=BigInt(Math.ceil(c*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:u,maxPriorityFeePerGas:u},baseFee:u,displayDecimals:9,isFixedFee:!1}}var tr=zod.z.object({address:zod.z.string(),name:zod.z.string(),symbol:zod.z.string(),contractType:zod.z.literal(vmModuleTypes.TokenType.SPL),caip2Id:zod.z.string().startsWith("solana:"),decimals:zod.z.number(),chainId:zod.z.number().optional(),logoUri:zod.z.string().optional(),color:zod.z.string().optional()}),Qe=zod.z.array(tr);async function et({caip2Id:t,proxyApiUrl:e}){try{return (await L([`${e}/solana-tokens?caip2Id=${t}`],Qe)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}var tt=zod.z.object({nativeBalance:zod.z.object({lamports:zod.z.string(),solana:zod.z.string()}),nfts:zod.z.array(zod.z.object({associatedTokenAddress:zod.z.string(),mint:zod.z.string(),name:zod.z.string(),symbol:zod.z.string()})),tokens:zod.z.array(zod.z.object({associatedTokenAddress:zod.z.string(),mint:zod.z.string(),amountRaw:zod.z.string(),amount:zod.z.string(),decimals:zod.z.number(),name:zod.z.string(),symbol:zod.z.string(),logo:zod.z.string().optional().nullable()}))});var ae,ie,ye,rt,J=class{constructor(e){chunkTKL4UUHE_cjs.c(this,ye);chunkTKL4UUHE_cjs.c(this,ae,void 0);chunkTKL4UUHE_cjs.c(this,ie,void 0);chunkTKL4UUHE_cjs.d(this,ae,`${e.proxyApiUrl}/proxy/moralis`),chunkTKL4UUHE_cjs.d(this,ie,e.fetch??globalThis.fetch);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,ye,rt).call(this,`/account/${r}/${e}/portfolio`),o=await L([n],tt,chunkTKL4UUHE_cjs.b(this,ie));return {address:e,portfolio:o}}catch(n){console.error("getPortfolio() failed:",n);let o=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${o}`}}}};ae=new WeakMap,ie=new WeakMap,ye=new WeakSet,rt=function(e){return `${chunkTKL4UUHE_cjs.b(this,ae)}${e}`};var W=t=>{switch(t.caipId){case Ke:return "mainnet";case je:return "devnet";case He:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var st=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:o,fetch:s})=>{let i=new J({proxyApiUrl:e,fetch:s}),c=n.pricingProviders?.coingecko.nativeTokenId??"",a=n.pricingProviders?.coingecko.assetPlatformId??"",m=r.toLowerCase(),p=W(n),l=await Promise.all(t.map(g=>i.getPortfolio({address:g,network:p}))),d=new Set(l.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:T})=>T):[])),u=await(a?o.getPricesByAddresses(Array.from(d),a,m):Promise.resolve(void 0)),y=await o.getWatchlistDataForToken({tokenDetails:{symbol:n.networkToken.symbol,isNative:!0,caip2Id:n.caipId??""},currency:m});return l.reduce((g,T)=>{if("error"in T)return {...g,[T.address]:{error:T.error}};let k=new coreUtilsSdk.TokenUnit(T.portfolio.nativeBalance.lamports,9,"SOL"),h=y.priceInCurrency!==void 0?k.mul(y.priceInCurrency):void 0,x={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:k.toSubUnit(),balanceDisplayValue:k.toString(),balanceInCurrency:h?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:h?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:c,...y},C=T.portfolio.tokens.reduce((S,{amountRaw:R,symbol:P,decimals:A,mint:b,name:w,logo:B})=>{let F=new coreUtilsSdk.TokenUnit(R,A,P),le=nr(b,m,u),me=le.priceInCurrency!==void 0?F.mul(le.priceInCurrency):void 0,H={type:vmModuleTypes.TokenType.SPL,address:b,name:w,symbol:P,decimals:A,balance:F.toSubUnit(),balanceDisplayValue:F.toString(),balanceInCurrency:me?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:me?.toDisplay({fixedDp:2}),logoUri:B??void 0,reputation:null,...le};return {...S,[b]:H}},{});return {...g,[T.address]:{[n.networkToken.symbol]:x,...C}}},{})},nr=(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});var _e=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),at=(t,e,r,n)=>{let o=e!==-1?t[e]:r.preTokenBalances.find(a=>!t.includes(a.owner))?.owner||r.postTokenBalances.find(a=>!t.includes(a.owner))?.owner,s=r.preTokenBalances.reduce((a,{owner:m,mint:p,amount:l})=>({...a,[`${m}-${p}`]:l}),{}),i=r.postTokenBalances.reduce((a,{owner:m,mint:p,amount:l,decimals:d})=>{let u=`${m}-${p}`,y=s[u]??0n,g=l-y;if(g===0n)return a;let T=g>0n&&m===o,k=g<0n&&m===o;if(T){let h=Object.keys(s).find(S=>{let[R,P]=S.split("-");if(P!==p||R===o)return !1;let A=s[S],b=r.postTokenBalances.find(({owner:B,mint:F})=>B===R&&F===p);return !b||b.amount<A});if(!h)return a;let x=n.tokens?.filter(S=>"contractType"in S).find(S=>S.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:d,address:p,symbol:"Unknown",name:"Unknown"},C={...x,type:x.contractType,from:{...x,address:h.split("-")[0]},to:{...x,address:m},amount:new coreUtilsSdk.TokenUnit(g,d,"").toDisplay()};return [...a,C]}else if(k){let h=r.postTokenBalances.find(({owner:S,mint:R})=>R===p&&S!==o&&(s[`${S}-${p}`]??0n)<(r.postTokenBalances.find(P=>P.owner===S&&P.mint===p)?.amount??0n));if(!h)return a;let x=n.tokens?.filter(S=>"contractType"in S).find(S=>S.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:d,address:p,symbol:"Unknown",name:"Unknown"},C={...x,type:x.contractType,from:{...x,address:o},to:{...x,address:h.owner},amount:new coreUtilsSdk.TokenUnit(-g,d,"").toDisplay()};return [...a,C]}return a},[]),c=or(t,e,r,n,i,o);return c&&i.push(c),i},or=(t,e,{paidFee:r,preBalances:n,postBalances:o},s,i=[],c)=>{if(e===-1){if(i.length>0&&c&&i.some(P=>P.to?.address===c)){let P=t.findIndex(A=>A===c);if(P!==-1){let A=n[P],w=o[P]-A;if(w<=0){let B=Math.abs(w)+r;if(B>r){let F=new coreUtilsSdk.TokenUnit(B,s.networkToken.decimals,""),me=o.map((H,re)=>H-n[re]).reduce((H,re,Ue)=>Ue!==P&&re>H.amount&&re>0?{index:Ue,amount:re}:H,{index:0,amount:0});return {amount:F.toDisplay(),from:{address:c},to:{address:t[me.index]},name:s.networkToken.name,symbol:s.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}}}}}return null}let a=t[e],m=n[e],l=o[e]-m,d=o.map((R,P)=>R-n[P]),u=i.length>0,y=l!==0?l+r:0,g=y>0,T=0,k=!1;if(u&&e===0&&c){let R=i.some(A=>A.to?.address===c),P=i.some(A=>A.from?.address===c);R&&!P&&(g=!1,k=!0,T=o.map((w,B)=>w-n[B]).reduce((w,B,F)=>F!==e&&B>w.amount&&B>0?{index:F,amount:B}:w,{index:0,amount:0}).index);}if(u&&l<0){let R=d.reduce((P,A,b)=>b!==e&&A>P.amount?{index:b,amount:A}:P,{index:0,amount:0});R.amount>r*2&&!k&&(y=R.amount,g=!0,T=R.index);}else u&&l<=0&&i.some(P=>P.to?.address===a)&&(y=Math.abs(l)+r,g=!1,T=d.reduce((A,b,w)=>w!==e&&b>A.amount&&b>0?{index:w,amount:b}:A,{index:0,amount:0}).index);if(!y)return null;let h=new coreUtilsSdk.TokenUnit(Math.abs(y),s.networkToken.decimals,"");if(!u){let R=d.reduce(({index:P,change:A},b,w)=>b>A?{index:w,change:b}:{index:P,change:A},{index:0,change:d[0]});T=g?0:R.index;}let x=t[T],C=g?x||a:c||a,S=g?c||a:x||c||a;return {amount:h.toDisplay(),from:{address:C},to:{address:S},name:s.networkToken.name,symbol:s.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};var ce=t=>t.status==="fulfilled";function it(t){return e=>!!e[t]}var pt=async({network:t,address:e,proxyApiUrl:r})=>{let n=O({isTestnet:!!t.isTestnet,proxyApiUrl:r}),s=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(a=>a.signature),i=s;try{let a=new J({proxyApiUrl:r}),m=W(t),p=await a.getPortfolio({address:e,network:m});if("portfolio"in p){let l=p.portfolio.tokens.map(k=>k.associatedTokenAddress),d=p.portfolio.nfts.map(k=>k.associatedTokenAddress),y=[...l,...d].map(async k=>{try{return (await n.getSignaturesForAddress(kit.address(k),{limit:25}).send()).map(x=>x.signature)}catch(h){return console.error("Failed to get signatures for ATA:",k,h),[]}}),T=(await Promise.allSettled(y)).filter(ce).map(k=>k.value).flat();i=Array.from(new Set([...s,...T]));}}catch(a){console.error("ATA discovery failed with error:",a);}return (await Promise.allSettled(i.map(async a=>({txHash:a.toString(),tx:await n.getTransaction(a,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(ce).map(a=>a.value).filter(it("tx"))};var lt=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function mt({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await pt({network:t,address:e,proxyApiUrl:r})).map(({txHash:s,tx:i})=>{if(!i.meta)return null;let{meta:c,transaction:{message:a}}=i,m=a.accountKeys.map(g=>g.toString()),p=m.indexOf(e),l=p!==-1;!l&&c.preTokenBalances&&(c.preTokenBalances.some(T=>T.owner===e)||(c.postTokenBalances??[]).some(T=>T.owner===e))&&(l=!0,p=-1);let d=p!==-1&&p<a.header.numRequiredSignatures,u=at(m,p,{paidFee:d?Number(c.fee):0,preBalances:c.preBalances.map(Number),postBalances:c.postBalances.map(Number),preTokenBalances:(c.preTokenBalances??[]).map(_e),postTokenBalances:(c.postTokenBalances??[]).map(_e)},t),y=ar(u,e);return {hash:s,txType:y,gasUsed:String(i.meta.computeUnitsConsumed??"0"),tokens:u,from:u[0]?.from?.address??m[0],to:u[0]?.to?.address??(d?"":e),isOutgoing:d,isIncoming:!d,isSender:d,timestamp:Number(i.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(i.meta.fee)/Number(i.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:lt(s,t.explorerUrl)}}).filter(s=>s!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var ar=(t,e)=>{if(t.length===0)return vmModuleTypes.TransactionType.UNKNOWN;let r=t.filter(s=>s.from?.address===e||s.to?.address===e);if(r.length===0)return vmModuleTypes.TransactionType.UNKNOWN;let n=r.some(s=>s.from?.address===e),o=r.some(s=>s.to?.address===e);return n&&o?vmModuleTypes.TransactionType.SWAP:n?vmModuleTypes.TransactionType.SEND:o?vmModuleTypes.TransactionType.RECEIVE:vmModuleTypes.TransactionType.UNKNOWN};var dt=t=>{if(t?.type==="InstructionError")switch(t.code){case"ResultWithNegativeLamports":return {type:vmModuleTypes.AlertType.WARNING,details:{title:"This transaction will likely be reverted",description:"Your account does not have enough SOL to perform the operation"}}}return {type:vmModuleTypes.AlertType.WARNING,details:{title:"Transaction simulation has failed",description:"It is possible that this transaction will fail. Please proceed with caution."}}},Ce={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious transaction",description:"Use caution, this transaction might be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.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 ut(t){return t.ins.length===0&&t.outs.length===0}function ft(t){return t!=null}var gt=(t,e,r,n)=>{if(!kit.isInstructionForProgram(t,system.SYSTEM_PROGRAM_ADDRESS)||!kit.isInstructionWithAccounts(t)||!kit.isInstructionWithData(t))return null;try{if(system.identifySystemInstruction(t)!==system.SystemInstruction.TransferSol)return null;let{accounts:s,data:i}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),a=s.source.address===r===!0?"outs":"ins";return e[a].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[_("From",s.source.address),_("To",s.destination.address)]}}catch{return null}};var kr=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}},yt=async(t,e,r,n,o)=>{if(!o?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e))return null;try{let s=token.identifyTokenInstruction(e);if(s!==token.TokenInstruction.Transfer&&s!==token.TokenInstruction.TransferChecked)return null;let i=s===token.TokenInstruction.TransferChecked?token.parseTransferCheckedInstruction:token.parseTransferInstruction,{accounts:c,data:a}=i({...e,data:Uint8Array.from(e.data)}),m=await kr(t,c.source.address);if(!m)return null;let p=o.find(y=>y.address.toLowerCase()===m.toLowerCase());if(!p)return null;let d=(c.source.address===n||c.authority.address===n)===!0?"outs":"ins",u="decimals"in a?a.decimals:p.decimals;return r[d].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(a.amount,u,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[_("From",c.source.address),_("To",c.destination.address)]}}catch{return null}};var Tt=async(t,e,r,n)=>{let o=await coreWalletsSdk.deserializeTransactionMessage(t,n),s={ins:[],outs:[]},i=await Promise.allSettled(o.instructions.map(async c=>gt(c,s,e,r.networkToken)??await yt(n,c,s,e,r.tokens)??null)).then(c=>c.filter(ce).map(a=>a.value).filter(ft));return {balanceChange:s,details:i}};var Pt=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],o={},s={},i=Object.keys(e.assets_diff??{}).filter(c=>c!==t);return n.forEach(({asset:c,in:a,out:m})=>{let p=Rr(c,r);if(!p)return;let l="address"in p?p.address:p.symbol;a&&(o[l]||(o[l]={token:p,items:[]}),o[l].items.push({displayValue:String(a.value),usdPrice:typeof a.usd_price=="number"?String(a.usd_price):void 0})),m&&(s[l]||(s[l]={token:p,items:[]}),s[l].items.push({displayValue:String(m.value),usdPrice:typeof m.usd_price=="number"?String(m.usd_price):void 0}));}),{balanceChange:{ins:Object.values(o),outs:Object.values(s)},otherAffectedAddresses:i}},xr=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),vr=(t,e)=>({type:vmModuleTypes.TokenType.SPL,address:t.address,caip2Id:e.caipId??"",contractType:vmModuleTypes.TokenType.SPL,decimals:t.decimals,name:t.name,symbol:t.symbol,logoUri:t.logo||void 0}),Rr=(t,e)=>t.type==="TOKEN"?vr(t,e):t.type==="SOL"||t.type==="ETH"?xr(t):null;var St=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:base.base64.encode(base.base58.decode(t.account))})}catch(n){return console.error("solana.message.scan() error",n),null}};var Pe=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,o=await St(t),{simulation:s,validation:i}=o?.result??{},c={title:"Transaction Details",items:[se("Raw Data",t.params.transactionBase64)]},a=[c],m=!1,p,l;if(!i||i.result_type==="Warning"?l=Ce[vmModuleTypes.AlertType.WARNING]:i.result_type==="Malicious"?l=Ce[vmModuleTypes.AlertType.DANGER]:o?.error_details&&(l=dt(o.error_details)),s){let{balanceChange:d,otherAffectedAddresses:u}=Pt(n.account,s,e);if(p=d,u.length>0){let y=s.account_summary.account_assets_diff,g=y?.filter(h=>h.out&&h.out.raw_value>0)??[],T=y?.filter(h=>h.in&&h.in.raw_value>0)??[];g.length>0&&T.length>0?(c.items.push(_("Account",n.account)),c.items.push(we("Interacting with",u))):(c.items.push(_(u.length===1?"From":"Account",n.account)),c.items.push(u.length===1?_("To",u[0]):we("Interacting with",u)));}else c.items.push(_("Account",n.account));m=!0;}else {let{balanceChange:d,details:u}=await Tt(n.transactionBase64,n.account,e,r);p=d,a.push(...u);}return {isSimulationSuccessful:m,details:a,alert:l,balanceChange:p}};var wr="https://explorer.solana.com";function Se(t,e,r="tx"){try{let n=t.explorerUrl?new URL(t.explorerUrl):new URL(wr);return n.pathname+=`${r}/${e}`,n.toString()}catch{return `${t.explorerUrl}/${r}/${e}`}}var Be=400,Dr=15,At=async({provider:t,txHash:e,approvalController:r,request:n,network:o,commitment:s="confirmed",maxRetries:i=Dr})=>{let c=0,a=null,m=Se(o,e,"tx");for(;c<i;)try{let p=await t.getSignatureStatuses([kit.signature(e)],{searchTransactionHistory:!0}).send();if(!p?.value?.[0]){await new Promise(u=>setTimeout(u,Be)),c++;continue}let{confirmationStatus:l,err:d}=p.value[0];if(d)return console.error("[waitForTransactionConfirmation] Transaction failed:",d),r.onTransactionReverted({txHash:e,request:n}),!1;if(l&&l!==a&&(a=l,l==="processed"&&r.onTransactionPending({txHash:e,request:n,explorerLink:m}),s==="processed"&&l==="processed"||s==="confirmed"&&["confirmed","finalized"].includes(l)||s==="finalized"&&l==="finalized"))return r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0;await new Promise(u=>setTimeout(u,Be)),c++;}catch(p){if(p instanceof Error&&p.message.includes("Transaction failed"))return console.error("[waitForTransactionConfirmation] Transaction explicitly failed"),r.onTransactionReverted({txHash:e,request:n}),!1;await new Promise(l=>setTimeout(l,Be)),c++;}return a==="confirmed"||a==="finalized"?(r.onTransactionConfirmed({txHash:e,request:n,explorerLink:m}),!0):(r.onTransactionReverted({txHash:e,request:n}),!1)};var _r=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64(),sendOptions:zod.z.object({preflightCommitment:zod.z.enum(["processed","confirmed","finalized"]).optional(),maxRetries:zod.z.bigint().optional(),minContextSlot:zod.z.bigint().optional(),skipPreflight:zod.z.boolean().optional()}).optional()}),Cr=zod.z.tuple([_r]),xt=t=>Cr.safeParse(t);var Rt=async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:o})=>{let{params:s}=t,{data:i,success:c,error:a}=xt(s);if(!c)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams(z("Transaction params are invalid",a))};let[{account:m,serializedTx:p,sendOptions:l}]=i,d=O({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:u,isSimulationSuccessful:y,alert:g,balanceChange:T}=await Pe({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:p},blockaid:o},network:e,provider:d}),k={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:u,alert:g,balanceChange:T,networkFeeSelector:!1,isSimulationSuccessful:y},h={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:m,data:p},x=await r.requestApproval({request:t,displayData:k,signingData:h});if("error"in x)return {error:x.error};let C;try{C=await Br(d,x,l);let S=Se(e,C);return await r.onTransactionPending({txHash:C,request:t,explorerLink:S}),At({provider:d,txHash:C,approvalController:r,request:t,network:e,commitment:l?.preflightCommitment}),{result:C}}catch(S){return console.error(S),{error:rpcErrors.rpcErrors.internal(z("Transaction failed",S))}}},Br=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var Lr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Ur=zod.z.tuple([Lr]),bt=t=>Ur.safeParse(t);var wt=async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:o})=>{let{params:s}=t,{data:i,success:c,error:a}=bt(s);if(!c)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams(z("Transaction params are invalid",a))};let[{account:m,serializedTx:p}]=i,l=O({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:u,alert:y,balanceChange:g}=await Pe({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:m,chain:W(e),transactionBase64:p},blockaid:o},network:e,provider:l}),T={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:y,balanceChange:g&&ut(g)?void 0:g,networkFeeSelector:!1,isSimulationSuccessful:u},k={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:m,data:p},h=await r.requestApproval({request:t,displayData:T,signingData:k});return "error"in h?{error:h.error}:"signedData"in h?{result:h.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var Nt=t=>{try{let e=base.base64.decode(t);return kit.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}};var Vr=zod.z.object({account:zod.z.string(),serializedMessage:zod.z.string().base64()}).refine(({serializedMessage:t})=>!Nt(t),{message:"Cannot use signMessage() calls for signing transactions"}),Gr=zod.z.tuple([Vr]),Dt=t=>Gr.safeParse(t);var Ct=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:o,success:s,error:i}=Dt(n);if(!s)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams(z("Message signing params are invalid",i))};let[{account:c,serializedMessage:a}]=o,m=new TextDecoder,p={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",c),Ie("Message",m.decode(base.base64.decode(a))),se("Raw Message (Base-64)",a)]}],networkFeeSelector:!1},l={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE,account:c,data:a},d=await r.requestApproval({request:t,displayData:p,signingData:l});return "error"in d?{error:d.error}:"signedData"in d?{result:d.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var E,G,pe,ee,te,Bt=class{constructor({approvalController:e,environment:r,appInfo:n,runtime:o}){chunkTKL4UUHE_cjs.c(this,E,void 0);chunkTKL4UUHE_cjs.c(this,G,void 0);chunkTKL4UUHE_cjs.c(this,pe,void 0);chunkTKL4UUHE_cjs.c(this,ee,void 0);chunkTKL4UUHE_cjs.c(this,te,void 0);let{proxyApiUrl:s}=ze(r);chunkTKL4UUHE_cjs.d(this,pe,n),chunkTKL4UUHE_cjs.d(this,E,s),chunkTKL4UUHE_cjs.d(this,G,e),chunkTKL4UUHE_cjs.d(this,te,o),chunkTKL4UUHE_cjs.b(this,E),chunkTKL4UUHE_cjs.b(this,G),chunkTKL4UUHE_cjs.b(this,pe),chunkTKL4UUHE_cjs.d(this,ee,new qr__default.default({baseURL:s+"/proxy/blockaid/",apiKey:Je,httpAgent:o?.httpAgent,fetch:o?.fetch}));}async getProvider(e){return O({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return fe(e)}deriveAddress(e){return qe({...e,approvalController:chunkTKL4UUHE_cjs.b(this,G)})}getBalances(e){let r=new oe({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),fetch:chunkTKL4UUHE_cjs.b(this,te)?.fetch});return st({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),fetch:chunkTKL4UUHE_cjs.b(this,te)?.fetch})}getManifest(){let e=vmModuleTypes.parseManifest(Ge);return e.success?e.data:void 0}getNetworkFee(e){return Ze(e,chunkTKL4UUHE_cjs.b(this,E))}getTransactionHistory(e){return mt({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)})}getTokens(e){return e.caipId?et({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E)}):Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION:return wt({approvalController:chunkTKL4UUHE_cjs.b(this,G),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),network:r,request:e,blockaid:chunkTKL4UUHE_cjs.b(this,ee)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return Rt({approvalController:chunkTKL4UUHE_cjs.b(this,G),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,E),network:r,request:e,blockaid:chunkTKL4UUHE_cjs.b(this,ee)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return Ct({approvalController:chunkTKL4UUHE_cjs.b(this,G),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};E=new WeakMap,G=new WeakMap,pe=new WeakMap,ee=new WeakMap,te=new WeakMap;
|
|
21
21
|
|
|
22
|
-
exports.SvmModule =
|
|
22
|
+
exports.SvmModule = Bt;
|
|
23
23
|
//# sourceMappingURL=out.js.map
|
|
24
24
|
//# sourceMappingURL=index.cjs.map
|