@luffalab/luffa-tron-sdk
Version:
luffa tron ts sdk
2 lines • 7.96 kB
JavaScript
import{a as h,b as T,c as u,d as w,f as N,g as E,j as S}from"./chunk-5QPZS5ET.mjs";import{a as s}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){s(this,"message",null);s(this,"_metadata",{});s(this,"_initData",{});s(this,"accountAddress",null);s(this,"_wallet",null);s(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)});s(this,"getAccount",()=>new Promise(e=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"getAccount",metadata:this._metadata,data:{}},t=>{if(t?.account)this._wallet.setAddress(t.account),this.accountAddress=t.account,e([t.account]);else{let n={status:"Rejected",message:t?.message||"Wallet is not connected"};e([])}})}));s(this,"connect",()=>new Promise((e,t)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"connect",metadata:this._metadata,data:{}},n=>{let i;n?.account?(this._wallet.setAddress(n.account),this.accountAddress=n.account,i=[n.account],e(i)):(i={code:4001,message:"User rejected the request."},t(i))})}));s(this,"disconnect",e=>new Promise((t,n)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"disconnect",metadata:this._metadata,data:{}},i=>{this.accountAddress=null,e&&e(i),t()})}));s(this,"on",(e,t)=>{this.message?.addListener&&this.message?.addListener(e,t)});s(this,"off",(e,t)=>{this.message?.removeListener&&this.message?.removeListener(e,t)});s(this,"signAndSubmitTransaction",e=>new Promise(async t=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signAndSubmitTransaction",metadata:this._metadata,data:e},n=>{n?.hash?t(n.hash):t({code:4001,message:n?.message})})}));s(this,"signTransaction",(e,t="signBuildTransaction")=>new Promise(async(n,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},A=>{let l=A?.signature?.split(",")||[];if(Array.isArray(l)&&l.length>0){let g={...e,signature:l};n(g)}else i("Confirmation declined by user")})}));s(this,"signMessage",(e,t)=>new Promise(async n=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signMessage",metadata:this._metadata,data:{message:S(e)}},i=>{if(i?.signature){let c={status:"Approved",args:i};n(c)}else{let c={status:"Rejected",message:i?.message};n(c)}t&&t(i)})}));s(this,"onAccountChange",e=>{this.on("accountChange",e)});s(this,"onNetworkChange",e=>{this.on("luffa_switchChain",e)});if(o._instance)return o._instance;this.message=new p,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 n=>{switch(n.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||await this.connect(),typeof e=="string")return this.signMessage(e);let{isApprove:t,spender:n}=E(e);return t?(e.to=n,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}};s(o,"version","1.0.5"),s(o,"_instance"),s(o,"getIninData",()=>o._instance?o._instance._initData:{}),s(o,"getAccountAddress",()=>o._instance?o._instance.accountAddress:null),s(o,"setAccountAddress",e=>{o._instance&&(o._instance?._wallet?.setAddress(e),o._instance.accountAddress=e)});var d=o;var f=class f{constructor(){s(this,"callbacks",{});s(this,"listeners",{});s(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 n=e.data.data.network;if(!n)break;u()&&(n=e.data.data),this.emit(t,n),this.emit("chainChanged",`0x${N(n)?.toString(16)}`);break}case"connect":case"accountChange":{let n={...e.data.data};e?.data?.data?.account?d.setAccountAddress(e.data.data.account):d.setAccountAddress(null),this.emit(t,n);break}case"disconnect":{d.setAccountAddress(null),this.emit(t,e.data.data);break}default:this.emit(t,e.data.data);break}});s(this,"addListener",(e,t)=>{this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)});s(this,"removeListener",(e,t)=>{if(t){let n=this.listeners[e]?.indexOf(t)??-1;n>-1&&this.listeners?.[e]?.splice(n,1)}else this.listeners[e]=[]});s(this,"emit",(e,t)=>{this.listeners?.[e]?.forEach(n=>n(t)),this.emitTronEvent(e,t)});s(this,"sendMessage",(e,t)=>{try{if(h()){this.sendLuffaMessage(e,t);return}if(u()||T()){this.sendMiniProgramMessage(e,t);return}}catch{}});if(f._instance)return f._instance;f._instance=this,h()&&(window.tronWallet={sendResponse:this.sendResponse.bind(this)})}emitTronEvent(e,t){if(typeof window>"u"||!window.tron)return;let n;switch(e){case"connect":case"accountChange":n={action:"accountsChanged",data:{address:t?.account||t?.address}};break;case"disconnect":n=void 0;break;default:n=t;break}try{let i=new MessageEvent("message",{data:{isTronLink:!0,message:n}});window.dispatchEvent(i)}catch{}}sendLuffaMessage(e,t){let n=e?.initData||d.getIninData();e.initData={...n||{},network:w[n.network]??n.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 n="invokeNativePlugin",i=d.getAccountAddress(),c=d.getIninData(),l={api_name:"luffaWebRequest",data:{func:e.methodName,chainType:"endless",...e,initData:{...c,network:w[c.network]??c.network},from:i}},g=a=>{t&&t({status:"success",...a.data||{}})},m=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||{}})},m=a=>{t&&t({account:""})};break;case"signMessage":case"signTransaction":case"signBuildTransaction":case"signAndSubmitTransaction":case"evmApprove":g=a=>{t&&t({status:"success",...a.data||{}})},m=a=>{t&&t({status:"error",...a.data||{}})};break;default:break}u()?wx[n]({...l,complete:a=>{a.status===void 0?t&&t({...a}):a.status==="success"?(g(a),this.receive({data:a})):m(a)}}):T()&&window.WeixinJSBridge?.invoke(n,l,a=>{a.status===void 0?t&&t({...a}):a.status==="success"?(g(a),this.receive({data:a})):m(a)})}};s(f,"_instance");var p=f;export{p as a,D as b,d as c};
//# sourceMappingURL=chunk-NKC7AZW7.mjs.map