@avalabs/evm-module 1.4.2 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -31,7 +31,7 @@ Message
|
|
|
31
31
|
`;return e},Er=t=>{let e="";return t.forEach(r=>{e+=`${r.name}:
|
|
32
32
|
`,e+=`${$(String(r.value))}
|
|
33
33
|
|
|
34
|
-
`;}),e},$=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var ye=z$1.string().describe("message"),C=z$1.string().describe("address");var br=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([C,ye])});var Rr=z$1.object({name:z$1.string(),type:z$1.string()}),ne=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Rr)}).catchall(z$1.array(Rr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),mt=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),dt=ne.or(mt),Pr=z$1.union([z$1.string().describe("data string"),ne]),Sr=z$1.union([z$1.string().describe("data string"),dt]),Ir=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([C,Sr])}),xr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([C,Sr])}),Ar=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([C,Pr])}),wr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([C,Pr])});var Cr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([ye,C]),z$1.tuple([ye,C,z$1.string().optional().describe("password")])])});var ua=z$1.discriminatedUnion("method",[Cr,br,Ir,xr,Ar,wr]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:dt.parse(o),address:s,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:ne.parse(o),address:s,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Nr(t){return ua.safeParse(t)}var _r=t=>mt.safeParse(t).success,Mc=t=>ne.safeParse(t).success;var Br=t=>{try{let{EIP712Domain:e,...r}=t.types;return TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Dr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=Nr({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:i}=s.data,c;(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Br(o));let l,p,m,d;if(c&&!c.isValid&&(d={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===RpcMethod.ETH_SIGN)l={type:a,account:i,data:o},p=o,m="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(a===RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:o},p=toUtf8String(o);else if(a===RpcMethod.SIGN_TYPED_DATA||a===RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:o},p=_r(o)?Er(o):lt(o);else if(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:o};let{types:v,primaryType:E,...T}=o;p=lt(T);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let u=await nr({request:t,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:a,params:t.params},dAppUrl:t.dappInfo.url}),g={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[p]}],disclaimer:m,alert:u?.alert??d,balanceChange:u?.balanceChange,tokenApprovals:u?.tokenApprovals},y=await r.requestApproval({request:t,displayData:g,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Ur=async(t,e)=>{try{return {result:await(await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Fr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var se,He=class{constructor(e){this.baseUrl=e;c(this,se,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/all_token_list?id=${r}&chain_ids=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,se).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,se)}};se=new WeakMap;var B,Te,ft,We=class{constructor({proxyApiUrl:e}){c(this,Te);c(this,B,void 0);d(this,B,new He(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,B).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:s,chainIdString:a}=await e(this,Te,ft).call(this,e$1),o=s.native_token_id,i=await b(this,B).getTokenBalance({address:r,chainId:a,tokenId:o}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await Fe()).usd[n.toLowerCase()],d=m?m*i.price:void 0,u=d?c.mul(d).toDisplay({fixedDp:2}):void 0,g=d?c.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:s,chainIdString:a}=await e(this,Te,ft).call(this,e$1),o=await b(this,B).getTokensBalanceOnChain({chainId:a,address:r}),i={},c=await Fe();for(let l of o){if(l.id===s.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=c.usd[n.toLowerCase()],u=d?d*l.price:void 0,g=u?p.mul(u).toDisplay({fixedDp:2}):void 0,y=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;i[l.id]={chainId:s.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:m,balanceInCurrency:y,priceInCurrency:u,type:TokenType.ERC20,reputation:null};}return i}async listNftBalances(){return {}}};B=new WeakMap,Te=new WeakSet,ft=async function(e){let n=(await b(this,B).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let s=await b(this,B).getChainInfo({chainId:n});if(!s)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:s,chainIdString:n}};var ba=z$1.tuple([z,z]).rest(z).refine(t=>yt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>yt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Pa(t,"nonce")||Ra(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ra(t,e){return !yt(t,e)}function Pa(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function yt(t,e){return new Set(t.map(n=>n[e])).size===1}var Hr=t=>ba.safeParse(t);var Or=async(t,e)=>{if(t[0].nonce)return;let r=await Se({from:t[0].from,provider:e});return Promise.all(t.map(async(n,s)=>{n.nonce=String(r+s);}))};var $e=new Map,Wr=(t,e,r)=>($e.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s},a)=>{let o=$e.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,m)=>{if(a===void 0||a===m){let{signingData:d}=p;return {signingData:{...d,data:{...d.data,maxFeePerGas:n??d.data.maxFeePerGas,maxPriorityFeePerGas:s??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return $e.set(t,l),l},cleanup:()=>$e.delete(t)});var jr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:a,populateMissingGas:o})=>{let i;try{i=await Wt({proxyApiUrl:s,chainId:n,params:r,domain:e,withGasEstimation:o});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:U[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,g)=>{let y=r[g],v=await at({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:u});return o&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=Ia(c),m=Aa(c),d=xa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},Ia=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},xa=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(s=>{let a=r.approvals.find(o=>s.token.address===o.token.address&&s.spenderAddress===o.spenderAddress);if(!a){r.approvals.push({...s});return}a.value=s.value,a.usdPrice=s.usdPrice;}),r),{approvals:[],isEditable:!1});return wa(e,t),nt(e)?void 0:e},Aa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(s=>{let a=$r(r.ins,s);a?a.items.push(...s.items):r.ins.push(s);}),n.outs.forEach(s=>{let a=$r(r.outs,s);a?a.items.push(...s.items):r.outs.push({...s});})),r),{ins:[],outs:[]});return nt(e)?void 0:e},$r=(t,e)=>t.find(r=>O(r.token)&&O(e.token)?r.token.symbol===e.token.symbol:!O(r.token)&&!O(e.token)?r.token.address===e.token.address:!1),wa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!O(a.token)&&!O(r.token)&&a.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(a=>a.spenderAddress!==r.spenderAddress&&r.token.address!==a.token.address);else {let a=n.tokenApprovals.approvals.find(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var qr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,success:o,error:i}=Hr(s);if(!o)return console.error("invalid params",i),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Or(a,c);}catch(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let l=a.every(I=>Number(I.gas)>0),{alert:p,balanceChange:m,isSimulationSuccessful:d,tokenApprovals:u,scans:g}=await jr({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:a,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l});if(!g.every(({transaction:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let v={title:"Approve Transaction Batch",details:[{title:"Transaction Details",items:[Ce("Website",t.dappInfo),J("From",a[0].from)]}],network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},isSimulationSuccessful:d,balanceChange:m,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=g.map(I=>Ne(t,e,I.transaction,I)),{cleanup:T,updateTx:k}=Wr(t.requestId,E,v),S=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in S)return {error:S.error};if(S.result.length!==a.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${S.result.length}`})};let ve=[];for(let[I,qe]of S.result.entries()){let be=I===S.result.length-1,ce=await Ue(c,qe),zr=De({provider:c,txHash:ce,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!be&&!await zr)return {error:rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};ve.push(ce);}return {result:ve}};var ie,Ee,N,L,Yr=class{constructor({approvalController:e,environment:r,appInfo:n}){c(this,ie,void 0);c(this,Ee,void 0);c(this,N,void 0);c(this,L,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=fr(r);d(this,ie,new Ve({glacierApiUrl:s,headers:ct(n)})),d(this,Ee,new We({proxyApiUrl:a})),d(this,N,a),d(this,L,e);}getProvider(e){return A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Fr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:a,tokenTypes:o}){return dr({addresses:e,currency:n,network:r,proxyApiUrl:b(this,N),customTokens:s,balanceServices:[b(this,ie),b(this,Ee)],storage:a,tokenTypes:o})}getManifest(){let e=parseManifest(Vt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:a,caipId:o}=e;return Tt({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:a?.multicall,caipId:o,proxyApiUrl:b(this,N)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:a}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return Mt({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:a,glacierService:b(this,ie)})}getTokens(e){let{chainId:r}=e;return Re({chainId:r,proxyApiUrl:b(this,N)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return or({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Xt(b(this,L))?qr({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Dr({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)});default:return Na(e.method)?Ur(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ie=new WeakMap,Ee=new WeakMap,N=new WeakMap,L=new WeakMap;var Na=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
34
|
+
`;}),e},$=t=>{let e={0:"\u{1D7EC}",1:"\u{1D7ED}",2:"\u{1D7EE}",3:"\u{1D7EF}",4:"\u{1D7F0}",5:"\u{1D7F1}",6:"\u{1D7F2}",7:"\u{1D7F3}",8:"\u{1D7F4}",9:"\u{1D7F5}",a:"\u{1D5EE}",b:"\u{1D5EF}",c:"\u{1D5F0}",d:"\u{1D5F1}",e:"\u{1D5F2}",f:"\u{1D5F3}",g:"\u{1D5F4}",h:"\u{1D5F5}",i:"\u{1D5F6}",j:"\u{1D5F7}",k:"\u{1D5F8}",l:"\u{1D5F9}",m:"\u{1D5FA}",n:"\u{1D5FB}",o:"\u{1D5FC}",p:"\u{1D5FD}",q:"\u{1D5FE}",r:"\u{1D5FF}",s:"\u{1D600}",t:"\u{1D601}",u:"\u{1D602}",v:"\u{1D603}",w:"\u{1D604}",x:"\u{1D605}",y:"\u{1D606}",z:"\u{1D607}",A:"\u{1D5D4}",B:"\u{1D5D5}",C:"\u{1D5D6}",D:"\u{1D5D7}",E:"\u{1D5D8}",F:"\u{1D5D9}",G:"\u{1D5DA}",H:"\u{1D5DB}",I:"\u{1D5DC}",J:"\u{1D5DD}",K:"\u{1D5DE}",L:"\u{1D5DF}",M:"\u{1D5E0}",N:"\u{1D5E1}",O:"\u{1D5E2}",P:"\u{1D5E3}",Q:"\u{1D5E4}",R:"\u{1D5E5}",S:"\u{1D5E6}",T:"\u{1D5E7}",U:"\u{1D5E8}",V:"\u{1D5E9}",W:"\u{1D5EA}",X:"\u{1D5EB}",Y:"\u{1D5EC}",Z:"\u{1D5ED}"};return t.split("").map(r=>e[r]||r).join("")};var ye=z$1.string().describe("message"),C=z$1.string().describe("address");var br=z$1.object({method:z$1.literal(RpcMethod.ETH_SIGN),params:z$1.tuple([C,ye])});var Rr=z$1.object({name:z$1.string(),type:z$1.string()}),ne=z$1.object({types:z$1.object({EIP712Domain:z$1.array(Rr)}).catchall(z$1.array(Rr)),primaryType:z$1.string(),domain:z$1.record(z$1.any()),message:z$1.record(z$1.any())}),mt=z$1.array(z$1.object({type:z$1.string(),name:z$1.string(),value:z$1.union([z$1.string(),z$1.number(),z$1.boolean(),z$1.object({}).passthrough(),z$1.array(z$1.unknown()),z$1.null()])})).nonempty(),dt=ne.or(mt),Pr=z$1.union([z$1.string().describe("data string"),ne]),Sr=z$1.union([z$1.string().describe("data string"),dt]),Ir=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA),params:z$1.tuple([C,Sr])}),xr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V1),params:z$1.tuple([C,Sr])}),Ar=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V3),params:z$1.tuple([C,Pr])}),wr=z$1.object({method:z$1.literal(RpcMethod.SIGN_TYPED_DATA_V4),params:z$1.tuple([C,Pr])});var Cr=z$1.object({method:z$1.literal(RpcMethod.PERSONAL_SIGN),params:z$1.union([z$1.tuple([ye,C]),z$1.tuple([ye,C,z$1.string().optional().describe("password")])])});var ua=z$1.discriminatedUnion("method",[Cr,br,Ir,xr,Ar,wr]).transform((t,e)=>{let{method:r,params:n}=t;switch(r){case RpcMethod.PERSONAL_SIGN:return {data:n[0],address:n[1],method:r};case RpcMethod.ETH_SIGN:return {data:n[1],address:n[0],method:r};case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:{let s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:dt.parse(o),address:s,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:{let s=n[0],a=n[1];if(typeof a!="string")return {data:a,address:s,method:r};try{let o=JSON.parse(a);return {data:ne.parse(o),address:s,method:r}}catch{return e.addIssue({code:z$1.ZodIssueCode.custom,message:"param is not a valid json"}),z$1.NEVER}}}});function Nr(t){return ua.safeParse(t)}var _r=t=>mt.safeParse(t).success,Mc=t=>ne.safeParse(t).success;var Br=t=>{try{let{EIP712Domain:e,...r}=t.types;return TypedDataEncoder.getPayload(t.domain,r,t.message),{isValid:!0}}catch(e){return {isValid:!1,error:e}}};var Dr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let s=Nr({method:t.method,params:t.params});if(!s.success)return console.error("invalid params",s.error),{success:!1,error:rpcErrors.invalidParams({message:"Params are invalid",data:{cause:s.error}})};let{method:a,data:o,address:i}=s.data,c;(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4)&&(c=Br(o));let l,p,m,d;if(c&&!c.isValid&&(d={type:AlertType.INFO,details:{title:"Warning: Verify Message Content",description:"This message contains non-standard elements.",detailedDescription:c.error.toString()}}),a===RpcMethod.ETH_SIGN)l={type:a,account:i,data:o},p=o,m="Signing this message can be dangerous. This signature could potentially perform any operation on your account's behalf, including granting complete control of your account and all of its assets to the requesting site. Only sign this message if you know what you're doing or completely trust the requesting site";else if(a===RpcMethod.PERSONAL_SIGN)l={type:a,account:i,data:o},p=toUtf8String(o);else if(a===RpcMethod.SIGN_TYPED_DATA||a===RpcMethod.SIGN_TYPED_DATA_V1)l={type:a,account:i,data:o},p=_r(o)?Er(o):lt(o);else if(a===RpcMethod.SIGN_TYPED_DATA_V3||a===RpcMethod.SIGN_TYPED_DATA_V4){l={type:a,account:i,data:o};let{types:v,primaryType:E,...T}=o;p=lt(T);}if(!l||!p)return {success:!1,error:rpcErrors.internal("Unable to generate signing data")};let u=await nr({request:t,proxyApiUrl:n,accountAddress:i,chainId:e.chainId,data:{method:a,params:t.params},dAppUrl:t.dappInfo.url}),g={title:"Sign Message",dAppInfo:{name:t.dappInfo.name,action:`${t.dappInfo.name} requests you to sign the following message`,logoUri:t.dappInfo.icon},network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},account:i,details:[{title:"Message",items:[p]}],disclaimer:m,alert:u?.alert??d,balanceChange:u?.balanceChange,tokenApprovals:u?.tokenApprovals},y=await r.requestApproval({request:t,displayData:g,signingData:l});return "error"in y?{error:y.error}:"signedData"in y?{result:y.signedData}:{error:rpcErrors.internal("No signed data returned")}};var Ur=async(t,e)=>{try{return {result:await(await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})).send(t.method,t.params)}}catch(r){let n=r.info?.error?.message||r.error?.message||r.message;return {error:rpcErrors.internal(n)}}};var Fr=async({accountIndex:t,xpub:e,walletType:r})=>{switch(r){case WalletType.Mnemonic:case WalletType.Ledger:case WalletType.Keystone:return {[NetworkVMType.EVM]:getAddressFromXPub(e,t)};case WalletType.LedgerLive:case WalletType.Seedless:{let n=Buffer.from(e,"hex");return {[NetworkVMType.EVM]:getEvmAddressFromPubKey(n)}}default:throw rpcErrors.invalidParams(`Unsupported wallet type: ${r}`)}};var se,He=class{constructor(e){this.baseUrl=e;c(this,se,[]);}async isNetworkSupported(e){return (await this.getChainList()).map(s=>s.community_id).some(s=>s===e)}async getChainInfo({chainId:e}){return (await this.getChainList()).find(n=>n.id===e)}async getTokenBalance({chainId:e,address:r,tokenId:n}){let s=await fetch(`${this.baseUrl}/v1/user/token?id=${r}&chain_id=${e}&token_id=${n}`);if(s.ok)return await s.json();throw new Error(`${s.status}:${s.statusText}`)}async getTokensBalanceOnChain({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getTokenList({chainId:e,address:r}){let n=await fetch(`${this.baseUrl}/v1/user/token_list?id=${r}&chain_id=${e}`);if(n.ok)return await n.json();throw new Error(`${n.status}:${n.statusText}`)}async getChainList(){if(b(this,se).length===0){let e=await fetch(`${this.baseUrl}/v1/chain/list`);if(e.ok)d(this,se,await e.json());else throw new Error(`${e.status}:${e.statusText}`)}return b(this,se)}};se=new WeakMap;var B,Te,ft,We=class{constructor({proxyApiUrl:e}){c(this,Te);c(this,B,void 0);d(this,B,new He(`${e}/proxy/debank`));}async isNetworkSupported(e){return b(this,B).isNetworkSupported(e)}async getNativeBalance({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("getNativeBalance: not valid address: "+r);let{chainInfo:s,chainIdString:a}=await e(this,Te,ft).call(this,e$1),o=s.native_token_id,i=await b(this,B).getTokenBalance({address:r,chainId:a,tokenId:o}),c=new TokenUnit(i.raw_amount,i.decimals,i.symbol),l=c.toDisplay(),m=(await Fe()).usd[n.toLowerCase()],d=m?m*i.price:void 0,u=d?c.mul(d).toDisplay({fixedDp:2}):void 0,g=d?c.mul(d).toDisplay({fixedDp:2,asNumber:!0}):void 0;return {name:i.name,symbol:i.symbol,decimals:i.decimals,type:TokenType.NATIVE,logoUri:i.logo_url,balance:c.toSubUnit(),balanceDisplayValue:l,balanceInCurrency:g,balanceCurrencyDisplayValue:u,priceInCurrency:d}}async listErc20Balances({chainId:e$1,address:r,currency:n}){if(!isHexString(r))throw rpcErrors.invalidParams("listErc20Balances: not valid address");let{chainInfo:s,chainIdString:a}=await e(this,Te,ft).call(this,e$1),o=await b(this,B).getTokensBalanceOnChain({chainId:a,address:r}),i=await Fe(),c={};for(let l of o){if(l.id===s.native_token_id||l.is_core===!1)continue;let p=new TokenUnit(l.raw_amount,l.decimals,l.symbol),m=p.toDisplay(),d=i.usd[n.toLowerCase()],u=d?d*l.price:void 0,g=u?p.mul(u).toDisplay({fixedDp:2}):void 0,y=u?p.mul(u).toDisplay({fixedDp:2,asNumber:!0}):void 0;c[l.id]={chainId:s.community_id,address:l.id,name:l.name,symbol:l.symbol,decimals:l.decimals,logoUri:l.logo_url,balance:p.toSubUnit(),balanceCurrencyDisplayValue:g,balanceDisplayValue:m,balanceInCurrency:y,priceInCurrency:u,type:TokenType.ERC20,reputation:null};}return c}async listNftBalances(){return {}}};B=new WeakMap,Te=new WeakSet,ft=async function(e){let n=(await b(this,B).getChainList()).find(a=>a.community_id===e)?.id;if(!n)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);let s=await b(this,B).getChainInfo({chainId:n});if(!s)throw rpcErrors.invalidParams("getNativeBalance: not valid chainId: "+e);return {chainInfo:s,chainIdString:n}};var ba=z$1.tuple([z,z]).rest(z).refine(t=>yt(t,"chainId"),{message:'All transactions must use the same "chainId"'}).refine(t=>yt(t,"from"),{message:'All transactions must use the same "from" address'}).refine(t=>Pa(t,"nonce")||Ra(t,"nonce"),{message:'Each transaction needs a different "nonce". Make them different, or leave them empty for all transactions.'});function Ra(t,e){return !yt(t,e)}function Pa(t,e){return t.every(r=>r[e]===void 0||r[e]==="")}function yt(t,e){return new Set(t.map(n=>n[e])).size===1}var Hr=t=>ba.safeParse(t);var Or=async(t,e)=>{if(t[0].nonce)return;let r=await Se({from:t[0].from,provider:e});return Promise.all(t.map(async(n,s)=>{n.nonce=String(r+s);}))};var $e=new Map,Wr=(t,e,r)=>($e.set(t,{signingRequests:e,displayData:r}),{updateTx:({maxFeeRate:n,maxTipRate:s},a)=>{let o=$e.get(t);if(!o)throw rpcErrors.resourceNotFound();let{signingRequests:i}=o,l={signingRequests:i.map((p,m)=>{if(a===void 0||a===m){let{signingData:d}=p;return {signingData:{...d,data:{...d.data,maxFeePerGas:n??d.data.maxFeePerGas,maxPriorityFeePerGas:s??d.data.maxPriorityFeePerGas}},displayData:p.displayData}}return p}),displayData:r};return $e.set(t,l),l},cleanup:()=>$e.delete(t)});var jr=async({rpcMethod:t,dAppUrl:e,params:r,chainId:n,proxyApiUrl:s,provider:a,populateMissingGas:o})=>{let i;try{i=await Wt({proxyApiUrl:s,chainId:n,params:r,domain:e,withGasEstimation:o});}catch(u){return console.error("simulateTransactionBatch error",u),{isSimulationSuccessful:!1,alert:U[AlertType.WARNING],scans:[]}}let c=await Promise.all(i.map(async(u,g)=>{let y=r[g],v=await at({chainId:n,params:r[g],provider:a,rpcMethod:t,simulationResult:u});return o&&!y.gas&&v.estimatedGasLimit&&(y.gas=`0x${v.estimatedGasLimit.toString(16)}`),{transaction:y,...v}})),l=c.every(u=>u.isSimulationSuccessful),p=Ia(c),m=Aa(c),d=xa(c);return {isSimulationSuccessful:l,alert:p,balanceChange:m,tokenApprovals:d,scans:c.map(u=>(u.tokenApprovals&&(u.tokenApprovals.isEditable=!1),u))}},Ia=t=>{let e={[AlertType.INFO]:0,[AlertType.WARNING]:1,[AlertType.DANGER]:2};return t.reduce((r,{alert:n})=>n&&(!r||e[n.type]>e[r.type])?n:r,void 0)},xa=t=>{let e=t.reduce((r,{tokenApprovals:n})=>(n&&n.approvals.forEach(s=>{let a=r.approvals.find(o=>s.token.address===o.token.address&&s.spenderAddress===o.spenderAddress);if(!a){r.approvals.push({...s});return}a.value=s.value,a.usdPrice=s.usdPrice;}),r),{approvals:[],isEditable:!1});return wa(e,t),nt(e)?void 0:e},Aa=t=>{let e=t.reduce((r,{balanceChange:n})=>(n&&(n.ins.forEach(s=>{let a=$r(r.ins,s);a?a.items.push(...s.items):r.ins.push(s);}),n.outs.forEach(s=>{let a=$r(r.outs,s);a?a.items.push(...s.items):r.outs.push({...s});})),r),{ins:[],outs:[]});return nt(e)?void 0:e},$r=(t,e)=>t.find(r=>O(r.token)&&O(e.token)?r.token.symbol===e.token.symbol:!O(r.token)&&!O(e.token)?r.token.address===e.token.address:!1),wa=(t,e)=>{for(let r of t.approvals)for(let n of e)if(!(!n.isSimulationSuccessful||!n.balanceChange||!n.balanceChange.outs.some(a=>!O(a.token)&&!O(r.token)&&a.token.address===r.token.address)))if(!n.tokenApprovals)t.approvals=t.approvals.filter(a=>a.spenderAddress!==r.spenderAddress&&r.token.address!==a.token.address);else {let a=n.tokenApprovals.approvals.find(o=>o.spenderAddress===r.spenderAddress&&o.token.address===r.token.address);if(!a)continue;r.usdPrice=a.usdPrice,r.value=a.value;}};var qr=async({request:t,network:e,approvalController:r,proxyApiUrl:n})=>{let{params:s}=t,{data:a,success:o,error:i}=Hr(s);if(!o)return console.error("invalid params",i),{error:rpcErrors.invalidParams({message:"Transaction params are invalid",data:{cause:i}})};let c=await A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3});try{await Or(a,c);}catch(I){return console.error("Unable to calculate nonce",I),{error:rpcErrors.internal({message:"Unable to calculate nonce",data:{originalError:I}})}}let l=a.every(I=>Number(I.gas)>0),{alert:p,balanceChange:m,isSimulationSuccessful:d,tokenApprovals:u,scans:g}=await jr({rpcMethod:t.method,proxyApiUrl:n,chainId:e.chainId,params:a,dAppUrl:t.dappInfo.url,provider:c,populateMissingGas:!l});if(!g.every(({transaction:I})=>Number(I.gas)>0))return console.error("Gas limit is missing in some transactions"),{error:rpcErrors.internal({message:"Gas limit is missing in some transactions"})};let v={title:"Approve Transaction Batch",details:[{title:"Transaction Details",items:[Ce("Website",t.dappInfo),J("From",a[0].from)]}],network:{chainId:e.chainId,name:e.chainName,logoUri:e.logoUri},isSimulationSuccessful:d,balanceChange:m,alert:p,tokenApprovals:u,networkFeeSelector:!0},E=g.map(I=>Ne(t,e,I.transaction,I)),{cleanup:T,updateTx:k}=Wr(t.requestId,E,v),S=await r.requestBatchApproval({request:t,signingRequests:E,displayData:v,updateTx:k});if(T(),"error"in S)return {error:S.error};if(S.result.length!==a.length)return {error:rpcErrors.internal({message:`Invalid number of signatures. Expected ${a.length}, got ${S.result.length}`})};let ve=[];for(let[I,qe]of S.result.entries()){let be=I===S.result.length-1,ce=await Ue(c,qe),zr=De({provider:c,txHash:ce,onTransactionConfirmed:r.onTransactionConfirmed,onTransactionReverted:r.onTransactionReverted,requestId:t.requestId});if(!be&&!await zr)return {error:rpcErrors.internal({message:`Transaction ${I+1} failed! Batch execution stopped`})};ve.push(ce);}return {result:ve}};var ie,Ee,N,L,Yr=class{constructor({approvalController:e,environment:r,appInfo:n}){c(this,ie,void 0);c(this,Ee,void 0);c(this,N,void 0);c(this,L,void 0);let{glacierApiUrl:s,proxyApiUrl:a}=fr(r);d(this,ie,new Ve({glacierApiUrl:s,headers:ct(n)})),d(this,Ee,new We({proxyApiUrl:a})),d(this,N,a),d(this,L,e);}getProvider(e){return A({chainId:e.chainId,chainName:e.chainName,rpcUrl:e.rpcUrl,multiContractAddress:e.utilityAddresses?.multicall,pollingInterval:1e3})}getAddress({accountIndex:e,xpub:r,walletType:n}){return Fr({accountIndex:e,xpub:r,walletType:n})}getBalances({addresses:e,network:r,currency:n,customTokens:s,storage:a,tokenTypes:o}){return dr({addresses:e,currency:n,network:r,proxyApiUrl:b(this,N),customTokens:s,balanceServices:[b(this,ie),b(this,Ee)],storage:a,tokenTypes:o})}getManifest(){let e=parseManifest(Vt);return e.success?e.data:void 0}getNetworkFee(e){let{chainId:r,chainName:n,rpcUrl:s,utilityAddresses:a,caipId:o}=e;return Tt({chainId:r,chainName:n,rpcUrl:s,multiContractAddress:a?.multicall,caipId:o,proxyApiUrl:b(this,N)})}getTransactionHistory(e){let{network:r,address:n,nextPageToken:s,offset:a}=e,{chainId:o,isTestnet:i,networkToken:c,explorerUrl:l=""}=r;return Mt({chainId:o,isTestnet:i,networkToken:c,explorerUrl:l,address:n,nextPageToken:s,offset:a,glacierService:b(this,ie)})}getTokens(e){let{chainId:r}=e;return Re({chainId:r,proxyApiUrl:b(this,N)})}async onRpcRequest(e,r){switch(e.method){case RpcMethod.ETH_SEND_TRANSACTION:return or({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)});case RpcMethod.ETH_SEND_TRANSACTION_BATCH:return Xt(b(this,L))?qr({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)}):{error:rpcErrors.methodNotSupported(`Method ${e.method} requires BatchApprovalController`)};case RpcMethod.PERSONAL_SIGN:case RpcMethod.ETH_SIGN:case RpcMethod.SIGN_TYPED_DATA:case RpcMethod.SIGN_TYPED_DATA_V1:case RpcMethod.SIGN_TYPED_DATA_V3:case RpcMethod.SIGN_TYPED_DATA_V4:return Dr({request:e,network:r,approvalController:b(this,L),proxyApiUrl:b(this,N)});default:return Na(e.method)?Ur(e,r):{error:rpcErrors.methodNotSupported(`Method ${e.method} not supported`)}}}};ie=new WeakMap,Ee=new WeakMap,N=new WeakMap,L=new WeakMap;var Na=t=>t.startsWith("eth_")||["web3_clientVersion","web3_sha3","net_version","net_peerCount","net_listening"].includes(t);
|
|
35
35
|
|
|
36
36
|
export { H as ERC20TransactionType, Yr as EvmModule, Ut as NonContractCallTypes, K as addIdToPromise, Mc as isTypedData, _r as isTypedDataV1, X as settleAllIdPromises };
|
|
37
37
|
//# sourceMappingURL=out.js.map
|