@luffalab/luffa-tron-sdk
Version:
luffa tron ts sdk
2 lines • 7.59 kB
JavaScript
import{a as h,b as p,c as u,d as A,f as T,g as N}from"./chunk-BIJX3X54.mjs";import{a as n}from"./chunk-V57JCP3U.mjs";var D=(r=>(r.CONNECT="connect",r.GETACCOUNT="getAccount",r.DISCONNECT="disconnect",r.NETWORK_CHANGE="luffa_switchChain",r.SIGN_MESSAGE="signMessage",r.SEND_TRANSACTION="sendTransaction",r.SIGN_AND_SUBMIT_TRANSACTION="signAndSubmitTransaction",r.SIGN_TRANSACTION="signTransaction",r.SIGN_BUILD_TRANSACTION="signBuildTransaction",r.EVM_APPROVE="evmApprove",r.ACCOUNT_CHANGE="accountChange",r))(D||{}),o=class o{constructor(e){n(this,"message",null);n(this,"_metadata",{});n(this,"_initData",{});n(this,"accountAddress",null);n(this,"_wallet",null);n(this,"request",(e,t)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:e.method,metadata:this._metadata,data:e.data,initData:e?.initData},t)});n(this,"getAccount",()=>new Promise(e=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"getAccount",metadata:this._metadata,data:{}},t=>{if(t?.account)this.accountAddress=t.account,e([t.account]);else{let s={status:"Rejected",message:t?.message||"Wallet is not connected"};e([])}})}));n(this,"connect",()=>new Promise((e,t)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"connect",metadata:this._metadata,data:{}},s=>{let i;s?.account?(this._wallet.setAddress(s.account),this.accountAddress=s.account,i=[s.account],e(i)):(i={code:4001,message:"User rejected the request."},t(i))})}));n(this,"disconnect",e=>new Promise((t,s)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"disconnect",metadata:this._metadata,data:{}},i=>{this.accountAddress=null,e&&e(i),t()})}));n(this,"signMessage",(e,t)=>new Promise(s=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signMessage",metadata:this._metadata,data:e},i=>{if(i?.signature){let c={status:"Approved",args:{fullMessage:e.message,signature:i.signature,publicKey:i.publicKey,nonce:"",message:e.message,prefix:"Endless"}};s(c)}else{let c={status:"Rejected",message:i?.message};s(c)}t&&t(i)})}));n(this,"on",(e,t)=>{this.message?.addListener&&this.message?.addListener(e,t)});n(this,"off",(e,t)=>{this.message?.removeListener&&this.message?.removeListener(e,t)});n(this,"signAndSubmitTransaction",e=>new Promise(async t=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signAndSubmitTransaction",metadata:this._metadata,data:e},s=>{s?.hash?t(s.hash):t({code:4001,message:s?.message})})}));n(this,"signTransaction",(e,t="signBuildTransaction")=>new Promise(async(s,i)=>{let c={raw_data_hex:e.raw_data_hex};e.to&&(c.to=e.to),this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:t,metadata:this._metadata,data:c},w=>{let l=w?.signature?.split(",")||[];if(Array.isArray(l)&&l.length>0){let g={...e,signature:l};s(g)}else i("Confirmation declined by user")})}));n(this,"onAccountChange",e=>{this.on("accountChange",e)});n(this,"onNetworkChange",e=>{this.on("luffa_switchChain",e)});if(o._instance)return o._instance;this.message=new E,this.getMetadata(),this.initConfig(e),o._instance=this}initConfig(e){if(this._initData.callbackWalletName="tronWallet",this._initData.network=e.network,u())return;this._wallet=new window.TronWeb.TronWeb(e),this._wallet.trx.sign=this.sendTransaction.bind(this),this._wallet.trx.signTransaction=this.sendTransaction.bind(this);let t=Object.freeze({isTronLink:!1,request:async s=>{switch(s.method){case"eth_requestAccounts":return this.connect();default:return{code:4200,message:"Unknown method called"}}},tronWeb:this._wallet,on:this.on,removeListener:this.off});Object.defineProperty(globalThis,"tronWeb",{value:this._wallet,writable:!1,configurable:!1,enumerable:!0}),Object.defineProperty(globalThis,"tron",{value:t,writable:!1,configurable:!1,enumerable:!0})}async sendTransaction(e){if(!this.accountAddress){let i=await this.connect();this.accountAddress=i[0]}let{isApprove:t,spender:s}=N(e);return t?(e.to=s,this.signTransaction(e,"evmApprove")):this.signTransaction(e)}changeNetwork(e){this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"luffa_switchChain",metadata:this._metadata,data:{...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}};n(o,"version","1.0.4"),n(o,"_instance"),n(o,"getIninData",()=>o._instance?o._instance._initData:{}),n(o,"getAccountAddress",()=>o._instance?o._instance.accountAddress:null),n(o,"setAccountAddress",e=>{o._instance&&(o._instance.accountAddress=e)});var d=o;var m=class m{constructor(){n(this,"callbacks",{});n(this,"listeners",{});n(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;u()&&(s=e.data.data),this.emit(t,s),this.emit("chainChanged",`0x${T(s)?.toString(16)}`);break}case"connect":case"accountChange":{let s={...e.data.data};e?.data?.data?.account?d.setAccountAddress(e.data.data.account):d.setAccountAddress(null),this.emit(t,s);break}case"disconnect":{d.setAccountAddress(null),this.emit(t,e.data.data);break}default:this.emit(t,e.data.data);break}});n(this,"addListener",(e,t)=>{this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)});n(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]=[]});n(this,"emit",(e,t)=>{this.listeners?.[e]?.forEach(s=>s(t))});n(this,"sendMessage",(e,t)=>{try{if(h()){this.sendLuffaMessage(e,t);return}if(u()||p()){this.sendMiniProgramMessage(e,t);return}}catch{}});if(m._instance)return m._instance;m._instance=this,h()&&(window.tronWallet={sendResponse:this.sendResponse.bind(this)})}sendLuffaMessage(e,t){let s=e?.initData||d.getIninData();e.initData={...s||{},network:A[s.network]??s.network},e.from=d.getAccountAddress(),t&&(this.callbacks[e.uuid+e.methodName]=t),window?._tronWallet?window._tronWallet?.sendMessage(JSON.stringify(e)):window?.webkit&&window?.webkit?.messageHandlers?._tronWallet&&window.webkit.messageHandlers._tronWallet?.postMessage(e)}sendResponse(e){let t=JSON.parse(e);this.receive({data:t})}sendMiniProgramMessage(e,t){let s="invokeNativePlugin",i=d.getAccountAddress(),c=d.getIninData(),l={api_name:"luffaWebRequest",data:{func:e.methodName,chainType:"endless",...e,initData:{...c,network:A[c.network]??c.network},from:i}},g=a=>{t&&t({status:"success",...a.data||{}})},f=a=>{t&&t({status:"error",...a.data||{}})};switch(e.methodName){case"connect":case"getAccount":g=a=>{d.setAccountAddress(a.data.account),t&&t({account:a?.data?.address||"",...a.data||{}})},f=a=>{t&&t({account:""})};break;case"signMessage":case"signTransaction":case"signBuildTransaction":case"signAndSubmitTransaction":case"evmApprove":g=a=>{t&&t({status:"success",...a.data||{}})},f=a=>{t&&t({status:"error",...a.data||{}})};break;default:break}u()?wx[s]({...l,complete:a=>{a.status===void 0?t&&t({...a}):a.status==="success"?(g(a),this.receive({data:a})):f(a)}}):p()&&window.WeixinJSBridge?.invoke(s,l,a=>{a.status===void 0?t&&t({...a}):a.status==="success"?(g(a),this.receive({data:a})):f(a)})}};n(m,"_instance");var E=m;export{E as a,D as b,d as c};
//# sourceMappingURL=chunk-TLMQS3YP.mjs.map