@avalabs/svm-module 3.8.1 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -6,19 +6,20 @@ var rpcErrors = require('@metamask/rpc-errors');
|
|
|
6
6
|
var coreCoingeckoSdk = require('@avalabs/core-coingecko-sdk');
|
|
7
7
|
var zod = require('zod');
|
|
8
8
|
var base = require('@scure/base');
|
|
9
|
+
var cryptoSdk = require('@avalabs/crypto-sdk');
|
|
9
10
|
var coreWalletsSdk = require('@avalabs/core-wallets-sdk');
|
|
10
11
|
var coreUtilsSdk = require('@avalabs/core-utils-sdk');
|
|
11
12
|
var kit = require('@solana/kit');
|
|
12
13
|
var system = require('@solana-program/system');
|
|
13
14
|
var token = require('@solana-program/token');
|
|
14
|
-
var
|
|
15
|
+
var rn = require('@blockaid/client');
|
|
15
16
|
|
|
16
17
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
18
|
|
|
18
|
-
var
|
|
19
|
+
var rn__default = /*#__PURE__*/_interopDefault(rn);
|
|
19
20
|
|
|
20
|
-
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 Re(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(Re,"arrayHash");var be=chunkVYIKXRYZ_cjs.a(async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=K.exponential()})=>{let s=0,a=0,c;for(;a<r;){a>0&&await $t(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"),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,c=2*r*(Math.pow(2,s)-1);return a+c}}};chunkVYIKXRYZ_cjs.a(Ie,"RetryBackoffPolicy");var K=Ie;function $t(t){return new Promise(e=>setTimeout(e,t))}chunkVYIKXRYZ_cjs.a($t,"delay");var we=chunkVYIKXRYZ_cjs.a(t=>be({operation:e=>t(e>0),maxRetries:2,backoffPolicy:K.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 oe=Ne;var zt=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"}}],zt)}};chunkVYIKXRYZ_cjs.a(De,"WatchlistProxyClient");var ue=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(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,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 ue(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(c=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:c}));}catch{n=void 0;}return chunkVYIKXRYZ_cjs.c(this,z)?.set?.(a,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let s,c=`getPricesWithMarketDataByAddresses-${`${Re(e)}-${r}-${n}`}`;if(s=chunkVYIKXRYZ_cjs.c(this,z)?.get?.(c),s)return s;try{s=await we(p=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:p}));}catch(p){console.error(p),s=void 0;}return chunkVYIKXRYZ_cjs.c(this,z)?.set?.(c,s),s}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:s=!1}){if(s){let a=await new oe(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:c=!1,useCoingeckoProxy:p=!1,shouldThrow:i=!0}){if(p){let d=await new oe(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(d,r)}return coreCoingeckoSdk.simplePrice(chunkVYIKXRYZ_cjs.c(this,J),{coinIds:e,currencies:r,marketCap:n,vol24:s,change24:a,lastUpdated:c,shouldThrow:i})}};z=new WeakMap,j=new WeakMap,H=new WeakMap,J=new WeakMap,chunkVYIKXRYZ_cjs.a(Ce,"TokenService");var se=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 ae=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 W=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 Zt={proxyApiUrl:"https://proxy-api.avax.network"},Qt={proxyApiUrl:"https://proxy-api-dev.avax.network"},Xe=chunkVYIKXRYZ_cjs.a(t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return Zt;case vmModuleTypes.Environment.DEV:return Qt}},"getEnv");var Je=chunkVYIKXRYZ_cjs.a(t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string","hasDerivationDetails");var ge=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)?ge(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="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",et="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",tt="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",rt="/proxy/nownodes/sol",nt="https://api.devnet.solana.com";var ot="DUMMY_API_KEY";var M=chunkVYIKXRYZ_cjs.a(({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?nt:e+rt}),"getProvider");var Le=1e6,V={high:150*Le,medium:75*Le,low:2*Le},ar=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 st(t,e){let s=await(await M({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(s.length===0||s.every(T=>T.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=ar(s.map(T=>Number(T.prioritizationFee))),p=c.at(0),i=c.at(-1),d=Math.floor(c.length/2),l=c.length%2===1?c[d]:(c[d-1]+c[d])/2,m=BigInt(Math.ceil(i*1.05)),u=BigInt(Math.ceil(l*1.05)),f=BigInt(Math.ceil(p*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(st,"getNetworkFee");var cr=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()}),at=zod.z.array(cr);async function it({caip2Id:t,proxyApiUrl:e}){try{return (await U([`${e}/solana-tokens?caip2Id=${t}`],at)).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(it,"getTokens");var ct=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 ie,ce,Te,pt,Ue=class Ue{constructor(e){chunkVYIKXRYZ_cjs.d(this,Te);chunkVYIKXRYZ_cjs.d(this,ie,void 0);chunkVYIKXRYZ_cjs.d(this,ce,void 0);chunkVYIKXRYZ_cjs.e(this,ie,`${e.proxyApiUrl}/proxy/moralis`),chunkVYIKXRYZ_cjs.e(this,ce,e.fetch??globalThis.fetch);}async getPortfolio({address:e,network:r}){try{let n=chunkVYIKXRYZ_cjs.f(this,Te,pt).call(this,`/account/${r}/${e}/portfolio`),s=await U([n],ct,chunkVYIKXRYZ_cjs.c(this,ce));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}`}}}};ie=new WeakMap,ce=new WeakMap,Te=new WeakSet,pt=chunkVYIKXRYZ_cjs.a(function(e){return `${chunkVYIKXRYZ_cjs.c(this,ie)}${e}`},"#buildUrl"),chunkVYIKXRYZ_cjs.a(Ue,"MoralisService");var Z=Ue;var q=chunkVYIKXRYZ_cjs.a(t=>{switch(t.caipId){case Qe:return "mainnet";case et:return "devnet";case tt:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}},"getNetworkName");var dt=chunkVYIKXRYZ_cjs.a(async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:s,fetch:a})=>{let c=new Z({proxyApiUrl:e,fetch:a}),p=n.pricingProviders?.coingecko.nativeTokenId??"",i=n.pricingProviders?.coingecko.assetPlatformId??"",d=r.toLowerCase(),l=q(n),m=await Promise.all(t.map(y=>c.getPortfolio({address:y,network:l}))),u=new Set(m.flatMap(y=>"portfolio"in y?y.portfolio.tokens.map(({mint:h})=>h):[])),f=await(i?s.getPricesByAddresses(Array.from(u),i,d):Promise.resolve(void 0)),T=await s.getWatchlistDataForToken({tokenDetails:{symbol:n.networkToken.symbol,isNative:!0,caip2Id:n.caipId??""},currency:d});return m.reduce((y,h)=>{if("error"in h)return {...y,[h.address]:{error:h.error}};let A=new coreUtilsSdk.TokenUnit(h.portfolio.nativeBalance.lamports,9,"SOL"),P=T.priceInCurrency!==void 0?A.mul(T.priceInCurrency):void 0,v={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:p,...T},E=h.portfolio.tokens.reduce((k,{amountRaw:b,symbol:S,decimals:x,mint:I,name:N,logo:L})=>{let O=new coreUtilsSdk.TokenUnit(b,x,S),me=lr(I,d,f),de=me.priceInCurrency!==void 0?O.mul(me.priceInCurrency):void 0,Y={type:vmModuleTypes.TokenType.SPL,address:I,name:N,symbol:S,decimals:x,balance:O.toSubUnit(),balanceDisplayValue:O.toString(),balanceInCurrency:de?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:de?.toDisplay({fixedDp:2}),logoUri:L??void 0,reputation:null,...me};return {...k,[I]:Y}},{});return {...y,[h.address]:{[n.networkToken.symbol]:v,...E}}},{})},"getBalances"),lr=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"),ut=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}),{}),c=r.postTokenBalances.reduce((i,{owner:d,mint:l,amount:m,decimals:u})=>{let f=`${d}-${l}`,T=a[f]??0n,y=m-T;if(y===0n)return i;let h=y>0n&&d===s,A=y<0n&&d===s;if(h){let P=Object.keys(a).find(k=>{let[b,S]=k.split("-");if(S!==l||b===s)return !1;let x=a[k],I=r.postTokenBalances.find(({owner:L,mint:O})=>L===b&&O===l);return !I||I.amount<x});if(!P)return i;let v=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={...v,type:v.contractType,from:{...v,address:P.split("-")[0]},to:{...v,address:d},amount:new coreUtilsSdk.TokenUnit(y,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 v=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={...v,type:v.contractType,from:{...v,address:s},to:{...v,address:P.owner},amount:new coreUtilsSdk.TokenUnit(-y,u,"").toDisplay()};return [...i,E]}return i},[]),p=mr(t,e,r,n,c,s);return p&&c.push(p),c},"extractTokenTranfers"),mr=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,""),de=s.map((Y,ne)=>Y-n[ne]).reduce((Y,ne,ze)=>ze!==S&&ne>Y.amount&&ne>0?{index:ze,amount:ne}:Y,{index:0,amount:0});return {amount:O.toDisplay(),from:{address:p},to:{address:t[de.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=c.length>0,T=m!==0?m+r:0,y=T>0,h=0,A=!1;if(f&&e===0&&p){let b=c.some(x=>x.to?.address===p),S=c.some(x=>x.from?.address===p);b&&!S&&(y=!1,A=!0,h=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,x,I)=>I!==e&&x>S.amount?{index:I,amount:x}:S,{index:0,amount:0});b.amount>r*2&&!A&&(T=b.amount,y=!0,h=b.index);}else f&&m<=0&&c.some(S=>S.to?.address===i)&&(T=Math.abs(m)+r,y=!1,h=u.reduce((x,I,N)=>N!==e&&I>x.amount&&I>0?{index:N,amount:I}:x,{index:0,amount:0}).index);if(!T)return null;let P=new coreUtilsSdk.TokenUnit(Math.abs(T),a.networkToken.decimals,"");if(!f){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]});h=y?0:b.index;}let v=t[h],E=y?v||i:p||i,k=y?p||i:v||p||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 pe=chunkVYIKXRYZ_cjs.a(t=>t.status==="fulfilled","isFulfilled");function ft(t){return e=>!!e[t]}chunkVYIKXRYZ_cjs.a(ft,"hasPropertyDefined");var yt=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 Z({proxyApiUrl:r}),d=q(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),T=[...m,...u].map(async A=>{try{return (await n.getSignaturesForAddress(kit.address(A),{limit:25}).send()).map(v=>v.signature)}catch(P){return console.error("Failed to get signatures for ATA:",A,P),[]}}),h=(await Promise.allSettled(T)).filter(pe).map(A=>A.value).flat();c=Array.from(new Set([...a,...h]));}}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(pe).map(i=>i.value).filter(ft("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 ht({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await yt({network:t,address:e,proxyApiUrl:r})).map(({txHash:a,tx:c})=>{if(!c.meta)return null;let{meta:p,transaction:{message:i}}=c,d=i.accountKeys.map(y=>y.toString()),l=d.indexOf(e),m=l!==-1;!m&&p.preTokenBalances&&(p.preTokenBalances.some(h=>h.owner===e)||(p.postTokenBalances??[]).some(h=>h.owner===e))&&(m=!0,l=-1);let u=l!==-1&&l<i.header.numRequiredSignatures,f=ut(d,l,{paidFee:u?Number(p.fee):0,preBalances:p.preBalances.map(Number),postBalances:p.postBalances.map(Number),preTokenBalances:(p.preTokenBalances??[]).map(Fe),postTokenBalances:(p.postTokenBalances??[]).map(Fe)},t),T=ur(f,e);return {hash:a,txType:T,gasUsed:String(c.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(c.blockTime)*1e3,isContractCall:!1,gasPrice:String(Number(c.meta.fee)/Number(c.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(ht,"getTransactionHistory");var ur=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 Pt=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 St(t){return t.ins.length===0&&t.outs.length===0}chunkVYIKXRYZ_cjs.a(St,"isBalanceChangeEmpty");function kt(t){return t!=null}chunkVYIKXRYZ_cjs.a(kt,"isNotNullish");var At=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 wr=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 c=a===token.TokenInstruction.TransferChecked?token.parseTransferCheckedInstruction:token.parseTransferInstruction,{accounts:p,data:i}=c({...e,data:Uint8Array.from(e.data)}),d=await wr(t,p.source.address);if(!d)return null;let l=s.find(T=>T.address.toLowerCase()===d.toLowerCase());if(!l)return null;let u=(p.source.address===n||p.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",p.source.address),_("To",p.destination.address)]}}catch{return null}},"tryToParseSPLTransfer");var vt=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=>At(p,a,e,r.networkToken)??await xt(n,p,a,e,r.tokens)??null)).then(p=>p.filter(pe).map(i=>i.value).filter(kt));return {balanceChange:a,details:c}},"parseTransaction");var bt=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:d})=>{let l=_r(p,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:c}},"processBalanceChange"),Dr=chunkVYIKXRYZ_cjs.a(t=>({name:t.type,symbol:t.type,decimals:t.decimals,description:"",logoUri:t.logo??void 0}),"convertNativeAssetToToken"),Cr=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"),_r=chunkVYIKXRYZ_cjs.a((t,e)=>t.type==="TOKEN"?Cr(t,e):t.type==="SOL"||t.type==="ETH"?Dr(t):null,"convertDiffAssetToToken");var It=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 It(t),{simulation:a,validation:c}=s?.result??{},p={title:"Transaction Details",items:[ae("Raw Data",t.params.transactionBase64)]},i=[p],d=!1,l,m;if(!c||c.result_type==="Warning"?m=Oe[vmModuleTypes.AlertType.WARNING]:c.result_type==="Malicious"?m=Oe[vmModuleTypes.AlertType.DANGER]:s?.error_details&&(m=Pt(s.error_details)),a){let{balanceChange:u,otherAffectedAddresses:f}=bt(n.account,a,e);if(l=u,f.length>0){let T=a.account_summary.account_assets_diff,y=T?.filter(P=>P.out&&P.out.raw_value>0)??[],h=T?.filter(P=>P.in&&P.in.raw_value>0)??[];y.length>0&&h.length>0?(p.items.push(_("Account",n.account)),p.items.push(Ee("Interacting with",f))):(p.items.push(_(f.length===1?"From":"Account",n.account)),p.items.push(f.length===1?_("To",f[0]):Ee("Interacting with",f)));}else p.items.push(_("Account",n.account));d=!0;}else {let{balanceChange:u,details:f}=await vt(n.transactionBase64,n.account,e,r);l=u,i.push(...f);}return {isSimulationSuccessful:d,details:i,alert:m,balanceChange:l}},"explainTransaction");var Lr="https://explorer.solana.com";function ke(t,e,r="tx"){try{let n=t.explorerUrl?new URL(t.explorerUrl):new URL(Lr);return n.pathname+=`${r}/${e}`,n.toString()}catch{return `${t.explorerUrl}/${r}/${e}`}}chunkVYIKXRYZ_cjs.a(ke,"getExplorerAddressByNetwork");var Ve=400,Fr=15,Nt=chunkVYIKXRYZ_cjs.a(async({provider:t,txHash:e,approvalController:r,request:n,network:s,commitment:a="confirmed",maxRetries:c=Fr})=>{let p=0,i=null,d=ke(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(f=>setTimeout(f,Ve)),p++;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)),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(m=>setTimeout(m,Ve)),p++;}return i==="confirmed"||i==="finalized"?(r.onTransactionConfirmed({txHash:e,request:n,explorerLink:d}),!0):(r.onTransactionReverted({txHash:e,request:n}),!1)},"waitForTransactionConfirmation");var Or=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()}),Mr=zod.z.tuple([Or]),Dt=chunkVYIKXRYZ_cjs.a(t=>Mr.safeParse(t),"parseRequestParams");var _t=chunkVYIKXRYZ_cjs.a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=Dt(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams(W("Transaction params are invalid",i))};let[{account:d,serializedTx:l,sendOptions:m}]=c,u=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:f,isSimulationSuccessful:T,alert:y,balanceChange:h}=await Se({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:d,chain:q(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:y,balanceChange:h,networkFeeSelector:!1,isSimulationSuccessful:T},P={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:d,data:l},v=await r.requestApproval({request:t,displayData:A,signingData:P});if("error"in v)return {error:v.error};let E;try{E=await Gr(u,v,m);let k=ke(e,E);return await r.onTransactionPending({txHash:E,request:t,explorerLink:k}),Nt({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(W("Transaction failed",k))}}},"signAndSendTransaction"),Gr=chunkVYIKXRYZ_cjs.a(async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send(),"getTxHash");var $r=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),zr=zod.z.tuple([$r]),Et=chunkVYIKXRYZ_cjs.a(t=>zr.safeParse(t),"parseRequestParams");var Lt=chunkVYIKXRYZ_cjs.a(async({request:t,network:e,approvalController:r,proxyApiUrl:n,blockaid:s})=>{let{params:a}=t,{data:c,success:p,error:i}=Et(a);if(!p)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams(W("Transaction params are invalid",i))};let[{account:d,serializedTx:l}]=c,m=M({isTestnet:!!e.isTestnet,proxyApiUrl:n}),{details:u,isSimulationSuccessful:f,alert:T,balanceChange:y}=await Se({simulationParams:{dAppUrl:t.dappInfo.url,params:{account:d,chain:q(e),transactionBase64:l},blockaid:s},network:e,provider:m}),h={title:"Do you approve this transaction?",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:u,alert:T,balanceChange:y&&St(y)?void 0:y,networkFeeSelector:!1,isSimulationSuccessful:f},A={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:d,data:l},P=await r.requestApproval({request:t,displayData:h,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 Ut=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})=>!Ut(t),{message:"Cannot use signMessage() calls for signing transactions"}),Hr=zod.z.tuple([jr]),Ft=chunkVYIKXRYZ_cjs.a(t=>Hr.safeParse(t),"parseRequestParams");var Mt=chunkVYIKXRYZ_cjs.a(async({request:t,network:e,approvalController:r})=>{let{params:n}=t,{data:s,success:a,error:c}=Ft(n);if(!a)return console.error("invalid params",c),{error:rpcErrors.rpcErrors.invalidParams(W("Message signing params are invalid",c))};let[{account:p,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",p),_e("Message",d.decode(base.base64.decode(i))),ae("Raw Message (Base-64)",i)]}],networkFeeSelector:!1},m={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE,account:p,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,$,le,te,re,$e=class $e{constructor({approvalController:e,environment:r,appInfo:n,runtime:s}){chunkVYIKXRYZ_cjs.d(this,B,void 0);chunkVYIKXRYZ_cjs.d(this,$,void 0);chunkVYIKXRYZ_cjs.d(this,le,void 0);chunkVYIKXRYZ_cjs.d(this,te,void 0);chunkVYIKXRYZ_cjs.d(this,re,void 0);let{proxyApiUrl:a}=Xe(r);chunkVYIKXRYZ_cjs.e(this,le,n),chunkVYIKXRYZ_cjs.e(this,B,a),chunkVYIKXRYZ_cjs.e(this,$,e),chunkVYIKXRYZ_cjs.e(this,re,s),chunkVYIKXRYZ_cjs.c(this,B),chunkVYIKXRYZ_cjs.c(this,$),chunkVYIKXRYZ_cjs.c(this,le),chunkVYIKXRYZ_cjs.e(this,te,new Zr__default.default({baseURL:a+"/proxy/blockaid/",apiKey:ot,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 ge(e)}deriveAddress(e){return Ze({...e,approvalController:chunkVYIKXRYZ_cjs.c(this,$)})}getBalances(e){let r=new se({storage:e.storage,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,B),fetch:chunkVYIKXRYZ_cjs.c(this,re)?.fetch});return dt({...e,tokenService:r,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,B),fetch:chunkVYIKXRYZ_cjs.c(this,re)?.fetch})}getManifest(){let e=vmModuleTypes.parseManifest(He);return e.success?e.data:void 0}getNetworkFee(e){return st(e,chunkVYIKXRYZ_cjs.c(this,B))}getTransactionHistory(e){return ht({network:e.network,address:e.address,proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,B)})}getTokens(e){return e.caipId?it({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 Lt({approvalController:chunkVYIKXRYZ_cjs.c(this,$),proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,B),network:r,request:e,blockaid:chunkVYIKXRYZ_cjs.c(this,te)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return _t({approvalController:chunkVYIKXRYZ_cjs.c(this,$),proxyApiUrl:chunkVYIKXRYZ_cjs.c(this,B),network:r,request:e,blockaid:chunkVYIKXRYZ_cjs.c(this,te)});case vmModuleTypes.RpcMethod.SOLANA_SIGN_MESSAGE:return Mt({approvalController:chunkVYIKXRYZ_cjs.c(this,$),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};B=new WeakMap,$=new WeakMap,le=new WeakMap,te=new WeakMap,re=new WeakMap,chunkVYIKXRYZ_cjs.a($e,"SvmModule");var Gt=$e;
|
|
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
22
|
|
|
22
|
-
exports.SvmModule =
|
|
23
|
+
exports.SvmModule = $t;
|
|
23
24
|
//# sourceMappingURL=out.js.map
|
|
24
25
|
//# sourceMappingURL=index.cjs.map
|