@avalabs/svm-module 1.7.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -17,7 +17,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
17
17
|
|
|
18
18
|
var cr__default = /*#__PURE__*/_interopDefault(cr);
|
|
19
19
|
|
|
20
|
-
var ae=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=U.exponential()})=>{let o=0,i=0,a;for(;i<r;){i>0&&await Pt(o);try{let c=await t(i);if(e(c))return c}catch(c){a=c;}o=n(i),i++;}let s=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(s)},U=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Pt(t){return new Promise(e=>setTimeout(e,t))}var se=t=>ae({operation:e=>t(e>0),maxRetries:2,backoffPolicy:U.constant(1),isSuccess:e=>e?.status?.error_code!==429});function he(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ie(t){let e,r=0;for(e=0;e<t.length;e++){let n=he(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 F=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,o=new URLSearchParams(n);return b([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var Se=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 i=e[o];n[o]={},r.forEach(a=>{n[o]={[a]:{price:i?.[a],change24:i?.[`${a}_24h_change`],vol24:i?.[`${a}_24h_vol`],marketCap:i?.[`${a}_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,i=`getSimplePrice-${e?`${ie(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,_)?.get?.(i),n)return n;try{n=await se(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,_)?.set?.(i,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,a=`getPricesWithMarketDataByAddresses-${`${ie(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.b(this,_)?.get?.(a),o)return o;try{o=await se(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?.(a,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let i=await new F(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(i,[n])}return coreCoingeckoSdk.simpleTokenPrice(Se,{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:i=!1,lastUpdated:a=!1,useCoingeckoProxy:s=!1,shouldThrow:c=!0}){if(s){let p=await new F(chunkTKL4UUHE_cjs.b(this,B)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:i,include_last_updated_at:a});return this.transformSimplePriceResponse(p,r)}return coreCoingeckoSdk.simplePrice(Se,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:i,lastUpdated:a,shouldThrow:c})}};_=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var ce=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var S=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),ke=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var G=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var xe={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 bt={proxyApiUrl:"https://proxy-api.avax.network"},Nt={proxyApiUrl:"https://proxy-api-dev.avax.network"},ve=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return bt;case vmModuleTypes.Environment.DEV:return Nt}};var Ie=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 Re=async t=>{let{approvalController:e,secretId:r}=t,n=Ie(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 De="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",be="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Ne="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",we="/proxy/nownodes/sol",_e="https://api.devnet.solana.com";var I=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?_e:e+we});var pe=1e6,R={high:150*pe,medium:75*pe,low:2*pe},Lt=t=>(t.length===0?[R.low,R.low]:t.length===1?[t[0],R.low]:t).slice().sort((r,n)=>r-n);async function Ce(t,e){let o=await(await I({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(o.length===0||o.every(T=>T.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(R.high),maxPriorityFeePerGas:BigInt(R.high)},medium:{maxFeePerGas:BigInt(R.medium),maxPriorityFeePerGas:BigInt(R.medium)},low:{maxFeePerGas:BigInt(R.low),maxPriorityFeePerGas:BigInt(R.low)},baseFee:BigInt(R.low),displayDecimals:9,isFixedFee:!1};let a=Lt(o.map(T=>Number(T.prioritizationFee))),s=a.at(0),c=a.at(-1),p=Math.floor(a.length/2),m=a.length%2===1?a[p]:(a[p-1]+a[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(m*1.05)),f=BigInt(Math.ceil(s*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:f,maxPriorityFeePerGas:f},baseFee:f,displayDecimals:9,isFixedFee:!1}}var Ft=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()}),Ee=zod.z.array(Ft);async function Be({caip2Id:t,proxyApiUrl:e}){try{return (await b([`${e}/solana-tokens?caip2Id=${t}`],Ee)).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 M=t=>t.status==="fulfilled";var Me=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 z,Y,Le,K=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,Y);chunkTKL4UUHE_cjs.c(this,z,void 0);chunkTKL4UUHE_cjs.d(this,z,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,Y,Le).call(this,`/account/${r}/${e}/portfolio`),o=await b([n],Me);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}`}}}};z=new WeakMap,Y=new WeakSet,Le=function(e){return `${chunkTKL4UUHE_cjs.b(this,z)}${e}`};var L=t=>{switch(t.caipId){case De:return "mainnet";case be:return "devnet";case Ne:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var Ve=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:o})=>{let i=new K({proxyApiUrl:e}),a=n.pricingProviders?.coingecko.nativeTokenId??"",s=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=L(n),m=await Promise.all(t.map(g=>i.getPortfolio({address:g,network:p}))),l=new Set(m.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:h})=>h):[])),d=await Promise.allSettled([a?await o.getSimplePrice({coinIds:[a],currencies:[c]}):Promise.resolve(void 0),s?await o.getPricesByAddresses(Array.from(l),s,c):Promise.resolve(void 0)]),[f,T]=d.map(g=>M(g)?g.value:void 0);return m.reduce((g,h)=>{if("error"in h)return {...g,[h.address]:{error:h.error}};let x=new coreUtilsSdk.TokenUnit(h.portfolio.nativeBalance.lamports,9,"SOL"),P=Oe(a,c,f),C=P.priceInCurrency!==void 0?x.mul(P.priceInCurrency):void 0,E={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:x.toSubUnit(),balanceDisplayValue:x.toString(),balanceInCurrency:C?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:C?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:a,...P},H=h.portfolio.tokens.reduce((ee,{amountRaw:te,symbol:ue,decimals:fe,mint:re,name:gt,logo:Tt})=>{let ne=new coreUtilsSdk.TokenUnit(te,fe,ue),oe=Oe(re,c,T),ye=oe.priceInCurrency!==void 0?ne.mul(oe.priceInCurrency):void 0,ht={type:vmModuleTypes.TokenType.SPL,address:re,name:gt,symbol:ue,decimals:fe,balance:ne.toSubUnit(),balanceDisplayValue:ne.toString(),balanceInCurrency:ye?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ye?.toDisplay({fixedDp:2}),logoUri:Tt??void 0,reputation:null,...oe};return {...ee,[re]:ht}},{});return {...g,[h.address]:{[n.networkToken.symbol]:E,...H}}},{})},Oe=(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 le=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),$e=(t,e,r,n)=>{let o=r.preTokenBalances.reduce((s,{owner:c,mint:p,amount:m})=>({...s,[`${c}-${p}`]:m}),{}),i=r.postTokenBalances.reduce((s,{owner:c,mint:p,amount:m,decimals:l})=>{let d=`${c}-${p}`,f=o[d]??0n,T=m-f;if(T<=0n)return s;let g=Object.keys(o).find(P=>{let[C,E]=P.split("-"),H=r.postTokenBalances.find(({owner:ee,mint:te})=>ee===C&&te===p);return E===p&&H&&o[P]>H.amount});if(!g)return s;let h=n.tokens?.filter(P=>"contractType"in P).find(P=>P.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},x={...h,type:h.contractType,from:{...h,address:g.split("-")[0]},to:{...h,address:c},amount:new coreUtilsSdk.TokenUnit(T,l,"").toDisplay()};return [...s,x]},[]),a=Vt(t,e,r,n);return a&&i.push(a),i},Vt=(t,e,{paidFee:r,preBalances:n,postBalances:o},i)=>{let a=t[e],s=n[e],c=o[e],p=c!==s?c-s+r:0,m=o.map((T,g)=>T-n[g]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),i.networkToken.decimals,""),f=l?0:Math.max(0,m.findIndex(T=>T===-p));return {amount:d.toDisplay(),from:{address:l?t[f]:a},to:{address:l?a:t[f]},name:i.networkToken.name,symbol:i.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function He(t){return e=>!!e[t]}var je=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=I({isTestnet:t,proxyApiUrl:r}),i=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(s=>s.signature);return (await Promise.allSettled(i.map(async s=>({txHash:s.toString(),tx:await n.getTransaction(s,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(M).map(s=>s.value).filter(He("tx"))};var qe=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function Ke({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await je({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:i,tx:a})=>{if(!a.meta)return null;let{meta:s,transaction:{message:c}}=a,p=c.accountKeys.map(f=>f.toString()),m=p.indexOf(e),l=m<c.header.numRequiredSignatures,d=$e(p,m,{paidFee:l?Number(s.fee):0,preBalances:s.preBalances.map(Number),postBalances:s.postBalances.map(Number),preTokenBalances:(s.preTokenBalances??[]).map(le),postTokenBalances:(s.postTokenBalances??[]).map(le)},t);return {hash:i,txType:l?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,gasUsed:String(a.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(a.blockTime),isContractCall:!1,gasPrice:String(Number(a.meta.fee)/Number(a.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:qe(i,t.explorerUrl)}}).filter(i=>i!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var me={[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 Ye(t){return t.ins.length===0&&t.outs.length===0}function Xe(t){return t!=null}var Je=(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:i,data:a}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),c=i.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(a.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[S("From",i.source.address),S("To",i.destination.address)]}}catch{return null}};var nr=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}},Ze=async(t,e,r,n,o)=>{if(!o?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e))return null;try{if(token.identifyTokenInstruction(e)!==token.TokenInstruction.Transfer)return null;let{accounts:a,data:s}=token.parseTransferInstruction({...e,data:Uint8Array.from(e.data)}),c=await nr(t,a.source.address);if(!c)return null;let p=o.find(d=>d.address.toLowerCase()===c.toLowerCase());if(!p)return null;let l=(a.source.address===n||a.authority.address===n)===!0?"outs":"ins";return r[l].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(s.amount,p.decimals,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[S("From",a.source.address),S("To",a.destination.address)]}}catch{return null}};var Qe=async(t,e,r,n)=>{let o=await coreWalletsSdk.deserializeTransactionMessage(t,n),i={ins:[],outs:[]},a=await Promise.allSettled(o.instructions.map(async s=>Je(s,i,e,r.networkToken)??await Ze(n,s,i,e,r.tokens)??null)).then(s=>s.filter(M).map(c=>c.value).filter(Xe));return {balanceChange:i,details:a}};var tt=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],o={},i={},a=Object.keys(e.assets_diff??{}).filter(s=>s!==t);return n.forEach(({asset:s,in:c,out:p})=>{let m=ir(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&&(i[l]||(i[l]={token:m,items:[]}),i[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(i)},otherAffectedAddresses:a}},ar=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),sr=(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}),ir=(t,e)=>t.type==="TOKEN"?sr(t,e):t.type==="SOL"||t.type==="ETH"?ar(t):null;var mr="DUMMY_API_KEY",rt=async({proxyApiUrl:t,params:e,dAppUrl:r})=>{let n=new cr__default.default({baseURL:t+"/proxy/blockaid/",apiKey:mr});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 J=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,o=await rt(t),{simulation:i,validation:a}=o?.result??{},s={title:"Transaction Details",items:[G("Raw Data",t.params.transactionBase64)]},c=[s],p=!1,m,l;if(!a||a.result_type==="Warning"?l=me[vmModuleTypes.AlertType.WARNING]:a.result_type==="Malicious"&&(l=me[vmModuleTypes.AlertType.DANGER]),i){let{balanceChange:d,otherAffectedAddresses:f}=tt(n.account,i,e);m=d,f.length>0?(s.items.push(S(f.length===1?"From":"Account",n.account)),s.items.push(f.length===1?S("To",f[0]):ke("Interacting with",f))):s.items.push(S("Account",n.account)),p=!0;}else {let{balanceChange:d,details:f}=await Qe(n.transactionBase64,n.account,e,r);m=d,c.push(...f);}return {isSimulationSuccessful:p,details:c,alert:l,balanceChange:m}};var dr=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()}),ur=zod.z.tuple([dr]),ot=t=>ur.safeParse(t);var st=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:i,success:a,error:s}=ot(o);if(!a)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}]=i,l=I({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:f,alert:T,balanceChange:g}=await J({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:L(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:l}),h={title:"Approve Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:T,balanceChange:g,networkFeeSelector:!1,isSimulationSuccessful:f},x={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},P=await r.requestApproval({request:t,displayData:h,signingData:x});if("error"in P)return {error:P.error};let C;try{C=await yr(l,P,m);}catch(E){return console.error(E),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return {result:C}},yr=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var gr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Tr=zod.z.tuple([gr]),it=t=>Tr.safeParse(t);var pt=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:i,success:a,error:s}=it(o);if(!a)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[{account:c,serializedTx:p}]=i,m=I({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:l,isSimulationSuccessful:d,alert:f,balanceChange:T}=await J({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:L(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:m}),g={title:"Sign Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:l,alert:f,balanceChange:T&&Ye(T)?void 0:T,networkFeeSelector:!1,isSimulationSuccessful:d},h={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},x=await r.requestApproval({request:t,displayData:g,signingData:h});return "error"in x?{error:x.error}:"signedData"in x?{result:x.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var lt=t=>{try{let e=base.base64.decode(t);return kit.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}};var kr=zod.z.object({account:zod.z.string(),serializedMessage:zod.z.string().base64()}).refine(({serializedMessage:t})=>!lt(t),{message:"Cannot use signMessage() calls for signing transactions"}),xr=zod.z.tuple([kr]),mt=t=>xr.safeParse(t);var ut=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:o,success:i,error:a}=mt(n);if(!i)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams({message:"Message signing params are invalid",data:{cause:a}})};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} wants you to sign the following message`,logoUri:t.dappInfo.icon},disclaimer:"Only confirm if you trust this website",details:[{title:"Message Details",items:[S("Account",s),ce("Message",p.decode(base.base64.decode(c))),G("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 k,w,$,yt=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,k,void 0);chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,$,void 0);let{proxyApiUrl:o}=ve(r);chunkTKL4UUHE_cjs.d(this,$,n),chunkTKL4UUHE_cjs.d(this,k,o),chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.b(this,k),chunkTKL4UUHE_cjs.b(this,w),chunkTKL4UUHE_cjs.b(this,$);}async getProvider(e){return I({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return q(e)}deriveAddress(e){return Re({...e,approvalController:chunkTKL4UUHE_cjs.b(this,w)})}getBalances(e){let r=new V({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)});return Ve({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getManifest(){let e=vmModuleTypes.parseManifest(xe);return e.success?e.data:void 0}getNetworkFee(e){return Ce(e,chunkTKL4UUHE_cjs.b(this,k))}getTransactionHistory(e){return Ke({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getTokens(e){return e.caipId?Be({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)}):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 pt({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return st({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return ut({approvalController:chunkTKL4UUHE_cjs.b(this,w),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};k=new WeakMap,w=new WeakMap,$=new WeakMap;
|
|
20
|
+
var ae=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=U.exponential()})=>{let o=0,i=0,a;for(;i<r;){i>0&&await Pt(o);try{let c=await t(i);if(e(c))return c}catch(c){a=c;}o=n(i),i++;}let s=a?`Max retry exceeded. ${a}`:"Max retry exceeded.";throw new Error(s)},U=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function Pt(t){return new Promise(e=>setTimeout(e,t))}var se=t=>ae({operation:e=>t(e>0),maxRetries:2,backoffPolicy:U.constant(1),isSuccess:e=>e?.status?.error_code!==429});function he(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ie(t){let e,r=0;for(e=0;e<t.length;e++){let n=he(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 F=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,o=new URLSearchParams(n);return b([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${o}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var Se=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 i=e[o];n[o]={},r.forEach(a=>{n[o]={[a]:{price:i?.[a],change24:i?.[`${a}_24h_change`],vol24:i?.[`${a}_24h_vol`],marketCap:i?.[`${a}_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,i=`getSimplePrice-${e?`${ie(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,_)?.get?.(i),n)return n;try{n=await se(a=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:a}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,_)?.set?.(i,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let o,a=`getPricesWithMarketDataByAddresses-${`${ie(e)}-${r}-${n}`}`;if(o=chunkTKL4UUHE_cjs.b(this,_)?.get?.(a),o)return o;try{o=await se(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?.(a,o),o}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:o=!1}){if(o){let i=await new F(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(i,[n])}return coreCoingeckoSdk.simpleTokenPrice(Se,{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:i=!1,lastUpdated:a=!1,useCoingeckoProxy:s=!1,shouldThrow:c=!0}){if(s){let p=await new F(chunkTKL4UUHE_cjs.b(this,B)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:o,include_24hr_change:i,include_last_updated_at:a});return this.transformSimplePriceResponse(p,r)}return coreCoingeckoSdk.simplePrice(Se,{coinIds:e,currencies:r,marketCap:n,vol24:o,change24:i,lastUpdated:a,shouldThrow:c})}};_=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var ce=(t,e,r="horizontal")=>({label:t,alignment:r,type:vmModuleTypes.DetailItemType.TEXT,value:e});var S=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e}),ke=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS_LIST,value:e});var G=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var xe={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 bt={proxyApiUrl:"https://proxy-api.avax.network"},Nt={proxyApiUrl:"https://proxy-api-dev.avax.network"},ve=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return bt;case vmModuleTypes.Environment.DEV:return Nt}};var Ie=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 Re=async t=>{let{approvalController:e,secretId:r}=t,n=Ie(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 De="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",be="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Ne="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",we="/proxy/nownodes/sol",_e="https://api.devnet.solana.com";var I=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?_e:e+we});var pe=1e6,R={high:150*pe,medium:75*pe,low:2*pe},Lt=t=>(t.length===0?[R.low,R.low]:t.length===1?[t[0],R.low]:t).slice().sort((r,n)=>r-n);async function Ce(t,e){let o=await(await I({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(o.length===0||o.every(T=>T.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(R.high),maxPriorityFeePerGas:BigInt(R.high)},medium:{maxFeePerGas:BigInt(R.medium),maxPriorityFeePerGas:BigInt(R.medium)},low:{maxFeePerGas:BigInt(R.low),maxPriorityFeePerGas:BigInt(R.low)},baseFee:BigInt(R.low),displayDecimals:9,isFixedFee:!1};let a=Lt(o.map(T=>Number(T.prioritizationFee))),s=a.at(0),c=a.at(-1),p=Math.floor(a.length/2),m=a.length%2===1?a[p]:(a[p-1]+a[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(m*1.05)),f=BigInt(Math.ceil(s*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:f,maxPriorityFeePerGas:f},baseFee:f,displayDecimals:9,isFixedFee:!1}}var Ft=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()}),Ee=zod.z.array(Ft);async function Be({caip2Id:t,proxyApiUrl:e}){try{return (await b([`${e}/solana-tokens?caip2Id=${t}`],Ee)).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 M=t=>t.status==="fulfilled";var Me=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 z,Y,Le,K=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,Y);chunkTKL4UUHE_cjs.c(this,z,void 0);chunkTKL4UUHE_cjs.d(this,z,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,Y,Le).call(this,`/account/${r}/${e}/portfolio`),o=await b([n],Me);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}`}}}};z=new WeakMap,Y=new WeakSet,Le=function(e){return `${chunkTKL4UUHE_cjs.b(this,z)}${e}`};var L=t=>{switch(t.caipId){case De:return "mainnet";case be:return "devnet";case Ne:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var Ve=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:o})=>{let i=new K({proxyApiUrl:e}),a=n.pricingProviders?.coingecko.nativeTokenId??"",s=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=L(n),m=await Promise.all(t.map(g=>i.getPortfolio({address:g,network:p}))),l=new Set(m.flatMap(g=>"portfolio"in g?g.portfolio.tokens.map(({mint:h})=>h):[])),d=await Promise.allSettled([a?await o.getSimplePrice({coinIds:[a],currencies:[c]}):Promise.resolve(void 0),s?await o.getPricesByAddresses(Array.from(l),s,c):Promise.resolve(void 0)]),[f,T]=d.map(g=>M(g)?g.value:void 0);return m.reduce((g,h)=>{if("error"in h)return {...g,[h.address]:{error:h.error}};let x=new coreUtilsSdk.TokenUnit(h.portfolio.nativeBalance.lamports,9,"SOL"),P=Oe(a,c,f),C=P.priceInCurrency!==void 0?x.mul(P.priceInCurrency):void 0,E={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:x.toSubUnit(),balanceDisplayValue:x.toString(),balanceInCurrency:C?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:C?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:a,...P},H=h.portfolio.tokens.reduce((ee,{amountRaw:te,symbol:ue,decimals:fe,mint:re,name:gt,logo:Tt})=>{let ne=new coreUtilsSdk.TokenUnit(te,fe,ue),oe=Oe(re,c,T),ye=oe.priceInCurrency!==void 0?ne.mul(oe.priceInCurrency):void 0,ht={type:vmModuleTypes.TokenType.SPL,address:re,name:gt,symbol:ue,decimals:fe,balance:ne.toSubUnit(),balanceDisplayValue:ne.toString(),balanceInCurrency:ye?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:ye?.toDisplay({fixedDp:2}),logoUri:Tt??void 0,reputation:null,...oe};return {...ee,[re]:ht}},{});return {...g,[h.address]:{[n.networkToken.symbol]:E,...H}}},{})},Oe=(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 le=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),$e=(t,e,r,n)=>{let o=r.preTokenBalances.reduce((s,{owner:c,mint:p,amount:m})=>({...s,[`${c}-${p}`]:m}),{}),i=r.postTokenBalances.reduce((s,{owner:c,mint:p,amount:m,decimals:l})=>{let d=`${c}-${p}`,f=o[d]??0n,T=m-f;if(T<=0n)return s;let g=Object.keys(o).find(P=>{let[C,E]=P.split("-"),H=r.postTokenBalances.find(({owner:ee,mint:te})=>ee===C&&te===p);return E===p&&H&&o[P]>H.amount});if(!g)return s;let h=n.tokens?.filter(P=>"contractType"in P).find(P=>P.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},x={...h,type:h.contractType,from:{...h,address:g.split("-")[0]},to:{...h,address:c},amount:new coreUtilsSdk.TokenUnit(T,l,"").toDisplay()};return [...s,x]},[]),a=Vt(t,e,r,n);return a&&i.push(a),i},Vt=(t,e,{paidFee:r,preBalances:n,postBalances:o},i)=>{let a=t[e],s=n[e],c=o[e],p=c!==s?c-s+r:0,m=o.map((T,g)=>T-n[g]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),i.networkToken.decimals,""),f=l?0:Math.max(0,m.findIndex(T=>T===-p));return {amount:d.toDisplay(),from:{address:l?t[f]:a},to:{address:l?a:t[f]},name:i.networkToken.name,symbol:i.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function He(t){return e=>!!e[t]}var je=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=I({isTestnet:t,proxyApiUrl:r}),i=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(s=>s.signature);return (await Promise.allSettled(i.map(async s=>({txHash:s.toString(),tx:await n.getTransaction(s,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(M).map(s=>s.value).filter(He("tx"))};var qe=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function Ke({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await je({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:i,tx:a})=>{if(!a.meta)return null;let{meta:s,transaction:{message:c}}=a,p=c.accountKeys.map(f=>f.toString()),m=p.indexOf(e),l=m<c.header.numRequiredSignatures,d=$e(p,m,{paidFee:l?Number(s.fee):0,preBalances:s.preBalances.map(Number),postBalances:s.postBalances.map(Number),preTokenBalances:(s.preTokenBalances??[]).map(le),postTokenBalances:(s.postTokenBalances??[]).map(le)},t);return {hash:i,txType:l?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,gasUsed:String(a.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(a.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(a.meta.fee)/Number(a.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:qe(i,t.explorerUrl)}}).filter(i=>i!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}var me={[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 Ye(t){return t.ins.length===0&&t.outs.length===0}function Xe(t){return t!=null}var Je=(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:i,data:a}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),c=i.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(a.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Transfer SOL",items:[S("From",i.source.address),S("To",i.destination.address)]}}catch{return null}};var nr=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}},Ze=async(t,e,r,n,o)=>{if(!o?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e))return null;try{if(token.identifyTokenInstruction(e)!==token.TokenInstruction.Transfer)return null;let{accounts:a,data:s}=token.parseTransferInstruction({...e,data:Uint8Array.from(e.data)}),c=await nr(t,a.source.address);if(!c)return null;let p=o.find(d=>d.address.toLowerCase()===c.toLowerCase());if(!p)return null;let l=(a.source.address===n||a.authority.address===n)===!0?"outs":"ins";return r[l].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(s.amount,p.decimals,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[S("From",a.source.address),S("To",a.destination.address)]}}catch{return null}};var Qe=async(t,e,r,n)=>{let o=await coreWalletsSdk.deserializeTransactionMessage(t,n),i={ins:[],outs:[]},a=await Promise.allSettled(o.instructions.map(async s=>Je(s,i,e,r.networkToken)??await Ze(n,s,i,e,r.tokens)??null)).then(s=>s.filter(M).map(c=>c.value).filter(Xe));return {balanceChange:i,details:a}};var tt=(t,e,r)=>{let n=e.account_summary.account_assets_diff??[],o={},i={},a=Object.keys(e.assets_diff??{}).filter(s=>s!==t);return n.forEach(({asset:s,in:c,out:p})=>{let m=ir(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&&(i[l]||(i[l]={token:m,items:[]}),i[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(i)},otherAffectedAddresses:a}},ar=t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),sr=(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}),ir=(t,e)=>t.type==="TOKEN"?sr(t,e):t.type==="SOL"||t.type==="ETH"?ar(t):null;var mr="DUMMY_API_KEY",rt=async({proxyApiUrl:t,params:e,dAppUrl:r})=>{let n=new cr__default.default({baseURL:t+"/proxy/blockaid/",apiKey:mr});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 J=async({simulationParams:t,network:e,provider:r})=>{let{params:n}=t,o=await rt(t),{simulation:i,validation:a}=o?.result??{},s={title:"Transaction Details",items:[G("Raw Data",t.params.transactionBase64)]},c=[s],p=!1,m,l;if(!a||a.result_type==="Warning"?l=me[vmModuleTypes.AlertType.WARNING]:a.result_type==="Malicious"&&(l=me[vmModuleTypes.AlertType.DANGER]),i){let{balanceChange:d,otherAffectedAddresses:f}=tt(n.account,i,e);m=d,f.length>0?(s.items.push(S(f.length===1?"From":"Account",n.account)),s.items.push(f.length===1?S("To",f[0]):ke("Interacting with",f))):s.items.push(S("Account",n.account)),p=!0;}else {let{balanceChange:d,details:f}=await Qe(n.transactionBase64,n.account,e,r);m=d,c.push(...f);}return {isSimulationSuccessful:p,details:c,alert:l,balanceChange:m}};var dr=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()}),ur=zod.z.tuple([dr]),ot=t=>ur.safeParse(t);var st=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:i,success:a,error:s}=ot(o);if(!a)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}]=i,l=I({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:d,isSimulationSuccessful:f,alert:T,balanceChange:g}=await J({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:L(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:l}),h={title:"Approve Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:d,alert:T,balanceChange:g,networkFeeSelector:!1,isSimulationSuccessful:f},x={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},P=await r.requestApproval({request:t,displayData:h,signingData:x});if("error"in P)return {error:P.error};let C;try{C=await yr(l,P,m);}catch(E){return console.error(E),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:E}})}}return {result:C}},yr=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var gr=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Tr=zod.z.tuple([gr]),it=t=>Tr.safeParse(t);var pt=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:o}=t,{data:i,success:a,error:s}=it(o);if(!a)return console.error("invalid params",s),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:s}})};let[{account:c,serializedTx:p}]=i,m=I({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:l,isSimulationSuccessful:d,alert:f,balanceChange:T}=await J({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:c,chain:L(e),transactionBase64:p},proxyApiUrl:n},network:e,provider:m}),g={title:"Sign Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:l,alert:f,balanceChange:T&&Ye(T)?void 0:T,networkFeeSelector:!1,isSimulationSuccessful:d},h={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},x=await r.requestApproval({request:t,displayData:g,signingData:h});return "error"in x?{error:x.error}:"signedData"in x?{result:x.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var lt=t=>{try{let e=base.base64.decode(t);return kit.getCompiledTransactionMessageDecoder().decode(e),!0}catch{return !1}};var kr=zod.z.object({account:zod.z.string(),serializedMessage:zod.z.string().base64()}).refine(({serializedMessage:t})=>!lt(t),{message:"Cannot use signMessage() calls for signing transactions"}),xr=zod.z.tuple([kr]),mt=t=>xr.safeParse(t);var ut=async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:o,success:i,error:a}=mt(n);if(!i)return console.error("invalid params",a),{error:rpcErrors.rpcErrors.invalidParams({message:"Message signing params are invalid",data:{cause:a}})};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} wants you to sign the following message`,logoUri:t.dappInfo.icon},disclaimer:"Only confirm if you trust this website",details:[{title:"Message Details",items:[S("Account",s),ce("Message",p.decode(base.base64.decode(c))),G("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 k,w,$,yt=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,k,void 0);chunkTKL4UUHE_cjs.c(this,w,void 0);chunkTKL4UUHE_cjs.c(this,$,void 0);let{proxyApiUrl:o}=ve(r);chunkTKL4UUHE_cjs.d(this,$,n),chunkTKL4UUHE_cjs.d(this,k,o),chunkTKL4UUHE_cjs.d(this,w,e),chunkTKL4UUHE_cjs.b(this,k),chunkTKL4UUHE_cjs.b(this,w),chunkTKL4UUHE_cjs.b(this,$);}async getProvider(e){return I({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return q(e)}deriveAddress(e){return Re({...e,approvalController:chunkTKL4UUHE_cjs.b(this,w)})}getBalances(e){let r=new V({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)});return Ve({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getManifest(){let e=vmModuleTypes.parseManifest(xe);return e.success?e.data:void 0}getNetworkFee(e){return Ce(e,chunkTKL4UUHE_cjs.b(this,k))}getTransactionHistory(e){return Ke({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getTokens(e){return e.caipId?Be({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)}):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 pt({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return st({approvalController:chunkTKL4UUHE_cjs.b(this,w),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return ut({approvalController:chunkTKL4UUHE_cjs.b(this,w),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};k=new WeakMap,w=new WeakMap,$=new WeakMap;
|
|
21
21
|
|
|
22
22
|
exports.SvmModule = yt;
|
|
23
23
|
//# sourceMappingURL=out.js.map
|