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