UNPKG

@luffalab/luffa-evm-sdk

Version:

luffa evm ts sdk

2 lines 14.5 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _=Object.defineProperty;var x=(i,e,t)=>e in i?_(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var a=(i,e,t)=>x(i,typeof e!="symbol"?e+"":e,t);var p=(d=>(d.CONNECT="connect",d.GETACCOUNT="getAccount",d.DISCONNECT="disconnect",d.ACCOUNT_CHANGE="accountChange",d.ACCOUNTS_CHANGE="accountsChanged",d.NETWORK_CHANGE="luffa_switchChain",d.CHAIN_CHANGED="chainChanged",d))(p||{});var h=()=>window&&_optionalChain([window, 'optionalAccess', _2 => _2._evmWallet])!==void 0||_optionalChain([window, 'optionalAccess', _3 => _3.webkit, 'optionalAccess', _4 => _4.messageHandlers, 'optionalAccess', _5 => _5._evmWallet])!==void 0||!1,v= exports.isLuffaMiniProgramWebview =()=>(window&&_optionalChain([window, 'optionalAccess', _6 => _6.navigator, 'optionalAccess', _7 => _7.userAgent])||"").includes("miniProgram"),f= exports.isLuffaMiniProgram =()=>!!(_optionalChain([window, 'optionalAccess', _8 => _8.wx])&&_optionalChain([window, 'optionalAccess', _9 => _9.wx, 'optionalAccess', _10 => _10.getSystemInfoSync])),N={mainnet:"endless",testnet:"eds"},D=i=>{let e=parseInt(i,16),t="";switch(e){case 728126428:t="tron";break;case 3448148188:t="tron_nile";break;case 1:t="eth";break;case 11155111:t="eth_sepolia";break;case 56:t="bsc";break;case 97:t="bsc_test";break;case 220:t="endless";break;case 221:t="eds";break}return t},A=i=>{let e;switch(i){case"eth":e=1;break;case"eth_sepolia":e=11155111;break;case"bsc":e=56;break;case"bsc_test":e=97;break;case"tron":e=728126428;break;case"tron_nile":e=3448148188;break;case"endless":e=220;break;case"eds":e=221;break}return e},I=i=>{if(!i||!i.startsWith("0x095ea7b3"))return{isApprove:!1,spender:null,amount:null};try{let e=i.slice(10),t=e.slice(0,64),s=e.slice(64,128),n="0x"+t.slice(24),o=BigInt("0x"+s);return{isApprove:!0,spender:n,amount:o}}catch (e2){return{isApprove:!1,spender:null,amount:null}}},M=i=>typeof i=="string"&&i.startsWith("0x")&&i.length%2===0&&/^[0-9a-fA-F]+$/.test(i.slice(2)),k=i=>{let e=i.slice(2),t=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)t[n/2]=parseInt(e.slice(n,n+2),16);return new TextDecoder("utf-8").decode(t)},y=i=>M(i)?k(i):i;var g=class g{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;f()&&(s=e.data.data),this.emit(t,s),this.emit("chainChanged",`0x${_optionalChain([A, 'call', _11 => _11(s), 'optionalAccess', _12 => _12.toString, 'call', _13 => _13(16)])}`);break}case"connect":this.emit(t,[_optionalChain([e, 'optionalAccess', _14 => _14.data, 'optionalAccess', _15 => _15.data, 'optionalAccess', _16 => _16.account])]);break;case"accountChange":{_optionalChain([e, 'optionalAccess', _17 => _17.data, 'optionalAccess', _18 => _18.data, 'optionalAccess', _19 => _19.account])?(l.setAccountAddress(e.data.data.account),this.emit("accountsChanged",[_optionalChain([e, 'optionalAccess', _20 => _20.data, 'optionalAccess', _21 => _21.data, 'optionalAccess', _22 => _22.account])])):l.setAccountAddress(null);break}case"disconnect":{l.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=_nullishCoalesce(_optionalChain([this, 'access', _23 => _23.listeners, 'access', _24 => _24[e], 'optionalAccess', _25 => _25.indexOf, 'call', _26 => _26(t)]), () => (-1));s>-1&&_optionalChain([this, 'access', _27 => _27.listeners, 'optionalAccess', _28 => _28[e], 'optionalAccess', _29 => _29.splice, 'call', _30 => _30(s,1)])}else this.listeners[e]=[]});a(this,"emit",(e,t)=>{_optionalChain([this, 'access', _31 => _31.listeners, 'optionalAccess', _32 => _32[e], 'optionalAccess', _33 => _33.forEach, 'call', _34 => _34(s=>s(t))])});a(this,"sendMessage",(e,t)=>{try{if(h()){this.sendLuffaMessage(e,t);return}if(f()||v()){this.sendMiniProgramMessage(e,t);return}}catch (e3){}});if(g._instance)return g._instance;g._instance=this,h()&&(window.evmWallet={sendResponse:this.sendResponse.bind(this)})}sendLuffaMessage(e,t){let s=_optionalChain([e, 'optionalAccess', _35 => _35.initData])||l.getIninData();e.initData={...s||{},network:_nullishCoalesce(N[s.network], () => (s.network))},e.from=l.getAccountAddress(),t&&(this.callbacks[e.uuid+e.methodName]=t),_optionalChain([window, 'optionalAccess', _36 => _36._evmWallet])?_optionalChain([window, 'access', _37 => _37._evmWallet, 'optionalAccess', _38 => _38.sendMessage, 'call', _39 => _39(JSON.stringify(e))]):_optionalChain([window, 'optionalAccess', _40 => _40.webkit])&&_optionalChain([window, 'optionalAccess', _41 => _41.webkit, 'optionalAccess', _42 => _42.messageHandlers, 'optionalAccess', _43 => _43._evmWallet])&&_optionalChain([window, 'access', _44 => _44.webkit, 'access', _45 => _45.messageHandlers, 'access', _46 => _46._evmWallet, 'optionalAccess', _47 => _47.postMessage, 'call', _48 => _48(e)])}sendResponse(e){let t=JSON.parse(e);this.receive({data:t})}sendMiniProgramMessage(e,t){let s="invokeNativePlugin",n=l.getAccountAddress(),o=l.getIninData(),d={api_name:"luffaWebRequest",data:{func:e.methodName,chainType:"endless",...e,initData:{...o,network:_nullishCoalesce(N[o.network], () => (o.network))},from:n}},m=r=>{t&&t({status:"success",...r.data||{}})},w=r=>{t&&t({status:"error",...r.data||{}})};switch(e.methodName){case"connect":case"getAccount":m=r=>{l.setAccountAddress(r.data.account),t&&t({account:_optionalChain([r, 'optionalAccess', _49 => _49.data, 'optionalAccess', _50 => _50.address])||"",...r.data||{}})};break;case"signMessage":case"signTransaction":case"signBuildTransaction":case"signAndSubmitTransaction":case"evmApprove":m=r=>{t&&t({status:"success",...r.data||{}})},w=r=>{t&&t({status:"error",...r.data||{}})};break;default:break}f()?wx[s]({...d,complete:r=>{r.status===void 0?t&&t({...r}):r.status==="success"?(m(r),this.receive({data:r})):w(r)}}):v()&&_optionalChain([window, 'access', _51 => _51.WeixinJSBridge, 'optionalAccess', _52 => _52.invoke, 'call', _53 => _53(s,d,r=>{r.status===void 0?t&&t({...r}):r.status==="success"?(m(r),this.receive({data:r})):w(r)})])}};a(g,"_instance");var E=g;var _uuid = require('uuid');var T=(t=>(t.APPROVED="Approved",t.REJECTED="Rejected",t))(T||{});var S=(u=>(u.CONNECT="connect",u.GETACCOUNT="getAccount",u.DISCONNECT="disconnect",u.CURRENT_CHAIN="currentChain",u.NETWORK_CHANGE="luffa_switchChain",u.SIGN_MESSAGE="signMessage",u.SEND_TRANSACTION="sendTransaction",u.SIGN_AND_SUBMIT_TRANSACTION="signAndSubmitTransaction",u.SIGN_TRANSACTION="signTransaction",u.SIGN_BUILD_TRANSACTION="signBuildTransaction",u.EVM_APPROVE="evmApprove",u.ACCOUNT_CHANGE="accountChange",u))(S||{}),c=class c{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=D(_optionalChain([e, 'optionalAccess', _54 => _54.params, 'access', _55 => _55[0], 'optionalAccess', _56 => _56.chainId]));_optionalChain([this, 'access', _57 => _57.message, 'optionalAccess', _58 => _58.sendMessage, 'call', _59 => _59({uuid:new Date().getTime().toString(),methodName:"luffa_switchChain",metadata:this._metadata,data:{targetNet:s}},n=>{_optionalChain([n, 'optionalAccess', _60 => _60.network])&&(this._initData.network=n.network);let o={...n};t(o)})])}));a(this,"currentChain",()=>new Promise(e=>{_optionalChain([this, 'access', _61 => _61.message, 'optionalAccess', _62 => _62.sendMessage, 'call', _63 => _63({uuid:new Date().getTime().toString(),methodName:"currentChain",metadata:this._metadata,data:{}},t=>{if(_optionalChain([t, 'optionalAccess', _64 => _64.network])){this._initData.network=_optionalChain([t, 'optionalAccess', _65 => _65.network]);let s=`0x${_optionalChain([A, 'call', _66 => _66(_optionalChain([t, 'optionalAccess', _67 => _67.network])), 'optionalAccess', _68 => _68.toString, 'call', _69 => _69(16)])}`;e(s)}else e({status:"Rejected"})})])}));a(this,"getAccount",()=>new Promise(e=>{_optionalChain([this, 'access', _70 => _70.message, 'optionalAccess', _71 => _71.sendMessage, 'call', _72 => _72({uuid:new Date().getTime().toString(),methodName:"getAccount",metadata:this._metadata,data:{}},t=>{_optionalChain([t, 'optionalAccess', _73 => _73.account])?(this.accountAddress=t.account,e([t.account])):e([])})])}));a(this,"connect",()=>new Promise((e,t)=>{_optionalChain([this, 'access', _74 => _74.message, 'optionalAccess', _75 => _75.sendMessage, 'call', _76 => _76({uuid:new Date().getTime().toString(),methodName:"connect",metadata:this._metadata,data:{}},s=>{let n;_optionalChain([s, 'optionalAccess', _77 => _77.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)=>{_optionalChain([this, 'access', _78 => _78.message, 'optionalAccess', _79 => _79.sendMessage, 'call', _80 => _80({uuid:new Date().getTime().toString(),methodName:"disconnect",metadata:this._metadata,data:{}},n=>{this.accountAddress=null,e&&e(n),t()})])}));a(this,"on",(e,t)=>{_optionalChain([this, 'access', _81 => _81.message, 'optionalAccess', _82 => _82.addListener])&&_optionalChain([this, 'access', _83 => _83.message, 'optionalAccess', _84 => _84.addListener, 'call', _85 => _85(e,t)])});a(this,"off",(e,t)=>{_optionalChain([this, 'access', _86 => _86.message, 'optionalAccess', _87 => _87.removeListener])&&_optionalChain([this, 'access', _88 => _88.message, 'optionalAccess', _89 => _89.removeListener, 'call', _90 => _90(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)=>{_optionalChain([this, 'access', _91 => _91.message, 'optionalAccess', _92 => _92.sendMessage, 'call', _93 => _93({uuid:new Date().getTime().toString(),methodName:t,metadata:this._metadata,data:e.params[0]},o=>{_optionalChain([o, 'optionalAccess', _94 => _94.hash])?s(o.hash):n({code:4001,message:_optionalChain([o, 'optionalAccess', _95 => _95.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),_optionalChain([this, 'access', _96 => _96.message, 'optionalAccess', _97 => _97.sendMessage, 'call', _98 => _98({uuid:new Date().getTime().toString(),methodName:t,metadata:this._metadata,data:o},C=>{let d=_optionalChain([C, 'optionalAccess', _99 => _99.signature, 'optionalAccess', _100 => _100.split, 'call', _101 => _101(",")])||[];if(Array.isArray(d)&&d.length>0){let m={...e,signature:d};s(m)}else n("Confirmation declined by user")})])}));a(this,"signMessage",(e,t)=>new Promise(async s=>{this.accountAddress||await this.connect(),_optionalChain([this, 'access', _102 => _102.message, 'optionalAccess', _103 => _103.sendMessage, 'call', _104 => _104({uuid:new Date().getTime().toString(),methodName:"signMessage",metadata:this._metadata,data:{message:y(e.params[0])}},n=>{if(_optionalChain([n, 'optionalAccess', _105 => _105.signature])){let o={status:"Approved",args:n};s(o)}else{let o={status:"Rejected",message:_optionalChain([n, 'optionalAccess', _106 => _106.message])};s(o)}t&&t(n)})])}));a(this,"onAccountChange",e=>{this.on("accountChange",e)});a(this,"onNetworkChange",e=>{this.on("luffa_switchChain",e)});if(c._instance)return c._instance;this.message=new E,this.getMetadata(),this.initConfig(e),c._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:_uuid.v4.call(void 0, ),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}=I(e.params[0].data);return t?(e.to=s,this.signAndSubmitTransaction(e,"evmApprove")):this.signAndSubmitTransaction(e)}getMetadata(){if(!window)return;let t=_optionalChain([(document.querySelector('link[rel="icon"]')||document.querySelector('link[rel="shortcut icon"]')), 'optionalAccess', _107 => _107.getAttribute, 'call', _108 => _108("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(c,"version","1.0.8"),a(c,"_instance"),a(c,"getIninData",()=>c._instance?c._instance._initData:{}),a(c,"getAccountAddress",()=>c._instance?c._instance.accountAddress:null),a(c,"setAccountAddress",e=>{c._instance&&(c._instance.accountAddress=e)});var l=c;exports.EvmSDKEvent = p; exports.LuffaEvmSdk = l; exports.MethodName = S; exports.UserResponseStatus = T; exports.isLuffa = h; exports.isLuffaMiniProgram = f; exports.isLuffaMiniProgramWebview = v; //# sourceMappingURL=index.js.map