UNPKG

@luffalab/luffa-evm-sdk

Version:

luffa evm ts sdk

2 lines 8.22 kB
import{a as h,b as f,c as g,d as A,e as E,f as v,g as T,j as D}from"./chunk-QHCG6R3O.mjs";import{a}from"./chunk-V57JCP3U.mjs";import{v4 as I}from"uuid";var C=(d=>(d.CONNECT="connect",d.GETACCOUNT="getAccount",d.DISCONNECT="disconnect",d.CURRENT_CHAIN="currentChain",d.NETWORK_CHANGE="luffa_switchChain",d.SIGN_MESSAGE="signMessage",d.SEND_TRANSACTION="sendTransaction",d.SIGN_AND_SUBMIT_TRANSACTION="signAndSubmitTransaction",d.SIGN_TRANSACTION="signTransaction",d.SIGN_BUILD_TRANSACTION="signBuildTransaction",d.EVM_APPROVE="evmApprove",d.ACCOUNT_CHANGE="accountChange",d))(C||{}),r=class r{constructor(e){a(this,"message",null);a(this,"_metadata",{});a(this,"_initData",{});a(this,"accountAddress",null);a(this,"request",(e,t)=>{switch(e.method){case"eth_requestAccounts":return this.connect();case"eth_accounts":return this.getAccount();case"eth_chainId":return this.currentChain();case"wallet_switchEthereumChain":return this.luffa_switchChain(e);case"eth_sendTransaction":return this.sendTransaction(e);case"personal_sign":return this.signMessage(e);case"wallet_revokePermissions":return this.disconnect();default:throw new Error("Unsupported method: "+e.method)}});a(this,"luffa_switchChain",e=>new Promise(t=>{let s=E(e?.params[0]?.chainId);this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"luffa_switchChain",metadata:this._metadata,data:{targetNet:s}},n=>{n?.network&&(this._initData.network=n.network);let o={...n};t(o)})}));a(this,"currentChain",()=>new Promise(e=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"currentChain",metadata:this._metadata,data:{}},t=>{if(t?.network){this._initData.network=t?.network;let s=`0x${v(t?.network)?.toString(16)}`;e(s)}else e({status:"Rejected"})})}));a(this,"getAccount",()=>new Promise(e=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"getAccount",metadata:this._metadata,data:{}},t=>{t?.account?(this.accountAddress=t.account,e([t.account])):e([])})}));a(this,"connect",()=>new Promise((e,t)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"connect",metadata:this._metadata,data:{}},s=>{let n;s?.account?(this.accountAddress=s.account,n=[s.account],e(n)):(n={code:4001,message:"User rejected the request."},t(n))})}));a(this,"disconnect",e=>new Promise((t,s)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"disconnect",metadata:this._metadata,data:{}},n=>{this.accountAddress=null,e&&e(n),t()})}));a(this,"on",(e,t)=>{this.message?.addListener&&this.message?.addListener(e,t)});a(this,"off",(e,t)=>{this.message?.removeListener&&this.message?.removeListener(e,t)});a(this,"signAndSubmitTransaction",async(e,t="signAndSubmitTransaction")=>{if(!this.accountAddress){let s=await this.connect();this.accountAddress=s[0]}return new Promise(async(s,n)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:t,metadata:this._metadata,data:e.params[0]},o=>{o?.hash?s(o.hash):n({code:4001,message:o?.message})})})});a(this,"signTransaction",(e,t="signBuildTransaction")=>new Promise(async(s,n)=>{let o={raw_data_hex:e.raw_data_hex};e.to&&(o.to=e.to),this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:t,metadata:this._metadata,data:o},N=>{let u=N?.signature?.split(",")||[];if(Array.isArray(u)&&u.length>0){let m={...e,signature:u};s(m)}else n("Confirmation declined by user")})}));a(this,"signMessage",(e,t)=>new Promise(async s=>{this.accountAddress||await this.connect(),this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signMessage",metadata:this._metadata,data:{message:D(e.params[0])}},n=>{if(n?.signature){let o={status:"Approved",args:n};s(o)}else{let o={status:"Rejected",message:n?.message};s(o)}t&&t(n)})}));a(this,"onAccountChange",e=>{this.on("accountChange",e)});a(this,"onNetworkChange",e=>{this.on("luffa_switchChain",e)});if(r._instance)return r._instance;this.message=new p,this.getMetadata(),this.initConfig(e),r._instance=this}initConfig(e){this._initData.callbackWalletName="evmWallet",this._initData.network=e.network;let t=Object.freeze({isMetaMask:!1,request:this.request,on:this.on,removeListener:this.off});Object.defineProperty(globalThis,"ethereum",{value:t,writable:!1});function s(){let n={uuid:I(),name:"LuffaEvmWallet",icon:"",rdns:"org.luffa.wallet"};window.dispatchEvent(new CustomEvent("eip6963:announceProvider",{detail:Object.freeze({info:n,provider:t})}))}window.addEventListener("eip6963:requestProvider",()=>{s()}),s()}async sendTransaction(e){if(!this.accountAddress){let n=await this.connect();this.accountAddress=n[0]}let{isApprove:t,spender:s}=T(e.params[0].data);return t?(e.to=s,this.signAndSubmitTransaction(e,"evmApprove")):this.signAndSubmitTransaction(e)}getMetadata(){if(!window)return;let t=(document.querySelector('link[rel="icon"]')||document.querySelector('link[rel="shortcut icon"]'))?.getAttribute("href")||"";t&&!t.startsWith("http")&&(t=new URL(t,window.location.origin).href),this._metadata.title=window.document.title,this._metadata.url=window.location.href,this._metadata.origin=window.location.origin,this._metadata.icon=t}};a(r,"version","1.0.8"),a(r,"_instance"),a(r,"getIninData",()=>r._instance?r._instance._initData:{}),a(r,"getAccountAddress",()=>r._instance?r._instance.accountAddress:null),a(r,"setAccountAddress",e=>{r._instance&&(r._instance.accountAddress=e)});var c=r;var l=class l{constructor(){a(this,"callbacks",{});a(this,"listeners",{});a(this,"receive",e=>{let t=e.data.methodName;switch(this.callbacks[e.data.uuid+t]&&(this.callbacks[e.data.uuid+t](e.data.data),delete this.callbacks[e.data.uuid+t]),t){case"luffa_switchChain":{let s=e.data.data.network;if(!s)break;g()&&(s=e.data.data),this.emit(t,s),this.emit("chainChanged",`0x${v(s)?.toString(16)}`);break}case"connect":this.emit(t,[e?.data?.data?.account]);break;case"accountChange":{e?.data?.data?.account?(c.setAccountAddress(e.data.data.account),this.emit("accountsChanged",[e?.data?.data?.account])):c.setAccountAddress(null);break}case"disconnect":{c.setAccountAddress(null),this.emit(t,e.data.data),this.emit("accountsChanged",[]);break}default:this.emit(t,e.data.data);break}});a(this,"addListener",(e,t)=>{this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)});a(this,"removeListener",(e,t)=>{if(t){let s=this.listeners[e]?.indexOf(t)??-1;s>-1&&this.listeners?.[e]?.splice(s,1)}else this.listeners[e]=[]});a(this,"emit",(e,t)=>{this.listeners?.[e]?.forEach(s=>s(t))});a(this,"sendMessage",(e,t)=>{try{if(h()){this.sendLuffaMessage(e,t);return}if(g()||f()){this.sendMiniProgramMessage(e,t);return}}catch{}});if(l._instance)return l._instance;l._instance=this,h()&&(window.evmWallet={sendResponse:this.sendResponse.bind(this)})}sendLuffaMessage(e,t){let s=e?.initData||c.getIninData();e.initData={...s||{},network:A[s.network]??s.network},e.from=c.getAccountAddress(),t&&(this.callbacks[e.uuid+e.methodName]=t),window?._evmWallet?window._evmWallet?.sendMessage(JSON.stringify(e)):window?.webkit&&window?.webkit?.messageHandlers?._evmWallet&&window.webkit.messageHandlers._evmWallet?.postMessage(e)}sendResponse(e){let t=JSON.parse(e);this.receive({data:t})}sendMiniProgramMessage(e,t){let s="invokeNativePlugin",n=c.getAccountAddress(),o=c.getIninData(),u={api_name:"luffaWebRequest",data:{func:e.methodName,chainType:"endless",...e,initData:{...o,network:A[o.network]??o.network},from:n}},m=i=>{t&&t({status:"success",...i.data||{}})},w=i=>{t&&t({status:"error",...i.data||{}})};switch(e.methodName){case"connect":case"getAccount":m=i=>{c.setAccountAddress(i.data.account),t&&t({account:i?.data?.address||"",...i.data||{}})};break;case"signMessage":case"signTransaction":case"signBuildTransaction":case"signAndSubmitTransaction":case"evmApprove":m=i=>{t&&t({status:"success",...i.data||{}})},w=i=>{t&&t({status:"error",...i.data||{}})};break;default:break}g()?wx[s]({...u,complete:i=>{i.status===void 0?t&&t({...i}):i.status==="success"?(m(i),this.receive({data:i})):w(i)}}):f()&&window.WeixinJSBridge?.invoke(s,u,i=>{i.status===void 0?t&&t({...i}):i.status==="success"?(m(i),this.receive({data:i})):w(i)})}};a(l,"_instance");var p=l;export{p as a,C as b,c}; //# sourceMappingURL=chunk-P7FRC4SV.mjs.map