UNPKG

@luffalab/luffa-endless-sdk

Version:

luffa endless ts sdk

2 lines 8.58 kB
var y=Object.defineProperty;var v=(u,e,t)=>e in u?y(u,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):u[e]=t;var n=(u,e,t)=>v(u,typeof e!="symbol"?e+"":e,t);var f=(o=>(o.CONNECT="connect",o.GETACCOUNT="getAccount",o.DISCONNECT="disconnect",o.ACCOUNT_CHANGE="accountChange",o.NETWORK_CHANGE="networkChange",o))(f||{});var A=(t=>(t.APPROVED="Approved",t.REJECTED="Rejected",t))(A||{}),D=(t=>(t.SIGNATURE_ONLY="signatureOnly",t.SIGN_AND_SUBMIT="signAndSubmit",t))(D||{}),T=(t=>(t.SIMPLE="simple",t.MULTI_AGENT="multiAgent",t))(T||{});var C={mainnet:220,testnet:221,local:223,devnet:11},R={mainnet:"mainnet",testnet:"testnet"},M={mainnet:"https://rpc.endless.link/v1",testnet:"https://rpc-test.endless.link/v1",devnet:"https://rpc-testnet.endless.link/v1",local:"http://127.0.0.1:8080/v1"},w=u=>({name:R[u]??u,chainId:C[u],url:M[u]}),l=()=>window&&window?._endlessWallet!==void 0||window?.webkit?.messageHandlers?._endlessWallet!==void 0||!1,p=()=>(window&&window?.navigator?.userAgent||"").includes("miniProgram"),g=()=>window?.wx&&window?.wx?.canIUse||!1,h={mainnet:"endless",testnet:"eds"};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"networkChange":{let s=w(e.data.data.network);g()&&(s=e.data.data),this.emit(t,s);break}case"connect":case"accountChange":{let s={...e.data.data};e?.data?.data?.account?c.setAccountAddress(e.data.data.account):c.setAccountAddress(null),this.emit(t,s);break}case"disconnect":{c.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(l()){this.sendLuffaMessage(e,t);return}if(g()||p()){this.sendMiniProgramMessage(e,t);return}}catch{}});if(m._instance)return m._instance;m._instance=this,l()&&(window.endlessWallet={sendResponse:this.sendResponse.bind(this)})}sendLuffaMessage(e,t){let s=e?.initData||c.getIninData();e.initData={...s||{},network:h[s.network]??s.network},e.from=c.getAccountAddress(),t&&(this.callbacks[e.uuid+e.methodName]=t),window?._endlessWallet?window._endlessWallet?.sendMessage(JSON.stringify(e)):window?.webkit&&window?.webkit?.messageHandlers?._endlessWallet&&window.webkit.messageHandlers._endlessWallet?.postMessage(e)}sendResponse(e){let t=JSON.parse(e);this.receive({data:t})}sendMiniProgramMessage(e,t){let s="invokeNativePlugin",a=c.getAccountAddress(),o=c.getIninData(),I={api_name:"luffaWebRequest",data:{func:e.methodName,chainType:"endless",...e,initData:{...o,network:h[o.network]??o.network},from:a}},E=i=>{},d=i=>{};switch(e.methodName){case"switchNetwork":this.emit(e.methodName,e.data);return;case"disconnect":c.setAccountAddress(null),this.emit(e.methodName,void 0);case"connect":case"getAccount":E=i=>{c.setAccountAddress(i.data.account),t&&t({account:i?.data?.address||"",...i.data||{}})},d=i=>{t&&t({account:""})};break;case"signMessage":case"signBuildTransaction":case"signAndSubmitTransaction":E=i=>{t&&t({status:"success",...i.data||{}})},d=i=>{t&&t({status:"error",...i.data||{}})};break;default:E=i=>{t&&t({status:"success",...i.data||{}})},d=i=>{t&&t({status:"error",...i.data||{}})};break}g()?window.wx[s]({...I,complete:i=>{i.status==="success"?(E(i),this.receive({data:i})):d(i)}}):p()&&window.WeixinJSBridge?.invoke(s,I,i=>{i.status==="success"?(E(i),this.receive({data:i})):d(i)})}};n(m,"_instance");var N=m;var S=(d=>(d.CONNECT="connect",d.GETACCOUNT="getAccount",d.DISCONNECT="disconnect",d.NETWORK_CHANGE="switchNetwork",d.SIGN_MESSAGE="signMessage",d.SEND_TRANSACTION="sendTransaction",d.SIGN_AND_SUBMIT_TRANSACTION="signAndSubmitTransaction",d.SIGN_BUILD_TRANSACTION="signBuildTransaction",d.ACCOUNT_CHANGE="accountChange",d))(S||{}),r=class r{constructor(e){n(this,"message",null);n(this,"_metadata",{});n(this,"_initData",{});n(this,"_endless",null);n(this,"_endlessConfig",null);n(this,"accountAddress",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;let s={status:"Approved",args:{...t}};e(s)}else{let s={status:"Rejected",message:t?.message||"Wallet is not connected"};e(s)}})}));n(this,"connect",e=>new Promise(t=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"connect",metadata:this._metadata,data:{}},s=>{if(s.account){this.accountAddress=s.account;let a={status:"Approved",args:{...s}};t(a)}else{let a={status:"Rejected",message:s?.message};t(a)}e&&e({...s})})}));n(this,"disconnect",e=>new Promise((t,s)=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"disconnect",metadata:this._metadata,data:{}},a=>{this.accountAddress=null,e&&e(a),t()})}));n(this,"signMessage",(e,t)=>new Promise(s=>{this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signMessage",metadata:this._metadata,data:e},a=>{if(a.signature){let o={status:"Approved",args:{fullMessage:e.message,signature:a.signature,publicKey:a.publicKey,nonce:"",message:e.message,prefix:"Endless"}};s(o)}else{let o={status:"Rejected",message:a?.message};s(o)}t&&t(a)})}));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=>{if(!this.accountAddress){let a={status:"Rejected",message:"Wallet not linked"};t(a);return}let s;if(l()||p()){if(!this._endless){let a={status:"Rejected",message:"Wallet not linked"};t(a);return}s=await this._endless.transaction.build.simple({sender:this.accountAddress,data:e.payload,options:{...e.options||{}}}),s=s.bcsToHex().toString()}else g()&&(s=e);this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signAndSubmitTransaction",metadata:this._metadata,data:{serializedTransaction:{data:s,sender:this.accountAddress}}},a=>{if(a.hash){let o={status:"Approved",args:{hash:a.hash}};t(o)}else{let o={status:"Rejected",message:a?.message};t(o)}})}));n(this,"signTransaction",(e,t="simple")=>new Promise(async s=>{if(!this.accountAddress||!this._endless){let a={status:"Rejected",message:"Wallet not linked"};s(a);return}this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"signBuildTransaction",metadata:this._metadata,data:{transactionData:e,sender:this.accountAddress,type:t}},a=>{if(a.signature){let o={status:"Approved",args:{data:a.signature}};s(o)}else{let o={status:"Rejected",message:a?.message};s(o)}})}));n(this,"onAccountChange",e=>{this.on("accountChange",e)});n(this,"onNetworkChange",e=>{this.on("networkChange",e)});if(r._instance)return r._instance;this.message=new N,this.initWalletEvent(),this.getMetadata(),this.initConfig(e),r._instance=this}initConfig(e){if(g()){this._initData.network=e.network;return}}initWalletEvent(){this.on("networkChange",e=>{this.initConfig({network:e.name})})}changeNetwork(e){this.message?.sendMessage({uuid:new Date().getTime().toString(),methodName:"switchNetwork",metadata:this._metadata,data:{...this._initData,...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(r,"version","1.0.5"),n(r,"_instance"),n(r,"getIninData",()=>r._instance?r._instance._initData:{}),n(r,"getAccountAddress",()=>r._instance?r._instance.accountAddress:null),n(r,"setAccountAddress",e=>{r._instance&&(r._instance.accountAddress=e)});var c=r;export{f as EndLessSDKEvent,c as EndlessLuffaSdk,D as EndlessSendTransactionType,T as EndlessWalletTransactionType,S as MethodName,A as UserResponseStatus,l as isLuffa,g as isLuffaMiniProgram,p as isLuffaMiniProgramWebview}; //# sourceMappingURL=index.mjs.map