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