@avalabs/svm-module 1.9.1 → 1.9.3

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 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 mr = require('@blockaid/client');
14
+ var ur = require('@blockaid/client');
15
15
 
16
16
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
17
 
18
- var mr__default = /*#__PURE__*/_interopDefault(mr);
18
+ var ur__default = /*#__PURE__*/_interopDefault(ur);
19
19
 
20
- var se=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=F.exponential()})=>{let o=0,a=0,i;for(;a<r;){a>0&&await kt(o);try{let c=await t(a);if(e(c))return c}catch(c){i=c;}o=n(a),a++;}let s=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(s)},F=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function kt(t){return new Promise(e=>setTimeout(e,t))}var ie=t=>se({operation:e=>t(e>0),maxRetries:2,backoffPolicy:F.constant(1),isSuccess:e=>e?.status?.error_code!==429});function Pe(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ce(t){let e,r=0;for(e=0;e<t.length;e++){let n=Pe(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function N(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 O=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,o=new URLSearchParams(n);return N([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var xe=coreCoingeckoSdk.getBasicCoingeckoHttp(),_,B,G=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,_,void 0);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(o=>{let a=e[o];n[o]={},r.forEach(i=>{n[o]={[i]:{price:a?.[i],change24:a?.[`${i}_24h_change`],vol24:a?.[`${i}_24h_vol`],marketCap:a?.[`${i}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,_,e),chunkTKL4UUHE_cjs.d(this,B,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,a=`getSimplePrice-${e?`${ce(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,_)?.get?.(a),n)return n;try{n=await ie(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?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,i=`getPricesWithMarketDataByAddresses-${`${ce(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.b(this,_)?.get?.(i),o)return o;try{o=await ie(s=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:s}));}catch(s){console.error(s),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 a=await new O(chunkTKL4UUHE_cjs.b(this,B)).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 coreCoingeckoSdk.simpleTokenPrice(xe,{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:a=!1,lastUpdated:i=!1,useCoingeckoProxy:s=!1,shouldThrow:c=!0}){if(s){let p=await new O(chunkTKL4UUHE_cjs.b(this,B)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:a,include_last_updated_at:i});return this.transformSimplePriceResponse(p,r)}return coreCoingeckoSdk.simplePrice(xe,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:a,lastUpdated:i,shouldThrow:c})}};_=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var pe=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var k=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),Ae=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var z=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var ve={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 wt={proxyApiUrl:"https://proxy-api.avax.network"},_t={proxyApiUrl:"https://proxy-api-dev.avax.network"},Ie=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return wt;case vmModuleTypes.Environment.DEV:return _t}};var De=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var q=({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 Ne=async t=>{let{approvalController:e,secretId:r}=t,n=De(t)?q(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 be="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",we="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",_e="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",Ee="/proxy/nownodes/sol",Ce="https://api.devnet.solana.com";var R=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?Ce:e+Ee});var le=1e6,I={high:150*le,medium:75*le,low:2*le},Ft=t=>(t.length===0?[I.low,I.low]:t.length===1?[t[0],I.low]:t).slice().sort((r,n)=>r-n);async function Be(t,e){let o=await(await R({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(o.length===0||o.every(h=>h.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(I.high),maxPriorityFeePerGas:BigInt(I.high)},medium:{maxFeePerGas:BigInt(I.medium),maxPriorityFeePerGas:BigInt(I.medium)},low:{maxFeePerGas:BigInt(I.low),maxPriorityFeePerGas:BigInt(I.low)},baseFee:BigInt(I.low),displayDecimals:9,isFixedFee:!1};let i=Ft(o.map(h=>Number(h.prioritizationFee))),s=i.at(0),c=i.at(-1),p=Math.floor(i.length/2),m=i.length%2===1?i[p]:(i[p-1]+i[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(m*1.05)),u=BigInt(Math.ceil(s*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 Vt=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()}),Le=zod.z.array(Vt);async function Me({caip2Id:t,proxyApiUrl:e}){try{return (await N([`${e}/solana-tokens?caip2Id=${t}`],Le)).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 L=t=>t.status==="fulfilled";var Ue=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 $,X,Fe,Y=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,X);chunkTKL4UUHE_cjs.c(this,$,void 0);chunkTKL4UUHE_cjs.d(this,$,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,X,Fe).call(this,`/account/${r}/${e}/portfolio`),o=await N([n],Ue);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}`}}}};$=new WeakMap,X=new WeakSet,Fe=function(e){return `${chunkTKL4UUHE_cjs.b(this,$)}${e}`};var M=t=>{switch(t.caipId){case be:return "mainnet";case we:return "devnet";case _e:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var ze=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:o})=>{let a=new Y({proxyApiUrl:e}),i=n.pricingProviders?.coingecko.nativeTokenId??"",s=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=M(n),m=await Promise.all(t.map(g=>a.getPortfolio({address:g,network:p}))),l=new Set(m.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:y})=>y):[])),d=await Promise.allSettled([i?await o.getSimplePrice({coinIds:[i],currencies:[c]}):Promise.resolve(void 0),s?await o.getPricesByAddresses(Array.from(l),s,c):Promise.resolve(void 0)]),[u,h]=d.map(g=>L(g)?g.value:void 0);return m.reduce((g,y)=>{if("error"in y)return {...g,[y.address]:{error:y.error}};let P=new coreUtilsSdk.TokenUnit(y.portfolio.nativeBalance.lamports,9,"SOL"),S=Ge(i,c,u),E=S.priceInCurrency!==void 0?P.mul(S.priceInCurrency):void 0,C={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:P.toSubUnit(),balanceDisplayValue:P.toString(),balanceInCurrency:E?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:E?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:i,...S},j=y.portfolio.tokens.reduce((te,{amountRaw:re,symbol:ye,decimals:ge,mint:ne,name:ht,logo:St})=>{let oe=new coreUtilsSdk.TokenUnit(re,ge,ye),ae=Ge(ne,c,h),Te=ae.priceInCurrency!==void 0?oe.mul(ae.priceInCurrency):void 0,Pt={type:vmModuleTypes.TokenType.SPL,address:ne,name:ht,symbol:ye,decimals:ge,balance:oe.toSubUnit(),balanceDisplayValue:oe.toString(),balanceInCurrency:Te?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:Te?.toDisplay({fixedDp:2}),logoUri:St??void 0,reputation:null,...ae};return {...te,[ne]:Pt}},{});return {...g,[y.address]:{[n.networkToken.symbol]:C,...j}}},{})},Ge=(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 me=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),je=(t,e,r,n)=>{let o=r.preTokenBalances.reduce((s,{owner:c,mint:p,amount:m})=>({...s,[`${c}-${p}`]:m}),{}),a=r.postTokenBalances.reduce((s,{owner:c,mint:p,amount:m,decimals:l})=>{let d=`${c}-${p}`,u=o[d]??0n,h=m-u;if(h<=0n)return s;let g=Object.keys(o).find(S=>{let[E,C]=S.split("-"),j=r.postTokenBalances.find(({owner:te,mint:re})=>te===E&&re===p);return C===p&&j&&o[S]>j.amount});if(!g)return s;let y=n.tokens?.filter(S=>"contractType"in S).find(S=>S.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},P={...y,type:y.contractType,from:{...y,address:g.split("-")[0]},to:{...y,address:c},amount:new coreUtilsSdk.TokenUnit(h,l,"").toDisplay()};return [...s,P]},[]),i=zt(t,e,r,n);return i&&a.push(i),a},zt=(t,e,{paidFee:r,preBalances:n,postBalances:o},a)=>{let i=t[e],s=n[e],c=o[e],p=c!==s?c-s+r:0,m=o.map((g,y)=>g-n[y]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),a.networkToken.decimals,""),u=m.reduce(({index:g,change:y},P,S)=>P>y?{index:S,change:P}:{index:g,change:y},{index:0,change:m[0]}),h=l?0:u.index;return {amount:d.toDisplay(),from:{address:l?t[h]:i},to:{address:l?i:t[h]},name:a.networkToken.name,symbol:a.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function We(t){return e=>!!e[t]}var qe=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=R({isTestnet:t,proxyApiUrl:r}),a=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(s=>s.signature);return (await Promise.allSettled(a.map(async s=>({txHash:s.toString(),tx:await n.getTransaction(s,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(L).map(s=>s.value).filter(We("tx"))};var Ke=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function Ye({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await qe({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:a,tx:i})=>{if(!i.meta)return null;let{meta:s,transaction:{message:c}}=i,p=c.accountKeys.map(u=>u.toString()),m=p.indexOf(e),l=m<c.header.numRequiredSignatures,d=je(p,m,{paidFee:l?Number(s.fee):0,preBalances:s.preBalances.map(Number),postBalances:s.postBalances.map(Number),preTokenBalances:(s.preTokenBalances??[]).map(me),postTokenBalances:(s.postTokenBalances??[]).map(me)},t);return {hash:a,txType:jt(d,e),gasUsed:String(i.meta.computeUnitsConsumed??"0"),tokens:d,from:d[0]?.from?.address??p[0],to:d[0]?.to?.address??(l?"":e),isOutgoing:l,isIncoming:!l,isSender:l,timestamp:Number(i.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(i.meta.fee)/Number(i.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:Ke(a,t.explorerUrl)}}).filter(a=>a!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var jt=(t,e)=>t.every(a=>a.from?.address===e)?vmModuleTypes.TransactionType.SEND:t.every(a=>a.to?.address===e)?vmModuleTypes.TransactionType.RECEIVE:t.some(a=>a.from?.address===e)&&t.some(a=>a.to?.address===e)?vmModuleTypes.TransactionType.SWAP:vmModuleTypes.TransactionType.UNKNOWN;var Xe=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."}}},de={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};function Je(t){return t.ins.length===0&&t.outs.length===0}function Ze(t){return t!=null}var Qe=(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:a,data:i}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),c=a.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[k("From",a.source.address),k("To",a.destination.address)]}}catch{return null}};var sr=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}},et=async(t,e,r,n,o)=>{if(!o?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e))return null;try{let a=token.identifyTokenInstruction(e);if(a!==token.TokenInstruction.Transfer&&a!==token.TokenInstruction.TransferChecked)return null;let i=a===token.TokenInstruction.TransferChecked?token.parseTransferCheckedInstruction:token.parseTransferInstruction,{accounts:s,data:c}=i({...e,data:Uint8Array.from(e.data)}),p=await sr(t,s.source.address);if(!p)return null;let m=o.find(h=>h.address.toLowerCase()===p.toLowerCase());if(!m)return null;let d=(s.source.address===n||s.authority.address===n)===!0?"outs":"ins",u="decimals"in c?c.decimals:m.decimals;return r[d].push({token:m,items:[{displayValue:new coreUtilsSdk.TokenUnit(c.amount,u,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${m.symbol}`,items:[k("From",s.source.address),k("To",s.destination.address)]}}catch{return null}};var tt=async(t,e,r,n)=>{let o=await coreWalletsSdk.deserializeTransactionMessage(t,n),a={ins:[],outs:[]},i=await Promise.allSettled(o.instructions.map(async s=>Qe(s,a,e,r.networkToken)??await et(n,s,a,e,r.tokens)??null)).then(s=>s.filter(L).map(c=>c.value).filter(Ze));return {balanceChange:a,details:i}};var nt=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],o={},a={},i=Object.keys(e.assets_diff??{}).filter(s=>s!==t);return n.forEach(({asset:s,in:c,out:p})=>{let m=lr(s,r);if(!m)return;let l="address"in m?m.address:m.symbol;c&&(o[l]||(o[l]={token:m,items:[]}),o[l].items.push({displayValue:String(c.value),usdPrice:typeof c.usd_price=="number"?String(c.usd_price):void 0})),p&&(a[l]||(a[l]={token:m,items:[]}),a[l].items.push({displayValue:String(p.value),usdPrice:typeof p.usd_price=="number"?String(p.usd_price):void 0}));}),{balanceChange:{ins:Object.values(o),outs:Object.values(a)},otherAffectedAddresses:i}},cr=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),pr=(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}),lr=(t,e)=>t.type==="TOKEN"?pr(t,e):t.type==="SOL"||t.type==="ETH"?cr(t):null;var fr="DUMMY_API_KEY",ot=async({proxyApiUrl:t,params:e,dAppUrl:r})=>{let n=new mr__default.default({baseURL:t+"/proxy/blockaid/",apiKey:fr});try{return await n.solana.message.scan({chain:e.chain,options:["simulation","validation"],encoding:"base64",metadata:{url:r},transactions:[e.transactionBase64],account_address:base.base64.encode(base.base58.decode(e.account))})}catch(o){return console.error("solana.message.scan() error",o),null}};var Z=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,o=await ot(t),{simulation:a,validation:i}=o?.result??{},s={title:"Transaction Details",items:[z("Raw Data",t.params.transactionBase64)]},c=[s],p=!1,m,l;if(!i||i.result_type==="Warning"?l=de[vmModuleTypes.AlertType.WARNING]:i.result_type==="Malicious"?l=de[vmModuleTypes.AlertType.DANGER]:o?.error_details&&(l=Xe(o.error_details)),a){let{balanceChange:d,otherAffectedAddresses:u}=nt(n.account,a,e);m=d,u.length>0?(s.items.push(k(u.length===1?"From":"Account",n.account)),s.items.push(u.length===1?k("To",u[0]):Ae("Interacting with",u))):s.items.push(k("Account",n.account)),p=!0;}else {let{balanceChange:d,details:u}=await tt(n.transactionBase64,n.account,e,r);m=d,c.push(...u);}return {isSimulationSuccessful:p,details:c,alert:l,balanceChange:m}};var yr=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()}),gr=zod.z.tuple([yr]),st=t=>gr.safeParse(t);var ct=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,success:i,error:s}=st(o);if(!i)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[{account:c,serializedTx:p,sendOptions:m}]=a,l=R({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:u,alert:h,balanceChange:g}=await Z({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:M(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:l}),y={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:h,balanceChange:g,networkFeeSelector:!1,isSimulationSuccessful:u},P={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},S=await r.requestApproval({request:t,displayData:y,signingData:P});if("error"in S)return {error:S.error};let E;try{E=await hr(l,S,m);}catch(C){return console.error(C),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:C}})}}return {result:E}},hr=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var Sr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Pr=zod.z.tuple([Sr]),pt=t=>Pr.safeParse(t);var mt=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:a,success:i,error:s}=pt(o);if(!i)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[{account:c,serializedTx:p}]=a,m=R({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:l,isSimulationSuccessful:d,alert:u,balanceChange:h}=await Z({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:M(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:m}),g={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:l,alert:u,balanceChange:h&&Je(h)?void 0:h,networkFeeSelector:!1,isSimulationSuccessful:d},y={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},P=await r.requestApproval({request:t,displayData:g,signingData:y});return "error"in P?{error:P.error}:"signedData"in P?{result:P.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var dt=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})=>!dt(t),{message:"Cannot use signMessage() calls for signing transactions"}),Rr=zod.z.tuple([vr]),ut=t=>Rr.safeParse(t);var yt=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:o,success:a,error:i}=ut(n);if(!a)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Message signing params are invalid",data:{cause:i}})};let[{account:s,serializedMessage:c}]=o,p=new TextDecoder,m={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:[k("Account",s),pe("Message",p.decode(base.base64.decode(c))),z("Raw Message (Base-64)",c)]}],networkFeeSelector:!1},l={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE,account:s,data:c},d=await r.requestApproval({request:t,displayData:m,signingData:l});return "error"in d?{error:d.error}:"signedData"in d?{result:d.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var x,w,H,Tt=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,x,void 0);chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,H,void 0);let{proxyApiUrl:o}=Ie(r);chunkTKL4UUHE_cjs.d(this,H,n),chunkTKL4UUHE_cjs.d(this,x,o),chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.b(this,x),chunkTKL4UUHE_cjs.b(this,w),chunkTKL4UUHE_cjs.b(this,H);}async getProvider(e){return R({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return q(e)}deriveAddress(e){return Ne({...e,approvalController:chunkTKL4UUHE_cjs.b(this,w)})}getBalances(e){let r=new G({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)});return ze({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getManifest(){let e=vmModuleTypes.parseManifest(ve);return e.success?e.data:void 0}getNetworkFee(e){return Be(e,chunkTKL4UUHE_cjs.b(this,x))}getTransactionHistory(e){return Ye({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getTokens(e){return e.caipId?Me({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)}):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 mt({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return ct({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return yt({approvalController:chunkTKL4UUHE_cjs.b(this,w),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};x=new WeakMap,w=new WeakMap,H=new WeakMap;
20
+ var ae=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=F.exponential()})=>{let o=0,s=0,i;for(;s<r;){s>0&&await At(o);try{let c=await t(s);if(e(c))return c}catch(c){i=c;}o=n(s),s++;}let a=i?`Max retry exceeded. ${i}`:"Max retry exceeded.";throw new Error(a)},F=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function At(t){return new Promise(e=>setTimeout(e,t))}var ie=t=>ae({operation:e=>t(e>0),maxRetries:2,backoffPolicy:F.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ke(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ce(t){let e,r=0;for(e=0;e<t.length;e++){let n=ke(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function D(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 O=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return D([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,o=new URLSearchParams(n);return D([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var Ae=coreCoingeckoSdk.getBasicCoingeckoHttp(),_,B,V=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,_,void 0);chunkTKL4UUHE_cjs.c(this,B,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,B,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${ce(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,_)?.get?.(s),n)return n;try{n=await ie(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-${`${ce(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.b(this,_)?.get?.(i),o)return o;try{o=await ie(a=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:a}));}catch(a){console.error(a),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 O(chunkTKL4UUHE_cjs.b(this,B)).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(Ae,{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:a=!1,shouldThrow:c=!0}){if(a){let p=await new O(chunkTKL4UUHE_cjs.b(this,B)).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(p,r)}return coreCoingeckoSdk.simplePrice(Ae,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:s,lastUpdated:i,shouldThrow:c})}};_=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var pe=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var k=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),ve=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var z=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});process.env.GLACIER_API_KEY;var Ie={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 Et={proxyApiUrl:"https://proxy-api.avax.network"},Ct={proxyApiUrl:"https://proxy-api-dev.avax.network"},De=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Et;case vmModuleTypes.Environment.DEV:return Ct}};var Ne=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var W=({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 we=async t=>{let{approvalController:e,secretId:r}=t,n=Ne(t)?W(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 _e="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Ee="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Ce="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",Be="/proxy/nownodes/sol",Le="https://api.devnet.solana.com";var R=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?Le:e+Be});var me=1e6,I={high:150*me,medium:75*me,low:2*me},Gt=t=>(t.length===0?[I.low,I.low]:t.length===1?[t[0],I.low]:t).slice().sort((r,n)=>r-n);async function Me(t,e){let o=await(await R({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(o.length===0||o.every(h=>h.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(I.high),maxPriorityFeePerGas:BigInt(I.high)},medium:{maxFeePerGas:BigInt(I.medium),maxPriorityFeePerGas:BigInt(I.medium)},low:{maxFeePerGas:BigInt(I.low),maxPriorityFeePerGas:BigInt(I.low)},baseFee:BigInt(I.low),displayDecimals:9,isFixedFee:!1};let i=Gt(o.map(h=>Number(h.prioritizationFee))),a=i.at(0),c=i.at(-1),p=Math.floor(i.length/2),m=i.length%2===1?i[p]:(i[p-1]+i[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(m*1.05)),u=BigInt(Math.ceil(a*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()}),Ue=zod.z.array(zt);async function Fe({caip2Id:t,proxyApiUrl:e}){try{return (await D([`${e}/solana-tokens?caip2Id=${t}`],Ue)).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 L=t=>t.status==="fulfilled";var Oe=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 H,X,Ge,Y=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,X);chunkTKL4UUHE_cjs.c(this,H,void 0);chunkTKL4UUHE_cjs.d(this,H,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,X,Ge).call(this,`/account/${r}/${e}/portfolio`),o=await D([n],Oe);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}`}}}};H=new WeakMap,X=new WeakSet,Ge=function(e){return `${chunkTKL4UUHE_cjs.b(this,H)}${e}`};var M=t=>{switch(t.caipId){case _e:return "mainnet";case Ee:return "devnet";case Ce:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var $e=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:o})=>{let s=new Y({proxyApiUrl:e}),i=n.pricingProviders?.coingecko.nativeTokenId??"",a=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=M(n),m=await Promise.all(t.map(g=>s.getPortfolio({address:g,network:p}))),l=new Set(m.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:y})=>y):[])),d=await Promise.allSettled([i?await o.getSimplePrice({coinIds:[i],currencies:[c]}):Promise.resolve(void 0),a?await o.getPricesByAddresses(Array.from(l),a,c):Promise.resolve(void 0)]),[u,h]=d.map(g=>L(g)?g.value:void 0);return m.reduce((g,y)=>{if("error"in y)return {...g,[y.address]:{error:y.error}};let S=new coreUtilsSdk.TokenUnit(y.portfolio.nativeBalance.lamports,9,"SOL"),P=He(i,c,u),E=P.priceInCurrency!==void 0?S.mul(P.priceInCurrency):void 0,C={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:S.toSubUnit(),balanceDisplayValue:S.toString(),balanceInCurrency:E?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:E?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:i,...P},q=y.portfolio.tokens.reduce((te,{amountRaw:re,symbol:ge,decimals:Te,mint:ne,name:St,logo:kt})=>{let oe=new coreUtilsSdk.TokenUnit(re,Te,ge),se=He(ne,c,h),he=se.priceInCurrency!==void 0?oe.mul(se.priceInCurrency):void 0,xt={type:vmModuleTypes.TokenType.SPL,address:ne,name:St,symbol:ge,decimals:Te,balance:oe.toSubUnit(),balanceDisplayValue:oe.toString(),balanceInCurrency:he?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:he?.toDisplay({fixedDp:2}),logoUri:kt??void 0,reputation:null,...se};return {...te,[ne]:xt}},{});return {...g,[y.address]:{[n.networkToken.symbol]:C,...q}}},{})},He=(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 de=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),We=(t,e,r,n)=>{let o=r.preTokenBalances.reduce((a,{owner:c,mint:p,amount:m})=>({...a,[`${c}-${p}`]:m}),{}),s=r.postTokenBalances.reduce((a,{owner:c,mint:p,amount:m,decimals:l})=>{let d=`${c}-${p}`,u=o[d]??0n,h=m-u;if(h<=0n)return a;let g=Object.keys(o).find(P=>{let[E,C]=P.split("-"),q=r.postTokenBalances.find(({owner:te,mint:re})=>te===E&&re===p);return C===p&&q&&o[P]>q.amount});if(!g)return a;let y=n.tokens?.filter(P=>"contractType"in P).find(P=>P.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},S={...y,type:y.contractType,from:{...y,address:g.split("-")[0]},to:{...y,address:c},amount:new coreUtilsSdk.TokenUnit(h,l,"").toDisplay()};return [...a,S]},[]),i=$t(t,e,r,n);return i&&s.push(i),s},$t=(t,e,{paidFee:r,preBalances:n,postBalances:o},s)=>{let i=t[e],a=n[e],c=o[e],p=c!==a?c-a+r:0,m=o.map((g,y)=>g-n[y]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),s.networkToken.decimals,""),u=m.reduce(({index:g,change:y},S,P)=>S>y?{index:P,change:S}:{index:g,change:y},{index:0,change:m[0]}),h=l?0:u.index;return {amount:d.toDisplay(),from:{address:l?t[h]:i},to:{address:l?i:t[h]},name:s.networkToken.name,symbol:s.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function Ke(t){return e=>!!e[t]}var Ye=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=R({isTestnet:t,proxyApiUrl:r}),s=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(a=>a.signature);return (await Promise.allSettled(s.map(async a=>({txHash:a.toString(),tx:await n.getTransaction(a,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(L).map(a=>a.value).filter(Ke("tx"))};var Xe=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function Je({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await Ye({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:s,tx:i})=>{if(!i.meta)return null;let{meta:a,transaction:{message:c}}=i,p=c.accountKeys.map(u=>u.toString()),m=p.indexOf(e),l=m<c.header.numRequiredSignatures,d=We(p,m,{paidFee:l?Number(a.fee):0,preBalances:a.preBalances.map(Number),postBalances:a.postBalances.map(Number),preTokenBalances:(a.preTokenBalances??[]).map(de),postTokenBalances:(a.postTokenBalances??[]).map(de)},t);return {hash:s,txType:Wt(d,e),gasUsed:String(i.meta.computeUnitsConsumed??"0"),tokens:d,from:d[0]?.from?.address??p[0],to:d[0]?.to?.address??(l?"":e),isOutgoing:l,isIncoming:!l,isSender:l,timestamp:Number(i.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(i.meta.fee)/Number(i.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:Xe(s,t.explorerUrl)}}).filter(s=>s!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var Wt=(t,e)=>t.every(s=>s.from?.address===e)?vmModuleTypes.TransactionType.SEND:t.every(s=>s.to?.address===e)?vmModuleTypes.TransactionType.RECEIVE:t.some(s=>s.from?.address===e)&&t.some(s=>s.to?.address===e)?vmModuleTypes.TransactionType.SWAP:vmModuleTypes.TransactionType.UNKNOWN;var Ze=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."}}},ue={[vmModuleTypes.AlertType.WARNING]:{type:vmModuleTypes.AlertType.WARNING,details:{title:"Suspicious Transaction",description:"Use caution, this transaction may be malicious."}},[vmModuleTypes.AlertType.DANGER]:{type:vmModuleTypes.AlertType.DANGER,details:{title:"Scam Transaction",description:"This transaction is malicious, do not proceed.",actionTitles:{reject:"Reject Transaction",proceed:"Proceed Anyway"}}}};function Qe(t){return t.ins.length===0&&t.outs.length===0}function et(t){return t!=null}var tt=(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)}),c=s.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[k("From",s.source.address),k("To",s.destination.address)]}}catch{return null}};var cr=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}},rt=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:a,data:c}=i({...e,data:Uint8Array.from(e.data)}),p=await cr(t,a.source.address);if(!p)return null;let m=o.find(h=>h.address.toLowerCase()===p.toLowerCase());if(!m)return null;let d=(a.source.address===n||a.authority.address===n)===!0?"outs":"ins",u="decimals"in c?c.decimals:m.decimals;return r[d].push({token:m,items:[{displayValue:new coreUtilsSdk.TokenUnit(c.amount,u,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${m.symbol}`,items:[k("From",a.source.address),k("To",a.destination.address)]}}catch{return null}};var nt=async(t,e,r,n)=>{let o=await coreWalletsSdk.deserializeTransactionMessage(t,n),s={ins:[],outs:[]},i=await Promise.allSettled(o.instructions.map(async a=>tt(a,s,e,r.networkToken)??await rt(n,a,s,e,r.tokens)??null)).then(a=>a.filter(L).map(c=>c.value).filter(et));return {balanceChange:s,details:i}};var st=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],o={},s={},i=Object.keys(e.assets_diff??{}).filter(a=>a!==t);return n.forEach(({asset:a,in:c,out:p})=>{let m=dr(a,r);if(!m)return;let l="address"in m?m.address:m.symbol;c&&(o[l]||(o[l]={token:m,items:[]}),o[l].items.push({displayValue:String(c.value),usdPrice:typeof c.usd_price=="number"?String(c.usd_price):void 0})),p&&(s[l]||(s[l]={token:m,items:[]}),s[l].items.push({displayValue:String(p.value),usdPrice:typeof p.usd_price=="number"?String(p.usd_price):void 0}));}),{balanceChange:{ins:Object.values(o),outs:Object.values(s)},otherAffectedAddresses:i}},lr=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),mr=(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}),dr=(t,e)=>t.type==="TOKEN"?mr(t,e):t.type==="SOL"||t.type==="ETH"?lr(t):null;var gr="DUMMY_API_KEY",at=async({proxyApiUrl:t,params:e,dAppUrl:r})=>{let n=new ur__default.default({baseURL:t+"/proxy/blockaid/",apiKey:gr});try{return await n.solana.message.scan({chain:e.chain,options:["simulation","validation"],encoding:"base64",metadata:{url:r},transactions:[e.transactionBase64],account_address:base.base64.encode(base.base58.decode(e.account))})}catch(o){return console.error("solana.message.scan() error",o),null}};var Z=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,o=await at(t),{simulation:s,validation:i}=o?.result??{},a={title:"Transaction Details",items:[z("Raw Data",t.params.transactionBase64)]},c=[a],p=!1,m,l;if(!i||i.result_type==="Warning"?l=ue[vmModuleTypes.AlertType.WARNING]:i.result_type==="Malicious"?l=ue[vmModuleTypes.AlertType.DANGER]:o?.error_details&&(l=Ze(o.error_details)),s){let{balanceChange:d,otherAffectedAddresses:u}=st(n.account,s,e);m=d,u.length>0?(a.items.push(k(u.length===1?"From":"Account",n.account)),a.items.push(u.length===1?k("To",u[0]):ve("Interacting with",u))):a.items.push(k("Account",n.account)),p=!0;}else {let{balanceChange:d,details:u}=await nt(n.transactionBase64,n.account,e,r);m=d,c.push(...u);}return {isSimulationSuccessful:p,details:c,alert:l,balanceChange:m}};var Tr=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()}),hr=zod.z.tuple([Tr]),ct=t=>hr.safeParse(t);var lt=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:s,success:i,error:a}=ct(o);if(!i)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a}})};let[{account:c,serializedTx:p,sendOptions:m}]=s,l=R({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:u,alert:h,balanceChange:g}=await Z({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:M(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:l}),y={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:h,balanceChange:g,networkFeeSelector:!1,isSimulationSuccessful:u},S={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},P=await r.requestApproval({request:t,displayData:y,signingData:S});if("error"in P)return {error:P.error};let E;try{E=await Sr(l,P,m);}catch(C){return console.error(C),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:C}})}}return {result:E}},Sr=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var kr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),xr=zod.z.tuple([kr]),mt=t=>xr.safeParse(t);var ut=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:s,success:i,error:a}=mt(o);if(!i)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:a}})};let[{account:c,serializedTx:p}]=s,m=R({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:l,isSimulationSuccessful:d,alert:u,balanceChange:h}=await Z({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:M(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:m}),g={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:l,alert:u,balanceChange:h&&Qe(h)?void 0:h,networkFeeSelector:!1,isSimulationSuccessful:d},y={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},S=await r.requestApproval({request:t,displayData:g,signingData:y});return "error"in S?{error:S.error}:"signedData"in S?{result:S.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var ft=t=>{try{let e=base.base64.decode(t);return kit.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}};var Ir=zod.z.object({account:zod.z.string(),serializedMessage:zod.z.string().base64()}).refine(({serializedMessage:t})=>!ft(t),{message:"Cannot use signMessage() calls for signing transactions"}),br=zod.z.tuple([Ir]),yt=t=>br.safeParse(t);var Tt=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:o,success:s,error:i}=yt(n);if(!s)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Message signing params are invalid",data:{cause:i}})};let[{account:a,serializedMessage:c}]=o,p=new TextDecoder,m={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:[k("Account",a),pe("Message",p.decode(base.base64.decode(c))),z("Raw Message (Base-64)",c)]}],networkFeeSelector:!1},l={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE,account:a,data:c},d=await r.requestApproval({request:t,displayData:m,signingData:l});return "error"in d?{error:d.error}:"signedData"in d?{result:d.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var x,w,$,Pt=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,x,void 0);chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,$,void 0);let{proxyApiUrl:o}=De(r);chunkTKL4UUHE_cjs.d(this,$,n),chunkTKL4UUHE_cjs.d(this,x,o),chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.b(this,x),chunkTKL4UUHE_cjs.b(this,w),chunkTKL4UUHE_cjs.b(this,$);}async getProvider(e){return R({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return W(e)}deriveAddress(e){return we({...e,approvalController:chunkTKL4UUHE_cjs.b(this,w)})}getBalances(e){let r=new V({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)});return $e({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getManifest(){let e=vmModuleTypes.parseManifest(Ie);return e.success?e.data:void 0}getNetworkFee(e){return Me(e,chunkTKL4UUHE_cjs.b(this,x))}getTransactionHistory(e){return Je({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)})}getTokens(e){return e.caipId?Fe({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x)}):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 ut({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return lt({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,x),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return Tt({approvalController:chunkTKL4UUHE_cjs.b(this,w),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};x=new WeakMap,w=new WeakMap,$=new WeakMap;
21
21
 
22
- exports.SvmModule = Tt;
22
+ exports.SvmModule = Pt;
23
23
  //# sourceMappingURL=out.js.map
24
24
  //# sourceMappingURL=index.cjs.map