@avalabs/svm-module 1.5.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-7VP42LRT.js +5 -0
- package/dist/chunk-7VP42LRT.js.map +1 -0
- package/dist/chunk-TKL4UUHE.cjs +11 -0
- package/dist/chunk-TKL4UUHE.cjs.map +1 -0
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/provider/index.cjs +22 -0
- package/dist/provider/index.cjs.map +1 -0
- package/dist/provider/index.d.cts +110 -0
- package/dist/provider/index.d.ts +110 -0
- package/dist/provider/index.js +15 -0
- package/dist/provider/index.js.map +1 -0
- package/manifest.json +10 -0
- package/package.json +7 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var f=Object.defineProperty;var g=(b,a,c)=>a in b?f(b,a,{enumerable:!0,configurable:!0,writable:!0,value:c}):b[a]=c;var h=(b,a,c)=>(g(b,typeof a!="symbol"?a+"":a,c),c),d=(b,a,c)=>{if(!a.has(b))throw TypeError("Cannot "+c)};var i=(b,a,c)=>(d(b,a,"read from private field"),c?c.call(b):a.get(b)),j=(b,a,c)=>{if(a.has(b))throw TypeError("Cannot add the same private member more than once");a instanceof WeakSet?a.add(b):a.set(b,c);},k=(b,a,c,e)=>(d(b,a,"write to private field"),e?e.call(b,c):a.set(b,c),c);var l=(b,a,c)=>(d(b,a,"access private method"),c);
|
|
2
|
+
|
|
3
|
+
export { h as a, i as b, j as c, k as d, l as e };
|
|
4
|
+
//# sourceMappingURL=out.js.map
|
|
5
|
+
//# sourceMappingURL=chunk-7VP42LRT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var f=Object.defineProperty;var g=(b,a,c)=>a in b?f(b,a,{enumerable:!0,configurable:!0,writable:!0,value:c}):b[a]=c;var h=(b,a,c)=>(g(b,typeof a!="symbol"?a+"":a,c),c),d=(b,a,c)=>{if(!a.has(b))throw TypeError("Cannot "+c)};var i=(b,a,c)=>(d(b,a,"read from private field"),c?c.call(b):a.get(b)),j=(b,a,c)=>{if(a.has(b))throw TypeError("Cannot add the same private member more than once");a instanceof WeakSet?a.add(b):a.set(b,c);},k=(b,a,c,e)=>(d(b,a,"write to private field"),e?e.call(b,c):a.set(b,c),c);var l=(b,a,c)=>(d(b,a,"access private method"),c);
|
|
4
|
+
|
|
5
|
+
exports.a = h;
|
|
6
|
+
exports.b = i;
|
|
7
|
+
exports.c = j;
|
|
8
|
+
exports.d = k;
|
|
9
|
+
exports.e = l;
|
|
10
|
+
//# sourceMappingURL=out.js.map
|
|
11
|
+
//# sourceMappingURL=chunk-TKL4UUHE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkTKL4UUHE_cjs = require('./chunk-TKL4UUHE.cjs');
|
|
3
4
|
var vmModuleTypes = require('@avalabs/vm-module-types');
|
|
4
5
|
var rpcErrors = require('@metamask/rpc-errors');
|
|
5
6
|
var coreCoingeckoSdk = require('@avalabs/core-coingecko-sdk');
|
|
@@ -11,8 +12,8 @@ var kit = require('@solana/kit');
|
|
|
11
12
|
var system = require('@solana-program/system');
|
|
12
13
|
var token = require('@solana-program/token');
|
|
13
14
|
|
|
14
|
-
var at=Object.defineProperty;var st=(t,e,r)=>e in t?at(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var ue=(t,e,r)=>(st(t,typeof e!="symbol"?e+"":e,r),r),oe=(t,e,r)=>{if(!e.has(t))throw TypeError("Cannot "+r)};var m=(t,e,r)=>(oe(t,e,"read from private field"),r?r.call(t):e.get(t)),I=(t,e,r)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,r);},w=(t,e,r,n)=>(oe(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r);var fe=(t,e,r)=>(oe(t,e,"access private method"),r);var ae=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=L.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await it(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},L=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function it(t){return new Promise(e=>setTimeout(e,t))}var se=t=>ae({operation:e=>t(e>0),maxRetries:2,backoffPolicy:L.constant(1),isSuccess:e=>e?.status?.error_code!==429});function ye(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function ie(t){let e,r=0;for(e=0;e<t.length;e++){let n=ye(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function b(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var F=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return b([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return b([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var Te=coreCoingeckoSdk.getBasicCoingeckoHttp(),D,B,M=class{constructor({storage:e,proxyApiUrl:r}){I(this,D,void 0);I(this,B,void 0);ue(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let s=e[a];n[a]={},r.forEach(o=>{n[a]={[o]:{price:s?.[o],change24:s?.[`${o}_24h_change`],vol24:s?.[`${o}_24h_vol`],marketCap:s?.[`${o}_market_cap`]}};});}),n});w(this,D,e),w(this,B,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${ie(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=m(this,D)?.get?.(s),n)return n;try{n=await se(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return m(this,D)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${ie(e)}-${r}-${n}`}`;if(a=m(this,D)?.get?.(o),a)return a;try{a=await se(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return m(this,D)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new F(m(this,B)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return coreCoingeckoSdk.simpleTokenPrice(Te,{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:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let p=await new F(m(this,B)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(p,r)}return coreCoingeckoSdk.simplePrice(Te,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};D=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var E=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var V=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});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"}}}},network:{chainIds:["solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1","solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z"],namespaces:["solana"]},cointype:"501",permissions:{rpc:{dapps:!0,methods:["solana_signTransaction","solana_signAndSendTransaction"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var gt={proxyApiUrl:"https://proxy-api.avax.network"},Tt={proxyApiUrl:"https://proxy-api-dev.avax.network"},xe=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return gt;case vmModuleTypes.Environment.DEV:return Tt}};var ke=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var G=({accountIndex:t})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");return {[vmModuleTypes.NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}};var ve=async t=>{let{approvalController:e,secretId:r}=t,n=ke(t)?G(t).SVM:void 0,a=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[vmModuleTypes.NetworkVMType.SVM]:base.base58.encode(base.hex.decode(a))}};var Ie="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Ae="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Re="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",we="/proxy/nownodes/sol",be="https://api.devnet.solana.com";var A=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?be:e+we});var ce=1e6,R={high:150*ce,medium:75*ce,low:2*ce},It=t=>(t.length===0?[R.low,R.low]:t.length===1?[t[0],R.low]:t).slice().sort((r,n)=>r-n);async function Ne(t,e){let a=await(await A({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(a.length===0||a.every(P=>P.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(R.high),maxPriorityFeePerGas:BigInt(R.high)},medium:{maxFeePerGas:BigInt(R.medium),maxPriorityFeePerGas:BigInt(R.medium)},low:{maxFeePerGas:BigInt(R.low),maxPriorityFeePerGas:BigInt(R.low)},baseFee:BigInt(R.low),displayDecimals:9,isFixedFee:!1};let o=It(a.map(P=>Number(P.prioritizationFee))),i=o.at(0),c=o.at(-1),p=Math.floor(o.length/2),y=o.length%2===1?o[p]:(o[p-1]+o[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(y*1.05)),g=BigInt(Math.ceil(i*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:g,maxPriorityFeePerGas:g},baseFee:g,displayDecimals:9,isFixedFee:!1}}var Rt=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()}),De=zod.z.array(Rt);async function _e({caip2Id:t,proxyApiUrl:e}){try{return (await b([`${e}/solana-tokens?caip2Id=${t}`],De)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}var _=t=>t.status==="fulfilled";var Ce=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 $,W,Ee,j=class{constructor({proxyApiUrl:e}){I(this,W);I(this,$,void 0);w(this,$,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=fe(this,W,Ee).call(this,`/account/${r}/${e}/portfolio`),a=await b([n],Ce);return {address:e,portfolio:a}}catch(n){console.error("getPortfolio() failed:",n);let a=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${a}`}}}};$=new WeakMap,W=new WeakSet,Ee=function(e){return `${m(this,$)}${e}`};var Be=t=>{switch(t.caipId){case Ie:return "mainnet";case Ae:return "devnet";case Re:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var Oe=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:a})=>{let s=new j({proxyApiUrl:e}),o=n.pricingProviders?.coingecko.nativeTokenId??"",i=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=Be(n),y=await Promise.all(t.map(T=>s.getPortfolio({address:T,network:p}))),l=new Set(y.flatMap(T=>"portfolio"in T?T.portfolio.tokens.map(({mint:u})=>u):[])),d=await Promise.allSettled([o?await a.getSimplePrice({coinIds:[o],currencies:[c]}):Promise.resolve(void 0),i?await a.getPricesByAddresses(Array.from(l),i,c):Promise.resolve(void 0)]),[g,P]=d.map(T=>_(T)?T.value:void 0);return y.reduce((T,u)=>{if("error"in u)return {...T,[u.address]:{error:u.error}};let S=new coreUtilsSdk.TokenUnit(u.portfolio.nativeBalance.lamports,9,"SOL"),h=Fe(o,c,g),k=h.priceInCurrency!==void 0?S.mul(h.priceInCurrency):void 0,U={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:S.toSubUnit(),balanceDisplayValue:S.toString(),balanceInCurrency:k?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:k?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:o,...h},z=u.portfolio.tokens.reduce((Q,{amountRaw:ee,symbol:le,decimals:me,mint:te,name:rt,logo:nt})=>{let re=new coreUtilsSdk.TokenUnit(ee,me,le),ne=Fe(te,c,P),de=ne.priceInCurrency!==void 0?re.mul(ne.priceInCurrency):void 0,ot={type:vmModuleTypes.TokenType.SPL,address:te,name:rt,symbol:le,decimals:me,balance:re.toSubUnit(),balanceDisplayValue:re.toString(),balanceInCurrency:de?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:de?.toDisplay({fixedDp:2}),logoUri:nt??void 0,reputation:null,...ne};return {...Q,[te]:ot}},{});return {...T,[u.address]:{[n.networkToken.symbol]:U,...z}}},{})},Fe=(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 pe=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),$e=(t,e,r,n)=>{let a=r.preTokenBalances.reduce((i,{owner:c,mint:p,amount:y})=>({...i,[`${c}-${p}`]:y}),{}),s=r.postTokenBalances.reduce((i,{owner:c,mint:p,amount:y,decimals:l})=>{let d=`${c}-${p}`,g=a[d]??0n,P=y-g;if(P<=0n)return i;let T=Object.keys(a).find(h=>{let[k,U]=h.split("-"),z=r.postTokenBalances.find(({owner:Q,mint:ee})=>Q===k&&ee===p);return U===p&&z&&a[h]>z.amount});if(!T)return i;let u=n.tokens?.filter(h=>"contractType"in h).find(h=>h.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},S={...u,type:u.contractType,from:{...u,address:T.split("-")[0]},to:{...u,address:c},amount:new coreUtilsSdk.TokenUnit(P,l,"").toDisplay()};return [...i,S]},[]),o=bt(t,e,r,n);return o&&s.push(o),s},bt=(t,e,{paidFee:r,preBalances:n,postBalances:a},s)=>{let o=t[e],i=n[e],c=a[e],p=c!==i?c-i+r:0,y=a.map((P,T)=>P-n[T]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),s.networkToken.decimals,""),g=l?0:Math.max(0,y.findIndex(P=>P===-p));return {amount:d.toDisplay(),from:{address:l?t[g]:o},to:{address:l?o:t[g]},name:s.networkToken.name,symbol:s.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function He(t){return e=>!!e[t]}var ze=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=A({isTestnet:t,proxyApiUrl:r}),s=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(i=>i.signature);return (await Promise.allSettled(s.map(async i=>({txHash:i.toString(),tx:await n.getTransaction(i,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(_).map(i=>i.value).filter(He("tx"))};var Ge=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function je({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await ze({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:s,tx:o})=>{if(!o.meta)return null;let{meta:i,transaction:{message:c}}=o,p=c.accountKeys.map(g=>g.toString()),y=p.indexOf(e),l=y<c.header.numRequiredSignatures,d=$e(p,y,{paidFee:l?Number(i.fee):0,preBalances:i.preBalances.map(Number),postBalances:i.postBalances.map(Number),preTokenBalances:(i.preTokenBalances??[]).map(pe),postTokenBalances:(i.postTokenBalances??[]).map(pe)},t);return {hash:s,txType:l?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,gasUsed:String(o.meta.computeUnitsConsumed??"0"),tokens:d,from:d[0]?.from?.address??p[0],to:d[0]?.to?.address??(l?"":e),isOutgoing:l,isIncoming:!l,isSender:l,timestamp:Number(o.blockTime),isContractCall:!1,gasPrice:String(Number(o.meta.fee)/Number(o.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:Ge(s,t.explorerUrl)}}).filter(s=>s!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}function K(t){return t.ins.length===0&&t.outs.length===0}function Y(t){return t!=null}var X=(t,e,r,n)=>{if(!(!kit.isInstructionForProgram(t,system.SYSTEM_PROGRAM_ADDRESS)||!kit.isInstructionWithAccounts(t)||!kit.isInstructionWithData(t)))try{if(system.identifySystemInstruction(t)!==system.SystemInstruction.TransferSol)return null;let{accounts:s,data:o}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),c=s.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(o.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Native Transfer",items:[E("From",s.source.address),E("To",s.destination.address)]}}catch{return null}};var qt=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}},J=async(t,e,r,n,a)=>{if(!(!a?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e)))try{if(token.identifyTokenInstruction(e)!==token.TokenInstruction.Transfer)return null;let{accounts:o,data:i}=token.parseTransferInstruction({...e,data:Uint8Array.from(e.data)}),c=await qt(t,o.source.address);if(!c)return null;let p=a.find(d=>d.address.toLowerCase()===c.toLowerCase());if(!p)return null;let l=(o.source.address===n||o.authority.address===n)===!0?"outs":"ins";return r[l].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,p.decimals,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[E("From",o.source.address),E("To",o.destination.address)]}}catch{return null}};var jt=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()}),Wt=zod.z.tuple([jt]),We=t=>Wt.safeParse(t);var Ye=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:a}=t,{data:s,success:o,error:i}=We(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let[{account:c,serializedTx:p,sendOptions:y}]=s,l=A({isTestnet:!!e.isTestnet,proxyApiUrl:n}),d=await coreWalletsSdk.deserializeTransactionMessage(p,l),g={ins:[],outs:[]},P=await Promise.allSettled(d.instructions.map(async k=>X(k,g,c,e.networkToken)??await J(l,k,g,c,e.tokens)??null)).then(k=>k.filter(_).map(U=>U.value).filter(Y)),T={title:"Approve Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:[V("Raw Data",p)]},...P],balanceChange:K(g)?void 0:g,networkFeeSelector:!1,isSimulationSuccessful:!1},u={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},S=await r.requestApproval({request:t,displayData:T,signingData:u});if("error"in S)return {error:S.error};let h;try{h=await Xt(l,S,y);}catch(k){return console.error(k),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:k}})}}return {result:h}},Xt=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var Jt=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Zt=zod.z.tuple([Jt]),Xe=t=>Zt.safeParse(t);var Ze=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:a}=t,{data:s,success:o,error:i}=Xe(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let[{account:c,serializedTx:p}]=s,y=A({isTestnet:!!e.isTestnet,proxyApiUrl:n}),l=await coreWalletsSdk.deserializeTransactionMessage(p,y),d={ins:[],outs:[]},g=await Promise.allSettled(l.instructions.map(async S=>X(S,d,c,e.networkToken)??await J(y,S,d,c,e.tokens)??null)).then(S=>S.filter(_).map(h=>h.value).filter(Y)),P={title:"Sign Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:[V("Raw Data",p)]},...g],balanceChange:K(d)?void 0:d,networkFeeSelector:!1,isSimulationSuccessful:!1},T={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},u=await r.requestApproval({request:t,displayData:P,signingData:T});return "error"in u?{error:u.error}:"signedData"in u?{result:u.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var x,C,H,tt=class{constructor({approvalController:e,environment:r,appInfo:n}){I(this,x,void 0);I(this,C,void 0);I(this,H,void 0);let{proxyApiUrl:a}=xe(r);w(this,H,n),w(this,x,a),w(this,C,e),m(this,x),m(this,C),m(this,H);}async getProvider(e){return A({isTestnet:!!e.isTestnet,proxyApiUrl:m(this,x)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return G(e)}deriveAddress(e){return ve({...e,approvalController:m(this,C)})}getBalances(e){let r=new M({storage:e.storage,proxyApiUrl:m(this,x)});return Oe({...e,tokenService:r,proxyApiUrl:m(this,x)})}getManifest(){let e=vmModuleTypes.parseManifest(he);return e.success?e.data:void 0}getNetworkFee(e){return Ne(e,m(this,x))}getTransactionHistory(e){return je({network:e.network,address:e.address,proxyApiUrl:m(this,x)})}getTokens(e){return e.caipId?_e({caip2Id:e.caipId,proxyApiUrl:m(this,x)}):Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION:return Ze({approvalController:m(this,C),proxyApiUrl:m(this,x),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return Ye({approvalController:m(this,C),proxyApiUrl:m(this,x),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};x=new WeakMap,C=new WeakMap,H=new WeakMap;
|
|
15
|
+
var oe=async({operation:t,isSuccess:e,maxRetries:r=10,backoffPolicy:n=L.exponential()})=>{let a=0,s=0,o;for(;s<r;){s>0&&await ot(a);try{let c=await t(s);if(e(c))return c}catch(c){o=c;}a=n(s),s++;}let i=o?`Max retry exceeded. ${o}`:"Max retry exceeded.";throw new Error(i)},L=class{static exponential(){return e=>Math.pow(2,e)*1e3}static constant(e){return r=>e*1e3}static constantMs(e){return r=>e}};function ot(t){return new Promise(e=>setTimeout(e,t))}var ae=t=>oe({operation:e=>t(e>0),maxRetries:2,backoffPolicy:L.constant(1),isSuccess:e=>e?.status?.error_code!==429});function fe(t){let e,r=0;for(e=0;e<t.length;e++)r+=t.charCodeAt(e)*(e+1);return r}function se(t){let e,r=0;for(e=0;e<t.length;e++){let n=fe(t[e]??"");r=r+65027/n;}return (""+r).slice(0,16)}async function w(t,e){let r=await fetch(...t);if(!r.ok)throw new Error(`Request failed with status ${r.status}`);let n=await r.json();return e.parse(n)}var F=class{constructor(e){this.proxyApiUrl=e;}simplePrice(e){let r=new URLSearchParams(e);return w([`${this.proxyApiUrl}/proxy/coingecko/simple/price?${r}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}simplePriceByContractAddresses(e){let{id:r,...n}=e,a=new URLSearchParams(n);return w([`${this.proxyApiUrl}/proxy/coingecko/simple/token_price/${r}?${a}`,{method:"POST",headers:{"Content-Type":"application/json"}}],vmModuleTypes.RawSimplePriceResponseSchema)}};var ge=coreCoingeckoSdk.getBasicCoingeckoHttp(),D,B,M=class{constructor({storage:e,proxyApiUrl:r}){chunkTKL4UUHE_cjs.c(this,D,void 0);chunkTKL4UUHE_cjs.c(this,B,void 0);chunkTKL4UUHE_cjs.a(this,"transformSimplePriceResponse",(e,r=[coreCoingeckoSdk.VsCurrencyType.USD])=>{let n={};return Object.keys(e).forEach(a=>{let s=e[a];n[a]={},r.forEach(o=>{n[a]={[o]:{price:s?.[o],change24:s?.[`${o}_24h_change`],vol24:s?.[`${o}_24h_vol`],marketCap:s?.[`${o}_market_cap`]}};});}),n});chunkTKL4UUHE_cjs.d(this,D,e),chunkTKL4UUHE_cjs.d(this,B,r);}async getSimplePrice({coinIds:e=[],currencies:r=[coreCoingeckoSdk.VsCurrencyType.USD]}){let n,s=`getSimplePrice-${e?`${se(e)}-${r.toString()}`:`${r.toString()}`}`;if(n=chunkTKL4UUHE_cjs.b(this,D)?.get?.(s),n)return n;try{n=await ae(o=>this.simplePrice({coinIds:e,currencies:r,marketCap:!0,vol24:!0,change24:!0,useCoingeckoProxy:o}));}catch{n=void 0;}return chunkTKL4UUHE_cjs.b(this,D)?.set?.(s,n),n}async getPricesByAddresses(e,r,n=coreCoingeckoSdk.VsCurrencyType.USD){let a,o=`getPricesWithMarketDataByAddresses-${`${se(e)}-${r}-${n}`}`;if(a=chunkTKL4UUHE_cjs.b(this,D)?.get?.(o),a)return a;try{a=await ae(i=>this.fetchPricesByAddresses({assetPlatformId:r,tokenAddresses:e,currency:n,useCoingeckoProxy:i}));}catch(i){console.error(i),a=void 0;}return chunkTKL4UUHE_cjs.b(this,D)?.set?.(o,a),a}async fetchPricesByAddresses({assetPlatformId:e,tokenAddresses:r,currency:n=coreCoingeckoSdk.VsCurrencyType.USD,useCoingeckoProxy:a=!1}){if(a){let s=await new F(chunkTKL4UUHE_cjs.b(this,B)).simplePriceByContractAddresses({id:e,contract_addresses:r,vs_currencies:[n],include_market_cap:!0,include_24hr_vol:!0,include_24hr_change:!0});return this.transformSimplePriceResponse(s,[n])}return coreCoingeckoSdk.simpleTokenPrice(ge,{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:a=!1,change24:s=!1,lastUpdated:o=!1,useCoingeckoProxy:i=!1,shouldThrow:c=!0}){if(i){let p=await new F(chunkTKL4UUHE_cjs.b(this,B)).simplePrice({ids:e,vs_currencies:r,include_market_cap:n,include_24hr_vol:a,include_24hr_change:s,include_last_updated_at:o});return this.transformSimplePriceResponse(p,r)}return coreCoingeckoSdk.simplePrice(ge,{coinIds:e,currencies:r,marketCap:n,vol24:a,change24:s,lastUpdated:o,shouldThrow:c})}};D=new WeakMap,B=new WeakMap;zod.object({date:zod.string(),usd:zod.record(zod.number())});var E=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.ADDRESS,value:e});var V=(t,e)=>({label:t,type:vmModuleTypes.DetailItemType.DATA,value:e});var Pe={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"],nonRestrictedMethods:[]}},manifestVersion:"0.1"};var ut={proxyApiUrl:"https://proxy-api.avax.network"},ft={proxyApiUrl:"https://proxy-api-dev.avax.network"},Se=t=>{switch(t){case vmModuleTypes.Environment.PRODUCTION:return ut;case vmModuleTypes.Environment.DEV:return ft}};var ke=t=>"derivationPathType"in t&&"accountIndex"in t&&typeof t.accountIndex=="number"&&typeof t.derivationPathType=="string";var G=({accountIndex:t})=>{if(t<0)throw rpcErrors.rpcErrors.invalidParams("Account index must be a non-negative integer");return {[vmModuleTypes.NetworkVMType.SVM]:`m/44'/501'/${t}'/0'`}};var xe=async t=>{let{approvalController:e,secretId:r}=t,n=ke(t)?G(t).SVM:void 0,a=await e.requestPublicKey({curve:"ed25519",secretId:r,derivationPath:n});return {[vmModuleTypes.NetworkVMType.SVM]:base.base58.encode(base.hex.decode(a))}};var ve="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Ie="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",Ae="solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z",Re="/proxy/nownodes/sol",be="https://api.devnet.solana.com";var A=({isTestnet:t,proxyApiUrl:e})=>coreWalletsSdk.getSolanaProvider({isTestnet:t,rpcUrl:t?be:e+Re});var ie=1e6,R={high:150*ie,medium:75*ie,low:2*ie},kt=t=>(t.length===0?[R.low,R.low]:t.length===1?[t[0],R.low]:t).slice().sort((r,n)=>r-n);async function we(t,e){let a=await(await A({isTestnet:!!t.isTestnet,proxyApiUrl:e}).getRecentPrioritizationFees()).send();if(a.length===0||a.every(P=>P.prioritizationFee===0n))return {high:{maxFeePerGas:BigInt(R.high),maxPriorityFeePerGas:BigInt(R.high)},medium:{maxFeePerGas:BigInt(R.medium),maxPriorityFeePerGas:BigInt(R.medium)},low:{maxFeePerGas:BigInt(R.low),maxPriorityFeePerGas:BigInt(R.low)},baseFee:BigInt(R.low),displayDecimals:9,isFixedFee:!1};let o=kt(a.map(P=>Number(P.prioritizationFee))),i=o.at(0),c=o.at(-1),p=Math.floor(o.length/2),y=o.length%2===1?o[p]:(o[p-1]+o[p])/2,l=BigInt(Math.ceil(c*1.05)),d=BigInt(Math.ceil(y*1.05)),g=BigInt(Math.ceil(i*1.05));return {high:{maxFeePerGas:l,maxPriorityFeePerGas:l},medium:{maxFeePerGas:d,maxPriorityFeePerGas:d},low:{maxFeePerGas:g,maxPriorityFeePerGas:g},baseFee:g,displayDecimals:9,isFixedFee:!1}}var vt=zod.z.object({address:zod.z.string(),name:zod.z.string(),symbol:zod.z.string(),contractType:zod.z.literal(vmModuleTypes.TokenType.SPL),caip2Id:zod.z.string().startsWith("solana:"),decimals:zod.z.number(),chainId:zod.z.number().optional(),logoUri:zod.z.string().optional(),color:zod.z.string().optional()}),Ne=zod.z.array(vt);async function De({caip2Id:t,proxyApiUrl:e}){try{return (await w([`${e}/solana-tokens?caip2Id=${t}`],Ne)).map(n=>({...n,type:n.contractType}))}catch(r){throw console.error("getTokens() failed for",t,r),rpcErrors.rpcErrors.internal(`Failed to fetch tokens for caip2Id "${t}"`)}}var _=t=>t.status==="fulfilled";var _e=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 $,W,Ce,j=class{constructor({proxyApiUrl:e}){chunkTKL4UUHE_cjs.c(this,W);chunkTKL4UUHE_cjs.c(this,$,void 0);chunkTKL4UUHE_cjs.d(this,$,`${e}/proxy/moralis`);}async getPortfolio({address:e,network:r}){try{let n=chunkTKL4UUHE_cjs.e(this,W,Ce).call(this,`/account/${r}/${e}/portfolio`),a=await w([n],_e);return {address:e,portfolio:a}}catch(n){console.error("getPortfolio() failed:",n);let a=n instanceof Error?n.message:"unknown error";return {address:e,error:`getPortfolio() failed: ${a}`}}}};$=new WeakMap,W=new WeakSet,Ce=function(e){return `${chunkTKL4UUHE_cjs.b(this,$)}${e}`};var Ee=t=>{switch(t.caipId){case ve:return "mainnet";case Ie:return "devnet";case Ae:return "testnet";default:throw new Error("Unrecognized CAIP-2 id: "+t.caipId)}};var Fe=async({addresses:t,proxyApiUrl:e,currency:r,network:n,tokenService:a})=>{let s=new j({proxyApiUrl:e}),o=n.pricingProviders?.coingecko.nativeTokenId??"",i=n.pricingProviders?.coingecko.assetPlatformId??"",c=r.toLowerCase(),p=Ee(n),y=await Promise.all(t.map(T=>s.getPortfolio({address:T,network:p}))),l=new Set(y.flatMap(T=>"portfolio"in T?T.portfolio.tokens.map(({mint:u})=>u):[])),d=await Promise.allSettled([o?await a.getSimplePrice({coinIds:[o],currencies:[c]}):Promise.resolve(void 0),i?await a.getPricesByAddresses(Array.from(l),i,c):Promise.resolve(void 0)]),[g,P]=d.map(T=>_(T)?T.value:void 0);return y.reduce((T,u)=>{if("error"in u)return {...T,[u.address]:{error:u.error}};let S=new coreUtilsSdk.TokenUnit(u.portfolio.nativeBalance.lamports,9,"SOL"),h=Le(o,c,g),x=h.priceInCurrency!==void 0?S.mul(h.priceInCurrency):void 0,U={type:vmModuleTypes.TokenType.NATIVE,name:n.networkToken.name,symbol:n.networkToken.symbol,decimals:n.networkToken.decimals,balance:S.toSubUnit(),balanceDisplayValue:S.toString(),balanceInCurrency:x?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:x?.toDisplay({fixedDp:2}),logoUri:n.networkToken.logoUri??"",coingeckoId:o,...h},z=u.portfolio.tokens.reduce((Q,{amountRaw:ee,symbol:pe,decimals:le,mint:te,name:tt,logo:rt})=>{let re=new coreUtilsSdk.TokenUnit(ee,le,pe),ne=Le(te,c,P),me=ne.priceInCurrency!==void 0?re.mul(ne.priceInCurrency):void 0,nt={type:vmModuleTypes.TokenType.SPL,address:te,name:tt,symbol:pe,decimals:le,balance:re.toSubUnit(),balanceDisplayValue:re.toString(),balanceInCurrency:me?.toDisplay({fixedDp:2,asNumber:!0}),balanceCurrencyDisplayValue:me?.toDisplay({fixedDp:2}),logoUri:rt??void 0,reputation:null,...ne};return {...Q,[te]:nt}},{});return {...T,[u.address]:{[n.networkToken.symbol]:U,...z}}},{})},Le=(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 ce=t=>({mint:t.mint,owner:t.owner,amount:BigInt(t.uiTokenAmount.amount),decimals:t.uiTokenAmount.decimals}),Ve=(t,e,r,n)=>{let a=r.preTokenBalances.reduce((i,{owner:c,mint:p,amount:y})=>({...i,[`${c}-${p}`]:y}),{}),s=r.postTokenBalances.reduce((i,{owner:c,mint:p,amount:y,decimals:l})=>{let d=`${c}-${p}`,g=a[d]??0n,P=y-g;if(P<=0n)return i;let T=Object.keys(a).find(h=>{let[x,U]=h.split("-"),z=r.postTokenBalances.find(({owner:Q,mint:ee})=>Q===x&&ee===p);return U===p&&z&&a[h]>z.amount});if(!T)return i;let u=n.tokens?.filter(h=>"contractType"in h).find(h=>h.address===p)??{contractType:vmModuleTypes.TokenType.SPL,decimals:l,address:p,symbol:"Unknown",name:"Unknown"},S={...u,type:u.contractType,from:{...u,address:T.split("-")[0]},to:{...u,address:c},amount:new coreUtilsSdk.TokenUnit(P,l,"").toDisplay()};return [...i,S]},[]),o=At(t,e,r,n);return o&&s.push(o),s},At=(t,e,{paidFee:r,preBalances:n,postBalances:a},s)=>{let o=t[e],i=n[e],c=a[e],p=c!==i?c-i+r:0,y=a.map((P,T)=>P-n[T]);if(!p)return null;let l=p>0,d=new coreUtilsSdk.TokenUnit(Math.abs(p),s.networkToken.decimals,""),g=l?0:Math.max(0,y.findIndex(P=>P===-p));return {amount:d.toDisplay(),from:{address:l?t[g]:o},to:{address:l?o:t[g]},name:s.networkToken.name,symbol:s.networkToken.symbol,type:vmModuleTypes.TokenType.NATIVE}};function $e(t){return e=>!!e[t]}var He=async({isTestnet:t,address:e,proxyApiUrl:r})=>{let n=A({isTestnet:t,proxyApiUrl:r}),s=(await n.getSignaturesForAddress(kit.address(e),{limit:25}).send()).map(i=>i.signature);return (await Promise.allSettled(s.map(async i=>({txHash:i.toString(),tx:await n.getTransaction(i,{encoding:"json",maxSupportedTransactionVersion:0}).send()})))).filter(_).map(i=>i.value).filter($e("tx"))};var ze=(t,e)=>{let r=e?new URL(e):null;return r&&(r.pathname=`/tx/${t}`),r?.toString()??""};async function qe({network:t,address:e,proxyApiUrl:r}){return t.caipId?{transactions:(await He({isTestnet:!!t.isTestnet,address:e,proxyApiUrl:r})).map(({txHash:s,tx:o})=>{if(!o.meta)return null;let{meta:i,transaction:{message:c}}=o,p=c.accountKeys.map(g=>g.toString()),y=p.indexOf(e),l=y<c.header.numRequiredSignatures,d=Ve(p,y,{paidFee:l?Number(i.fee):0,preBalances:i.preBalances.map(Number),postBalances:i.postBalances.map(Number),preTokenBalances:(i.preTokenBalances??[]).map(ce),postTokenBalances:(i.postTokenBalances??[]).map(ce)},t);return {hash:s,txType:l?vmModuleTypes.TransactionType.SEND:vmModuleTypes.TransactionType.RECEIVE,gasUsed:String(o.meta.computeUnitsConsumed??"0"),tokens:d,from:d[0]?.from?.address??p[0],to:d[0]?.to?.address??(l?"":e),isOutgoing:l,isIncoming:!l,isSender:l,timestamp:Number(o.blockTime),isContractCall:!1,gasPrice:String(Number(o.meta.fee)/Number(o.meta.computeUnitsConsumed)),chainId:String(t.chainId),explorerLink:ze(s,t.explorerUrl)}}).filter(s=>s!==null)}:Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}function K(t){return t.ins.length===0&&t.outs.length===0}function Y(t){return t!=null}var X=(t,e,r,n)=>{if(!(!kit.isInstructionForProgram(t,system.SYSTEM_PROGRAM_ADDRESS)||!kit.isInstructionWithAccounts(t)||!kit.isInstructionWithData(t)))try{if(system.identifySystemInstruction(t)!==system.SystemInstruction.TransferSol)return null;let{accounts:s,data:o}=system.parseTransferSolInstruction({...t,data:Uint8Array.from(t.data)}),c=s.source.address===r===!0?"outs":"ins";return e[c].push({token:{...n,address:""},items:[{displayValue:new coreUtilsSdk.TokenUnit(o.amount,n.decimals,"").toString(),usdPrice:void 0}]}),{title:"Native Transfer",items:[E("From",s.source.address),E("To",s.destination.address)]}}catch{return null}};var Ht=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}},J=async(t,e,r,n,a)=>{if(!(!a?.length||!kit.isInstructionWithAccounts(e)||!kit.isInstructionWithData(e)))try{if(token.identifyTokenInstruction(e)!==token.TokenInstruction.Transfer)return null;let{accounts:o,data:i}=token.parseTransferInstruction({...e,data:Uint8Array.from(e.data)}),c=await Ht(t,o.source.address);if(!c)return null;let p=a.find(d=>d.address.toLowerCase()===c.toLowerCase());if(!p)return null;let l=(o.source.address===n||o.authority.address===n)===!0?"outs":"ins";return r[l].push({token:p,items:[{displayValue:new coreUtilsSdk.TokenUnit(i.amount,p.decimals,"").toString(),usdPrice:void 0}]}),{title:`Transfer ${p.symbol}`,items:[E("From",o.source.address),E("To",o.destination.address)]}}catch{return null}};var zt=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()}),Gt=zod.z.tuple([zt]),je=t=>Gt.safeParse(t);var Ke=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:a}=t,{data:s,success:o,error:i}=je(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let[{account:c,serializedTx:p,sendOptions:y}]=s,l=A({isTestnet:!!e.isTestnet,proxyApiUrl:n}),d=await coreWalletsSdk.deserializeTransactionMessage(p,l),g={ins:[],outs:[]},P=await Promise.allSettled(d.instructions.map(async x=>X(x,g,c,e.networkToken)??await J(l,x,g,c,e.tokens)??null)).then(x=>x.filter(_).map(U=>U.value).filter(Y)),T={title:"Approve Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:[V("Raw Data",p)]},...P],balanceChange:K(g)?void 0:g,networkFeeSelector:!1,isSimulationSuccessful:!1},u={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION,account:c,data:p},S=await r.requestApproval({request:t,displayData:T,signingData:u});if("error"in S)return {error:S.error};let h;try{h=await Wt(l,S,y);}catch(x){return console.error(x),{error:rpcErrors.rpcErrors.internal({message:"Unable to get transaction hash",data:{cause:x}})}}return {result:h}},Wt=async(t,e,r)=>"txHash"in e?e.txHash:await t.sendTransaction(e.signedData,{...r,encoding:"base64"}).send();var Kt=zod.z.object({account:zod.z.string(),serializedTx:zod.z.string().base64()}),Yt=zod.z.tuple([Kt]),Ye=t=>Yt.safeParse(t);var Je=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:a}=t,{data:s,success:o,error:i}=Ye(a);if(!o)return console.error("invalid params",i),{error:rpcErrors.rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let[{account:c,serializedTx:p}]=s,y=A({isTestnet:!!e.isTestnet,proxyApiUrl:n}),l=await coreWalletsSdk.deserializeTransactionMessage(p,y),d={ins:[],outs:[]},g=await Promise.allSettled(l.instructions.map(async S=>X(S,d,c,e.networkToken)??await J(y,S,d,c,e.tokens)??null)).then(S=>S.filter(_).map(h=>h.value).filter(Y)),P={title:"Sign Transaction",network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},details:[{title:"Transaction Details",items:[V("Raw Data",p)]},...g],balanceChange:K(d)?void 0:d,networkFeeSelector:!1,isSimulationSuccessful:!1},T={type:vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION,account:c,data:p},u=await r.requestApproval({request:t,displayData:P,signingData:T});return "error"in u?{error:u.error}:"signedData"in u?{result:u.signedData}:{error:rpcErrors.rpcErrors.invalidRequest("No signed data returned")}};var k,C,H,et=class{constructor({approvalController:e,environment:r,appInfo:n}){chunkTKL4UUHE_cjs.c(this,k,void 0);chunkTKL4UUHE_cjs.c(this,C,void 0);chunkTKL4UUHE_cjs.c(this,H,void 0);let{proxyApiUrl:a}=Se(r);chunkTKL4UUHE_cjs.d(this,H,n),chunkTKL4UUHE_cjs.d(this,k,a),chunkTKL4UUHE_cjs.d(this,C,e),chunkTKL4UUHE_cjs.b(this,k),chunkTKL4UUHE_cjs.b(this,C),chunkTKL4UUHE_cjs.b(this,H);}async getProvider(e){return A({isTestnet:!!e.isTestnet,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getAddress(){return Promise.resolve({})}buildDerivationPath(e){return G(e)}deriveAddress(e){return xe({...e,approvalController:chunkTKL4UUHE_cjs.b(this,C)})}getBalances(e){let r=new M({storage:e.storage,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)});return Fe({...e,tokenService:r,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getManifest(){let e=vmModuleTypes.parseManifest(Pe);return e.success?e.data:void 0}getNetworkFee(e){return we(e,chunkTKL4UUHE_cjs.b(this,k))}getTransactionHistory(e){return qe({network:e.network,address:e.address,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)})}getTokens(e){return e.caipId?De({caip2Id:e.caipId,proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k)}):Promise.reject({error:rpcErrors.rpcErrors.invalidParams("Network must have a CAIP-2 id")})}async onRpcRequest(e,r){switch(e.method){case vmModuleTypes.RpcMethod.SOLANA_SIGN_TRANSACTION:return Je({approvalController:chunkTKL4UUHE_cjs.b(this,C),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e});case vmModuleTypes.RpcMethod.SOLANA_SIGN_AND_SEND_TRANSACTION:return Ke({approvalController:chunkTKL4UUHE_cjs.b(this,C),proxyApiUrl:chunkTKL4UUHE_cjs.b(this,k),network:r,request:e})}return {error:rpcErrors.rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}};k=new WeakMap,C=new WeakMap,H=new WeakMap;
|
|
15
16
|
|
|
16
|
-
exports.SvmModule =
|
|
17
|
+
exports.SvmModule = et;
|
|
17
18
|
//# sourceMappingURL=out.js.map
|
|
18
19
|
//# sourceMappingURL=index.cjs.map
|