UNPKG

@useelven/core

Version:

Core React hooks for MultiversX DApps

3 lines (2 loc) 38.4 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; }'use client'; var _react = require('react');var _valtio = require('valtio');var tt=(a=>(a.ledger="ledger",a.walletconnect="walletconnect",a.wallet="wallet",a.extension="extension",a.xalias="xalias",a.hub="hub",a.none="",a))(tt||{}),nt= exports.EnvironmentsEnum =(o=>(o.testnet="testnet",o.devnet="devnet",o.mainnet="mainnet",o.notDefined="",o))(nt||{}),ot= exports.LocalstorageKeys =(n=>(n.account="useElven_dapp__account",n.loginInfo="useElven_dapp__loginInfo",n))(ot||{}),rt= exports.WebWalletUrlParamsEnum =(t=>(t.hasWebWalletGuardianSign="hasWebWalletGuardianSign",t))(rt||{}),it= exports.ESDTType =(o=>(o.FungibleESDT="FungibleESDT",o.MetaESDT="MetaESDT",o.NonFungibleESDT="NonFungibleESDT",o.SemiFungibleESDT="SemiFungibleESDT",o))(it||{});var _lodashclonedeep = require('lodash.clonedeep'); var _lodashclonedeep2 = _interopRequireDefault(_lodashclonedeep);var be={addressIndex:0,address:"",nonce:0,balance:"",activeGuardianAddress:""},fe=_valtio.proxy.call(void 0, be),h=(e,t)=>{fe[e]=t},at=()=>{let e=_lodashclonedeep2.default.call(void 0, be);Object.keys(e).forEach(t=>{h(t,e[t])})},we={loginMethod:"",expires:0,loginToken:"",signature:"",accessToken:""},X=_valtio.proxy.call(void 0, we),k=(e,t)=>{X[e]=t},st=()=>{let e=_lodashclonedeep2.default.call(void 0, we);Object.keys(e).forEach(t=>{X[t]=e[t]})},ct={pending:!0,error:"",loggedIn:!1},Te=_valtio.proxy.call(void 0, ct),f=(e,t)=>{Te[e]=t},lt=()=>{let e=_lodashclonedeep2.default.call(void 0, we);Object.keys(e).forEach(t=>{f(t,e[t])})},K=()=>{at(),st(),lt()};var Q=(e,t)=>{let n=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{n.current?e(t):n.current=!0},t)};var _utils = require('valtio/utils');var mt=typeof window>"u",B=mt?e=>_valtio.snapshot.call(void 0, e):_utils.useProxy;var E=()=>{let{addressIndex:e,address:t,balance:n,nonce:r,activeGuardianAddress:o}=B(fe);return{addressIndex:e,address:t,balance:n,nonce:r,activeGuardianAddress:o}};var G=()=>{let{loginMethod:e,expires:t,loginToken:n,signature:r,accessToken:o}=B(X);return{loginMethod:e,expires:t,loginToken:n,signature:r,accessToken:o}};var P=e=>{if(typeof window<"u"){let t=new URL(window.location.href);return new URLSearchParams(t.search).get(e)}return""};var Pe=(e,t)=>{let n=E(),r=G();_react.useEffect.call(void 0, ()=>{P("accessToken")&&localStorage.setItem("useElven_dapp__loginInfo",JSON.stringify({loginMethod:"hub"}))},[]),_react.useEffect.call(void 0, ()=>{let o=localStorage.getItem("useElven_dapp__account"),i=o?JSON.parse(o):null;if(!_optionalChain([i, 'optionalAccess', _2 => _2.address])){f("pending",!1);return}h("address",i.address),h("nonce",i.nonce),h("balance",i.balance),h("addressIndex",i.addressIndex),h("activeGuardianAddress",i.activeGuardianAddress),e(!0)},[]),_react.useEffect.call(void 0, ()=>{let o=localStorage.getItem("useElven_dapp__loginInfo");if(o){let i=JSON.parse(o);k("loginMethod",i.loginMethod),k("expires",i.expires),k("loginToken",i.loginToken),k("signature",i.signature),k("accessToken",i.accessToken),t(!0)}},[]),_react.useEffect.call(void 0, ()=>{function o(i){if(i.key==="useElven_dapp__account"){let s=localStorage.getItem("useElven_dapp__account");if(s){let a=JSON.parse(s);h("nonce",a.nonce),h("balance",a.balance)}}}return window.addEventListener("storage",o),()=>{window.removeEventListener("storage",o)}},[]),Q(()=>{localStorage.setItem("useElven_dapp__account",JSON.stringify(n))},[n.address,n.nonce,n.balance,n.addressIndex,n.activeGuardianAddress]),Q(()=>{localStorage.setItem("useElven_dapp__loginInfo",JSON.stringify(r))},[r.loginMethod,r.expires,r.loginToken,r.signature,r.accessToken])};var _sdkcore = require('@multiversx/sdk-core');var _="/dapp/init",Se={devnet:{chainType:"devnet",shortId:"D",name:"Devnet",egldLabel:"xEGLD",egldDenomination:"18",decimals:"4",gasPerDataByte:"1500",walletConnectDeepLink:"https://maiar.page.link/?apn=com.elrond.maiar.wallet&isi=1519405832&ibi=com.elrond.maiar.wallet&link=https://xportal.com/",walletConnectV2RelayAddresses:["wss://relay.walletconnect.com"],walletConnectV2ProjectId:"",xAliasAddress:"https://devnet.xalias.com",walletAddress:"https://devnet-wallet.multiversx.com",apiAddress:"https://devnet-api.multiversx.com",explorerAddress:"https://devnet-explorer.multiversx.com",IPFSGateway:"https://devnet-media.multiversx.com/nfts/asset/",apiTimeout:"4000",txWatcherTimeout:"90000",txWatcherPatience:"0"},testnet:{chainType:"testnet",shortId:"T",name:"Testnet",egldLabel:"xEGLD",egldDenomination:"18",decimals:"4",gasPerDataByte:"1500",walletConnectDeepLink:"https://maiar.page.link/?apn=com.elrond.maiar.wallet&isi=1519405832&ibi=com.elrond.maiar.wallet&link=https://xportal.com/",walletConnectV2RelayAddresses:["wss://relay.walletconnect.com"],walletConnectV2ProjectId:"",xAliasAddress:"https://testnet.xalias.com",walletAddress:"https://testnet-wallet.multiversx.com",apiAddress:"https://testnet-api.multiversx.com",explorerAddress:"https://testnet-explorer.multiversx.com",IPFSGateway:"https://testnet-media.multiversx.com/nfts/asset/",apiTimeout:"4000",txWatcherTimeout:"90000",txWatcherPatience:"0"},mainnet:{chainType:"mainnet",shortId:"1",name:"Mainnet",egldLabel:"EGLD",egldDenomination:"18",decimals:"4",gasPerDataByte:"1500",walletConnectDeepLink:"https://maiar.page.link/?apn=com.elrond.maiar.wallet&isi=1519405832&ibi=com.elrond.maiar.wallet&link=https://xportal.com/",walletConnectV2RelayAddresses:["wss://relay.walletconnect.com"],walletConnectV2ProjectId:"",xAliasAddress:"https://xalias.com",walletAddress:"https://wallet.multiversx.com",apiAddress:"https://api.multiversx.com",explorerAddress:"https://explorer.multiversx.com",IPFSGateway:"https://media.multiversx.com/nfts/asset/",apiTimeout:"4000",txWatcherTimeout:"90000",txWatcherPatience:"0"}};var he=Se.devnet,j=_valtio.proxy.call(void 0, he),ke=(e,t)=>{j[e]=t},Ie=e=>{let t={...e};Object.keys(he).forEach(n=>{t[n]?ke(n,t[n]):t.chainType?ke(n,Se[t.chainType][n]):ke(n,he[n])})};var D=()=>{let{chainType:e,shortId:t,name:n,egldLabel:r,egldDenomination:o,decimals:i,gasPerDataByte:s,walletConnectDeepLink:a,xAliasAddress:m,walletAddress:w,apiAddress:p,explorerAddress:d,apiTimeout:l,txWatcherTimeout:g,txWatcherPatience:T,IPFSGateway:S,walletConnectV2RelayAddresses:c,walletConnectV2ProjectId:u}=B(j);return{chainType:e,shortId:t,name:n,egldLabel:r,egldDenomination:o,decimals:i,gasPerDataByte:s,walletConnectDeepLink:a,xAliasAddress:m,walletAddress:w,apiAddress:p,explorerAddress:d,apiTimeout:l,txWatcherTimeout:g,txWatcherPatience:T,IPFSGateway:S,walletConnectV2RelayAddresses:c,walletConnectV2ProjectId:u}};var St={dappProvider:null,apiNetworkProvider:null},Z=_valtio.proxy.call(void 0, St);function L(e,t){Z[e]=_valtio.ref.call(void 0, t)}var ee=()=>{Z.dappProvider=null};var Le=e=>{let t=D();_react.useEffect.call(void 0, ()=>{(async()=>{let r=_optionalChain([e, 'optionalAccess', _3 => _3.current]);if(!r){let o=t.apiAddress;if(o)r=new (0, _sdkcore.ApiNetworkProvider)(o,{timeout:Number(t.apiTimeout)}),e.current=r,L("apiNetworkProvider",r);else throw Error("There is no public api configured! Check configuration.")}})()},[])};var _sdkwebwalletprovider = require('@multiversx/sdk-web-wallet-provider');var _sdkwalletconnectprovider = require('@multiversx/sdk-wallet-connect-provider');var _sdkextensionprovider = require('@multiversx/sdk-extension-provider');var _sdkhwprovider = require('@multiversx/sdk-hw-provider');function te(e){return e.length?e[Math.floor(Math.random()*e.length)]:null}var z=e=>{typeof window<"u"&&e!=null&&setTimeout(()=>{window.location.pathname.includes(e)||(window.location.href=e)},200)};var x=e=>typeof e=="string"?e.toUpperCase():e instanceof Error?e.message:`Error: ${JSON.stringify(e)}`;var N=e=>{let t=_optionalChain([window, 'optionalAccess', _4 => _4.location, 'optionalAccess', _5 => _5.href]);return e&&window?`${window.location.origin}${e}`:t};var ne=async(e,t,n)=>{let r=_optionalChain([t, 'optionalAccess', _6 => _6.getAddress, 'call', _7 => _7()]);if(e&&r){let o=new (0, _sdkcore.Address)(r),i=new (0, _sdkcore.Account)(o);try{let s=await e.getAccount(o),a=await e.getGuardianData(o);i.update(s),h("address",i.address.bech32()),h("activeGuardianAddress",a.guarded&&_optionalChain([a, 'access', _8 => _8.activeGuardian, 'optionalAccess', _9 => _9.address, 'access', _10 => _10.bech32, 'call', _11 => _11()])?a.activeGuardian.address.bech32():"")}catch(s){let a=x(s);console.warn(`Something went wrong trying to synchronize the user account: ${a}`)}}k("loginMethod","walletconnect"),n&&z(N(n))};var W=()=>new Date().setHours(new Date().getHours()+24),oe=e=>Date.now()>e;var U=()=>{let{pending:e,error:t,loggedIn:n}=B(Te);return{pending:e,error:t,loggedIn:n}};var O=()=>{let{dappProvider:e,apiNetworkProvider:t}=B(Z);return{dappProvider:e,apiNetworkProvider:t}};var $=()=>{let{pending:e,loggedIn:t,error:n}=U(),r=O();return{logout:async i=>{let s=_optionalChain([i, 'optionalAccess', _12 => _12.dappProvider])||r.dappProvider;if(!s)K(),f("loggedIn",!1);else try{f("pending",!0),await s.logout(),_optionalChain([i, 'optionalAccess', _13 => _13.callbackUrl])&&z(N(_optionalChain([i, 'optionalAccess', _14 => _14.callbackUrl]))),f("loggedIn",!1)}catch(a){let m=x(a);console.error("error logging out",m),f("error",m)}finally{f("pending",!1),K(),ee()}},pending:e,loggedIn:t,error:n}};var _sdknativeauthclient = require('@multiversx/sdk-native-auth-client');var F=()=>new (0, _sdknativeauthclient.NativeAuthClient)({apiUrl:_optionalChain([j, 'optionalAccess', _15 => _15.apiAddress])||"",origin:typeof window<"u"&&typeof window.location<"u"?window.location.origin:"",expirySeconds:60*60*2});function yt(e){try{let t=atob(e),n=btoa(t),r=Buffer.from(e,"base64").toString(),o=Buffer.from(r).toString("base64");if(e===n&&e===o||t===r)return!0}catch (e2){return!1}return!1}function J(e){return yt(e)?atob(e):e}var Ne=e=>{if(!e||Object.prototype.toString.call(e)!=="[object String]")return null;let t=e.split(".");if(t.length!==4)return null;try{let[n,r,o,i]=t,s=JSON.parse(J(i)),a=J(n);return{ttl:Number(o),extraInfo:s,origin:a,blockHash:r}}catch(n){return console.error(`Error trying to decode ${e}:`,n),null}};var Ce=e=>{if(!e||Object.prototype.toString.call(e)!=="[object String]")return null;let t=e.split(".");if(t.length!==3)return console.error("Invalid nativeAuthToken"),null;try{let[n,r,o]=t,i=J(n),s=J(r),a=Ne(s);if(!a)return{address:i,body:s,signature:o,blockHash:"",origin:"",ttl:0};let m={...a,address:i,body:s,signature:o};return _optionalChain([a, 'access', _16 => _16.extraInfo, 'optionalAccess', _17 => _17.timestamp])||delete m.extraInfo,m}catch (e3){return null}};var _sdkwebviewprovider = require('@multiversx/sdk-webview-provider');var Re=(e,t,n)=>{let r=_react.useRef.call(void 0, void 0),{logout:o}=$(),i=E(),s=G(),a=D();Q(()=>{(async()=>{let w=s.loginMethod,p=s.loginToken,d=s.expires,l=_optionalChain([r, 'optionalAccess', _18 => _18.current]);if(d&&oe(d)){K(),ee(),localStorage.removeItem("useElven_dapp__account"),localStorage.removeItem("useElven_dapp__loginInfo");return}if(!l)switch(w){case"extension":{l=_sdkextensionprovider.ExtensionProvider.getInstance();try{await l.init(),l.isInitialized()?(l.setAddress(i.address),L("dappProvider",l)):(console.warn("Something went wrong trying to sync with the extension! Try to connect again."),await o())}catch(g){let T=x(g);console.warn("Can't initialize the Dapp Provider! ",T)}break}case"walletconnect":{if(!a.shortId||!a.chainType){console.warn("Please configure chainType in useSyncNetwork hook!");return}if(!a.walletConnectV2ProjectId){console.warn("Please configure walletConnectV2ProjectId in useSyncNetwork hook!");return}let g={onClientLogin:()=>ne(_optionalChain([n, 'optionalAccess', _19 => _19.current]),_optionalChain([r, 'optionalAccess', _20 => _20.current])),onClientLogout:()=>o({dappProvider:_optionalChain([r, 'optionalAccess', _21 => _21.current])}),onClientEvent:S=>{console.info("wc2 session event: ",S)}},T=te(a.walletConnectV2RelayAddresses);if(!T){console.warn("Can't read the relay address. Try to provide one in useSyncNetwok hook!");return}l=new (0, _sdkwalletconnectprovider.WalletConnectV2Provider)(g,a.shortId,T,a.walletConnectV2ProjectId),r.current=l;try{await l.init(),l.isInitialized()?L("dappProvider",l):(console.warn("Something went wrong trying to sync with the xPortal app!"),await o())}catch (e4){console.warn("Can't initialize the Dapp Provider!")}break}case"wallet":{let g=P("address")||_optionalChain([i, 'optionalAccess', _22 => _22.address]),T=P("signature");if(T&&k("signature",T),g){l=new (0, _sdkwebwalletprovider.WalletProvider)(`${a.walletAddress}${_}`),L("dappProvider",l);let S=new (0, _sdkcore.Address)(g),c=new (0, _sdkcore.Account)(S);h("address",c.address.bech32())}if(T&&g&&p){let c=F().getToken(g,p,T);k("accessToken",c),r.current=l}break}case"xalias":{let g=P("address")||_optionalChain([i, 'optionalAccess', _23 => _23.address]),T=P("signature");if(T&&k("signature",T),g){l=new (0, _sdkwebwalletprovider.WalletProvider)(`${a.xAliasAddress}${_}`),L("dappProvider",l);let S=new (0, _sdkcore.Address)(g),c=new (0, _sdkcore.Account)(S);h("address",c.address.bech32())}if(T&&g&&p){let c=F().getToken(g,p,T);k("accessToken",c),r.current=l}break}case"ledger":{l=new _sdkhwprovider.HWProvider,r.current=l,L("dappProvider",l);try{await l.init(),l.isInitialized()?(l.setAddressIndex(i.addressIndex),L("dappProvider",l)):(console.warn("Something went wrong trying to sync with the Ledger!"),await o())}catch (e5){console.warn("Can't initialize the Dapp Provider!")}break}case"hub":{let g=P("accessToken");if(g){let T=Ce(g);if(!T){localStorage.removeItem("useElven_dapp__loginInfo");return}let{signature:S,address:c,body:u}=T;k("loginToken",u),k("accessToken",g),k("signature",S),k("loginMethod","hub"),k("expires",W()),h("address",c),l=new _sdkwebviewprovider.WebviewProvider,L("dappProvider",l)}break}}})()},[e,t])};var Me=e=>{let t=E(),n=G();Q(()=>{(async()=>{let o=t.address,i=n.expires,s=e.current;if(!(i&&oe(i))&&o&&s){f("pending",!0);let m=new (0, _sdkcore.Address)(o),w=new (0, _sdkcore.Account)(m);try{let p=await s.getAccount(m),d=await s.getGuardianData(m);w.update(p),h("address",o),h("nonce",w.nonce.valueOf()),h("balance",w.balance.toString()),h("activeGuardianAddress",d.guarded&&_optionalChain([d, 'access', _24 => _24.activeGuardian, 'optionalAccess', _25 => _25.address, 'access', _26 => _26.bech32, 'call', _27 => _27()])?d.activeGuardian.address.bech32():""),f("loggedIn",!!o)}catch(p){let d=x(p);console.warn(`Something went wrong trying to synchronize the user account: ${d}`)}finally{f("pending",!1)}}})()},[_optionalChain([t, 'optionalAccess', _28 => _28.address])])};var Mr=e=>{Ie(e);let[t,n]=_react.useState.call(void 0, !1),[r,o]=_react.useState.call(void 0, !1),i=_react.useRef.call(void 0, void 0);Pe(n,o),Le(i),Re(t,r,i),Me(i)};var xe=e=>{let t=e.getSender(),n=e.getNonce().valueOf();new (0, _sdkcore.Account)(t).incrementNonce(),h("nonce",n+1)},Gt=(e,t,n)=>{if(n){let o={guarded:!0,...t instanceof _sdkhwprovider.HWProvider?{hashSign:!0}:{}};e.setVersion(_sdkcore.TransactionVersion.withTxOptions()),e.setOptions(_sdkcore.TransactionOptions.withOptions(o)),e.setGuardian(_sdkcore.Address.fromBech32(n))}return e},Ae=async(e,t,n,r,o,i,s)=>{if(t(e),r){let m=await new (0, _sdkcore.TransactionWatcher)(r,{...i?{timeoutMilliseconds:parseInt(i)}:{},...s?{patienceMilliseconds:parseInt(s)}:{}}).awaitCompleted(e);t(e),n(m),_optionalChain([o, 'optionalCall', _29 => _29({transaction:e,pending:!1,txResult:m})]);let w=e.getSender(),p=new (0, _sdkcore.Account)(w),d=await r.getAccount(w);p.update(d),h("address",p.address.bech32()),h("balance",p.balance.toString())}},jt=(e,t,n)=>!(!n||!t||e.isGuardedTransaction()),Ge=(e,t)=>{let n=N(t);if(!e)return n;let r=new URL(n);return r.searchParams.set("ongoingTx",e),r.toString()},$t=async(e,t,n,r)=>{let o=new (0, _sdkwebwalletprovider.WalletProvider)(`${t}${_}`),i=Ge(r,n),s=new URL(i);s.searchParams.set("hasWebWalletGuardianSign","true"),await o.guardTransactions([e],{callbackUrl:encodeURIComponent(s.toString())})},je=async(e,t,n,r,o,i,s,a,m,w,p,d,l,g,T)=>{let S=Gt(t,e,p);try{if(e instanceof _sdkwebwalletprovider.WalletProvider&&await e.signTransaction(t,{callbackUrl:encodeURIComponent(Ge(l,m))}),e instanceof _sdkextensionprovider.ExtensionProvider&&(S=await e.signTransaction(t)),e instanceof _sdkwalletconnectprovider.WalletConnectV2Provider&&(S=await e.signTransaction(t)),e instanceof _sdkwebviewprovider.WebviewProvider&&(S=await e.signTransaction(t)),e instanceof _sdkhwprovider.HWProvider&&(S=await e.signTransaction(t)),n.loginMethod!=="wallet"&&n.loginMethod!=="xalias"){if(jt(S,p,d)){await $t(S,d,m,l);return}xe(S),await r.sendTransaction(S),await Ae(S,o,i,r,w,g,T)}}catch(c){let u=x(c);s(u),_optionalChain([w, 'optionalCall', _30 => _30({error:u})])}finally{a(!1),_optionalChain([w, 'optionalCall', _31 => _31({pending:!1})])}};var $e=({setPending:e,setTransaction:t,setTxResult:n,cb:r,setError:o,ongoingTxId:i})=>{let s=E(),a=O(),m=G(),w=D(),p=s.nonce;_react.useEffect.call(void 0, ()=>{let d=P(_sdkwebwalletprovider.WALLET_PROVIDER_CALLBACK_PARAM),l=P("hasWebWalletGuardianSign");if((P("ongoingTx")||void 0)!==i)return;let T=async()=>{if(a.dappProvider&&a.apiNetworkProvider){let S;if("getTransactionsFromWalletUrl"in a.dappProvider){if(S=_optionalChain([a, 'access', _32 => _32.dappProvider, 'access', _33 => _33.getTransactionsFromWalletUrl, 'call', _34 => _34(), 'optionalAccess', _35 => _35[0]]),!S)return;m.loginMethod==="wallet"&&(S.data=Buffer.from(S.data).toString("base64"))}else if(s.activeGuardianAddress&&m.loginMethod!=="wallet"&&m.loginMethod!=="xalias"&&l)S=_optionalChain([new (0, _sdkwebwalletprovider.WalletProvider)(`${w.walletAddress}${_}`), 'access', _36 => _36.getTransactionsFromWalletUrl, 'call', _37 => _37(), 'optionalAccess', _38 => _38[0]]);else return;if(!S)return;e(!0),_optionalChain([r, 'optionalCall', _39 => _39({pending:!0})]);let c=_sdkcore.Transaction.fromPlainObject(S);try{xe(c),await a.apiNetworkProvider.sendTransaction(c),t(c),await Ae(c,t,n,a.apiNetworkProvider,r)}catch(u){let y=x(u);o(y),_optionalChain([r, 'optionalCall', _40 => _40({error:y})])}finally{e(!1),_optionalChain([r, 'optionalCall', _41 => _41({pending:!1})]),h("nonce",p+1),window.history.replaceState(null,"",window.location.pathname)}}};d===_sdkwebwalletprovider.WALLET_PROVIDER_CALLBACK_PARAM_TX_SIGNED&&a.apiNetworkProvider&&a.dappProvider&&T()},[a.apiNetworkProvider,a.dappProvider])};function ie({id:e,callbackUrl:t,cb:n}={id:void 0,callbackUrl:void 0,cb:void 0}){let[r,o]=_react.useState.call(void 0, !1),[i,s]=_react.useState.call(void 0, ""),[a,m]=_react.useState.call(void 0, null),[w,p]=_react.useState.call(void 0, null),d=E(),l=G(),g=O(),T=D(),S=d.nonce;return $e({setPending:o,setTransaction:m,setTxResult:p,setError:s,cb:n,ongoingTxId:e}),{pending:r,triggerTx:async({address:u,data:y,gasLimit:v,value:I,tx:A})=>{if(m(null),p(null),s(""),!A&&!v){s("You need to provide the gas limit in the triggerTx function!");return}if(g.dappProvider&&g.apiNetworkProvider&&S!==void 0&&d.address){o(!0),_optionalChain([n, 'optionalCall', _42 => _42({pending:!0})]);let C=new (0, _sdkcore.Address)(d.address),R=d.activeGuardianAddress,b=A||new (0, _sdkcore.Transaction)({nonce:S,receiver:new (0, _sdkcore.Address)(u),gasLimit:(_optionalChain([v, 'optionalAccess', _43 => _43.valueOf, 'call', _44 => _44()])||0)+(d.activeGuardianAddress?5e4:0),chainID:T.shortId||"D",data:y,value:I||0,sender:C});je(g.dappProvider,b,l,g.apiNetworkProvider,m,p,s,o,t,n,R,T.walletAddress,e,T.txWatcherTimeout,T.txWatcherPatience)}else s("There is something wrong with the network synchronization. Check if you are logged in.")},transaction:a,txResult:w,error:i}}var H=async()=>{let e=F(),t=X.loginToken;if(!t)try{f("pending",!0),t=await e.initialize({timestamp:`${Math.floor(Date.now()/1e3)}`})}catch(n){f("error",x(n))}finally{f("pending",!1)}return k("loginToken",t),t};var ae=(e,t)=>{let{logout:n}=$(),{loggedIn:r,pending:o,error:i}=U(),s=D();return _react.useEffect.call(void 0, ()=>{let m=P("address"),w=P("signature");m&&w&&r&&window.history.replaceState(null,"",window.location.pathname)},[r]),{login:async()=>{f("pending",!0);let m=await H(),w=new (0, _sdkwebwalletprovider.WalletProvider)(`${s[e==="xalias"?"xAliasAddress":"walletAddress"]}${_}`),p={callbackUrl:N(_optionalChain([t, 'optionalAccess', _45 => _45.callbackUrl])),token:m};try{k("loginMethod",e==="xalias"?"xalias":"wallet"),await w.login(p),k("expires",W()),k("loginToken",m)}catch(d){let l=x(d);f("error",`Error logging in ${l}`),k("loginMethod","")}finally{f("pending",!1)}},loggedIn:r,pending:o,error:i,logout:n,setLoggingInState:f}};var _e=e=>ae("webwallet",e);var He=e=>{let{logout:t}=$(),{loggedIn:n,pending:r,error:o}=U(),i=O();return{login:async()=>{let a=await H(),m=_sdkextensionprovider.ExtensionProvider.getInstance();try{if(!m.isInitialized()&&!await m.init()){let u="Something went wrong trying to redirect to wallet login..";console.warn(u),f("error",`Error logging in ${u}`);return}k("loginMethod","extension");let w={callbackUrl:N(_optionalChain([e, 'optionalAccess', _46 => _46.callbackUrl])),token:a},p;try{p=await m.login(w),f("pending",!0)}catch(c){let u=x(c);console.warn(u),f("error",`Error logging in ${u}`);return}L("dappProvider",m);let{signature:d,address:l}=p,g=new (0, _sdkcore.Address)(l),T=new (0, _sdkcore.Account)(g);if(i.apiNetworkProvider&&l)try{let c=await i.apiNetworkProvider.getAccount(g),u=await i.apiNetworkProvider.getGuardianData(g);T.update(c),h("activeGuardianAddress",u.guarded&&_optionalChain([u, 'access', _47 => _47.activeGuardian, 'optionalAccess', _48 => _48.address, 'access', _49 => _49.bech32, 'call', _50 => _50()])?u.activeGuardian.address.bech32():""),h("address",T.address.bech32()),h("nonce",T.nonce.valueOf()),h("balance",T.balance.toString())}catch(c){let u=x(c);console.warn(u),f("error",`Error logging in ${u}`);return}k("loginToken",a),k("expires",W()),f("loggedIn",!!l);let S=F();if(d&&S){k("signature",d);let c=S.getToken(l,a,d);k("accessToken",c)}_optionalChain([e, 'optionalAccess', _51 => _51.callbackUrl])&&z(N(_optionalChain([e, 'optionalAccess', _52 => _52.callbackUrl])))}catch(w){let p=x(w);f("error",`Error logging in ${p}`)}finally{f("pending",!1)}},loggedIn:n,pending:r,error:o,logout:t,setLoggingInState:f}};var Qe=e=>{let{logout:t}=$(),{loggedIn:n,pending:r,error:o}=U(),[i,s]=_react.useState.call(void 0, ""),[a,m]=_react.useState.call(void 0, ),w=O(),p=D(),d=_react.useRef.call(void 0, w.dappProvider),l=()=>{t({callbackUrl:N(_optionalChain([e, 'optionalAccess', _53 => _53.callbackUrl])),dappProvider:_optionalChain([d, 'optionalAccess', _54 => _54.current])})};return{login:async()=>{let c=await H(),u=te(p.walletConnectV2RelayAddresses);if(!u||!w.apiNetworkProvider){let A="Something wen't wrong with the initialization (ApiNetworkProvider or Wallet Connect Relay address), plese try to refresh the page!";console.warn(A),f("error",`Error logging in ${A}`);return}if(!p.shortId||!p.chainType){let A="Please configure chainType in useSyncNetwork hook!";console.warn(A),f("error",`Error logging in ${A}`);return}if(!p.walletConnectV2ProjectId){let A="Please configure walletConnectV2ProjectId in useSyncNetwork hook!";console.warn(A),f("error",`Error logging in ${A}`);return}let y={onClientLogin:async()=>{if(d.current instanceof _sdkwalletconnectprovider.WalletConnectV2Provider){let A=d.current.getAddress(),C=d.current.getSignature(),R=new (0, _sdkcore.Account)(new (0, _sdkcore.Address)(A));h("address",A),h("balance",R.balance.toString()),h("nonce",R.nonce.valueOf()),f("loggedIn",!!A);let b=F();if(C&&b){k("signature",C);let M=b.getToken(A,c,C);k("accessToken",M)}k("loginToken",c),L("dappProvider",d.current),ne(w.apiNetworkProvider,d.current,_optionalChain([e, 'optionalAccess', _55 => _55.callbackUrl]))}},onClientLogout:l,onClientEvent:A=>{console.info("wc2 session event: ",A)}},v=(A,C)=>{if(!A||!!!C)return;let b=`${C}&token=${c}`;s(b)},I=new (0, _sdkwalletconnectprovider.WalletConnectV2Provider)(y,p.shortId,u,p.walletConnectV2ProjectId);try{d.current=I,await I.init();let{uri:A,approval:C}=await I.connect({methods:[_sdkwalletconnectprovider.OptionalOperation.CANCEL_ACTION,_sdkwalletconnectprovider.OptionalOperation.SIGN_NATIVE_AUTH_TOKEN]});A&&(k("loginMethod","walletconnect"),v(u,A),m(I.pairings),await I.login({token:c,approval:C}),f("pending",!0),k("expires",W()))}catch(A){let C=x(A);f("error",`Error logging in ${C}`)}finally{f("pending",!1)}},walletConnectUri:i,walletConnectPairings:a,walletConnectPairingLogin:async c=>{let u=d.current;if(u instanceof _sdkwalletconnectprovider.WalletConnectV2Provider){f("pending",!0);try{let{approval:y}=await u.connect({topic:c,methods:[_sdkwalletconnectprovider.OptionalOperation.CANCEL_ACTION,_sdkwalletconnectprovider.OptionalOperation.SIGN_NATIVE_AUTH_TOKEN]});k("loginMethod","walletconnect");let v=await H();await u.login({token:v,approval:y}),k("expires",W())}catch(y){let v=x(y);f("error",`Error logging in ${v}`)}finally{f("pending",!1)}}},walletConnectRemovePairing:async c=>{let u=d.current;if(u instanceof _sdkwalletconnectprovider.WalletConnectV2Provider&&c)try{await u.logout({topic:c})}catch(y){let v=x(y);f("error",`Something went wrong trying to remove the existing pairing: ${v}`)}finally{let y=_optionalChain([a, 'optionalAccess', _56 => _56.filter, 'call', _57 => _57(v=>v.topic!==c)]);m(y)}},loggedIn:n,pending:r,error:o,logout:t,setLoggingInState:f}};var Xe=e=>{let{logout:t}=$(),{loggedIn:n,pending:r,error:o}=U(),i=O();return{login:async(m=0,w=0,p=10)=>{let d=w*p+m,l=await H(),g=i.apiNetworkProvider,T=i.dappProvider;if(!T||!(T instanceof _sdkhwprovider.HWProvider))try{let c=new _sdkhwprovider.HWProvider;await c.init(),L("dappProvider",c)}catch(c){let u=x(c);console.warn(u),f("error",`Error logging in ${u}`);return}k("loginMethod","ledger"),k("loginToken",l),h("addressIndex",d);let S;try{if(T instanceof _sdkhwprovider.HWProvider){let c=await T.tokenLogin({token:Buffer.from(`${l}{}`),addressIndex:d});c.address&&(S=c.address);let u=F();if(c.signature&&u){let y=c.signature.toString("hex");k("signature",y);let v=u.getToken(c.address,l,y);k("accessToken",v)}}if(f("pending",!0),S&&(h("address",S),f("loggedIn",!!S),g)){let c=new (0, _sdkcore.Address)(S),u=new (0, _sdkcore.Account)(c),y=await g.getAccount(c),v=await g.getGuardianData(c);u.update(y),h("activeGuardianAddress",v.guarded&&_optionalChain([v, 'access', _58 => _58.activeGuardian, 'optionalAccess', _59 => _59.address, 'access', _60 => _60.bech32, 'call', _61 => _61()])?v.activeGuardian.address.bech32():""),h("nonce",u.nonce.valueOf()),h("balance",u.balance.toString())}k("expires",W()),_optionalChain([e, 'optionalAccess', _62 => _62.callbackUrl])&&z(N(_optionalChain([e, 'optionalAccess', _63 => _63.callbackUrl])))}catch(c){let u=x(c);f("error",`Error logging in ${u}`)}finally{f("pending",!1)}},loggedIn:n,pending:r,getHWAccounts:async(m=0,w=10)=>{try{let p=i.dappProvider instanceof _sdkhwprovider.HWProvider?i.dappProvider:new _sdkhwprovider.HWProvider;return p.isInitialized()||await p.init(),L("dappProvider",p),await p.getAccounts(m,w)}catch(p){let d=x(p);return console.warn(d),f("error",`Error logging in ${d}`),[]}},error:o,logout:t,setLoggingInState:f}};var Je=e=>ae("xalias",e);var Ja=e=>{let t=U(),{login:n}=_e(e),{login:r}=Je(e),{login:o,walletConnectUri:i,walletConnectPairingLogin:s,walletConnectPairings:a,walletConnectRemovePairing:m}=Qe(e),{login:w}=He(e),{login:p,getHWAccounts:d}=Xe(e);return{walletConnectUri:i,walletConnectPairingLogin:s,walletConnectPairings:a,walletConnectRemovePairing:m,getHWAccounts:d,login:async(g,T,S,c)=>(g==="extension"&&await w(),g==="wallet"&&await n(),g==="xalias"&&await r(),g==="walletconnect"&&await o(),g==="ledger"&&await p(T,S,c),null),isLoggedIn:t.loggedIn,isLoggingIn:t.pending,error:t.error,setLoggingInState:f}};var V={async get(e,t){let n=_optionalChain([t, 'optionalAccess', _64 => _64.baseEndpoint])||j.apiAddress;if(typeof fetch<"u"){let r={method:"GET",headers:{"Content-Type":"application/json",Accept:"application/json"}},o=await fetch(n+e,Object.assign(r,t||{})),i=await o.json();if(!o.ok){let s=_optionalChain([i, 'optionalAccess', _65 => _65.error])||o.status;return Promise.reject(s)}return i}},async post(e,t,n){if(typeof fetch<"u"){let r={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t||{})},o=_optionalChain([n, 'optionalAccess', _66 => _66.baseEndpoint])||j.apiAddress,i=await fetch(o+e,Object.assign(r,n||{})),s=await i.json();if(!i.ok){let a=_optionalChain([s, 'optionalAccess', _67 => _67.error])||i.status;return Promise.reject(a)}return s}},async put(e,t,n){if(typeof fetch<"u"){let r={method:"PUT",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(t||{})},o=_optionalChain([n, 'optionalAccess', _68 => _68.baseEndpoint])||j.apiAddress,i=await fetch(o+e,Object.assign(r,n||{})),s=await i.json();if(!i.ok){let a=_optionalChain([s, 'optionalAccess', _69 => _69.error])||i.status;return Promise.reject(a)}return s}},async delete(e,t){if(typeof fetch<"u"){let n={method:"DELETE",headers:{"Content-Type":"application/json",Accept:"application/json"}},r=_optionalChain([t, 'optionalAccess', _70 => _70.baseEndpoint])||j.apiAddress,o=await fetch(r+e,Object.assign(n,t||{})),i=await o.json();if(!o.ok){let s=_optionalChain([i, 'optionalAccess', _71 => _71.error])||o.status;return Promise.reject(s)}return i}}};var _bignumberjs = require('bignumber.js'); var _bignumberjs2 = _interopRequireDefault(_bignumberjs);_bignumberjs2.default.config({ROUNDING_MODE:_bignumberjs2.default.ROUND_FLOOR});var ve=({amount:e,decimals:t})=>{if(t<0)throw new Error("Decimal places shouldn't be negative number!");return BigInt(new (0, _bignumberjs2.default)(e).shiftedBy(t).toFixed())},es= exports.formatAmount =({amount:e,decimals:t,rounding:n=t})=>{if(t<0)throw new Error("Decimal places shouldn't be negative number!");return new (0, _bignumberjs2.default)(e).shiftedBy(-t).decimalPlaces(n).toFixed()};var ps=({id:e,callbackUrl:t,cb:n}={id:void 0,callbackUrl:void 0,cb:void 0})=>{let[r,o]=_react.useState.call(void 0, ),{address:i,nonce:s}=E(),{shortId:a}=D(),{triggerTx:m,pending:w,transaction:p,txResult:d,error:l}=ie({id:e,callbackUrl:t,cb:n});return{transfer:async function({tokens:T,receiver:S,gasLimit:c,endpointName:u,endpointArgs:y}){let v=[];try{for(let b of T){if(b.type==="FungibleESDT"){let M=await V.get(`/tokens/${b.tokenId.trim()}`);v.push(new (0, _sdkcore.TokenTransfer)({token:new (0, _sdkcore.Token)({identifier:b.tokenId.trim()}),amount:ve({amount:b.amount,decimals:M.decimals})}))}if(["NonFungibleESDT","MetaESDT","SemiFungibleESDT"].includes(b.type)){let M=await V.get(`/nfts/${b.tokenId.trim()}`);b.type==="NonFungibleESDT"&&v.push(new (0, _sdkcore.TokenTransfer)({token:new (0, _sdkcore.Token)({identifier:M.collection,nonce:M.nonce}),amount:1n})),b.type==="SemiFungibleESDT"&&v.push(new (0, _sdkcore.TokenTransfer)({token:new (0, _sdkcore.Token)({identifier:M.collection,nonce:M.nonce}),amount:BigInt(b.amount)})),b.type==="MetaESDT"&&v.push(new (0, _sdkcore.TokenTransfer)({token:new (0, _sdkcore.Token)({identifier:M.collection,nonce:M.nonce}),amount:ve({amount:b.amount,decimals:M.decimals})}))}}}catch(b){o(`Something went wrong: ${b}`);return}let I=new (0, _sdkcore.TransactionsFactoryConfig)({chainID:a||"D"}),A=new (0, _sdkcore.SmartContractTransactionsFactory)({config:I}),C=new (0, _sdkcore.TransferTransactionsFactory)({config:I}),R;u?R=A.createTransactionForExecute({sender:_sdkcore.Address.fromBech32(i),contract:_sdkcore.Address.fromBech32(S),gasLimit:BigInt(c),tokenTransfers:v,function:u,...y?{arguments:y}:{}}):R=C.createTransactionForESDTTokenTransfer({sender:_sdkcore.Address.fromBech32(i),receiver:_sdkcore.Address.fromBech32(S),tokenTransfers:v}),R.nonce=BigInt(s),m({tx:R})},pending:w,transaction:p,txResult:d,error:r||l}};var xs=()=>{let e=O(),{address:t}=E(),[n,r]=_react.useState.call(void 0, ),[o,i]=_react.useState.call(void 0, ),[s,a]=_react.useState.call(void 0, );return _react.useEffect.call(void 0, ()=>{let w=!P("walletProviderStatus"),p=P("status")==="signed",d=P("message"),l=P("signature");w&&p&&d&&l&&(a(l),window.history.replaceState(null,"",window.location.pathname))},[e.apiNetworkProvider,e.dappProvider]),{signMessage:async({message:w,options:p})=>{if(!e.dappProvider){r("Error: Message signing failed: There is no active session!");return}if(!e.apiNetworkProvider){r("Error: Message signing failed: There is no active network provider!");return}try{if(i(!0),e.dappProvider instanceof _sdkwebwalletprovider.WalletProvider){let d=g=>encodeURIComponent(g).replace(/[!'()*]/g,T=>`%${T.charCodeAt(0).toString(16).toUpperCase()}`),l=N(_optionalChain([p, 'optionalAccess', _72 => _72.callbackUrl]));await e.dappProvider.signMessage(new (0, _sdkcore.Message)({data:Buffer.from(w),address:new (0, _sdkcore.Address)(t)}),{callbackUrl:encodeURIComponent(`${l}${l.includes("?")?"&":"?"}message=${d(w)}`)})}else{let d=await e.dappProvider.signMessage(new (0, _sdkcore.Message)({data:Buffer.from(w),address:new (0, _sdkcore.Address)(t)}));_optionalChain([d, 'optionalAccess', _73 => _73.signature])&&a(Buffer.from(d.signature).toString("hex"))}}catch(d){let l=x(d);r(l)}finally{i(!1)}},pending:o,signature:s,error:n}};var Cs=({id:e,callbackUrl:t,cb:n}={id:void 0,callbackUrl:void 0,cb:void 0})=>{let{address:r,nonce:o}=E(),{shortId:i}=D(),{triggerTx:s,pending:a,transaction:m,txResult:w,error:p}=ie({id:e,callbackUrl:t,cb:n}),d=async function({source:g,gasLimit:T=1e7,initArguments:S=[],isUpgradeable:c=!0,isReadable:u=!1,isPayable:y=!1,isPayableBySmartContract:v=!1}){try{let I;if(Buffer.isBuffer(g))I=_sdkcore.Code.fromBuffer(g).valueOf();else{let M=await(await fetch(g)).arrayBuffer();I=_sdkcore.Code.fromBuffer(Buffer.from(M)).valueOf()}let A=new (0, _sdkcore.TransactionsFactoryConfig)({chainID:i||"D"}),R=new (0, _sdkcore.SmartContractTransactionsFactory)({config:A}).createTransactionForDeploy({sender:new (0, _sdkcore.Address)(r),bytecode:I,isUpgradeable:c,isReadable:u,isPayable:y,isPayableBySmartContract:v,arguments:S,gasLimit:BigInt(T)});R.setNonce(o),s({tx:R})}catch(I){throw new Error(x(I))}},l=_optionalChain([w, 'optionalAccess', _74 => _74.logs, 'access', _75 => _75.events, 'optionalAccess', _76 => _76.find, 'call', _77 => _77(g=>g.identifier==="SCDeploy"), 'optionalAccess', _78 => _78.address, 'optionalAccess', _79 => _79.bech32, 'call', _80 => _80()]);return{deploy:d,pending:a,transaction:m,txResult:w,scAddress:l,error:p}};var _swr = require('swr'); var _swr2 = _interopRequireDefault(_swr);var _mutation = require('swr/mutation'); var _mutation2 = _interopRequireDefault(_mutation);var An=(o=>(o.NUMBER="number",o.STRING="string",o.BOOLEAN="boolean",o.COMPLEX="complex",o))(An||{}),Ze=async({url:e,payload:t})=>await V.post(e,t||{});function Gs({type:e,payload:t,options:n,autoInit:r=!0,abiJSON:o}){let i="";switch(e){case"number":i="/vm-values/int";break;case"string":i="/vm-values/string";break;case"boolean":i="/vm-values/int";break;case"complex":i="/vm-values/query";break}let{data:s,error:a,mutate:m,isValidating:w,isLoading:p}=_swr2.default.call(void 0, r?{url:i,payload:t}:null,Ze,{revalidateIfStale:!0,revalidateOnFocus:!1,revalidateOnReconnect:!0,...n}),{data:d,error:l,trigger:g,isMutating:T}=_mutation2.default.call(void 0, {url:i,payload:t},Ze,{populateCache:!0,revalidate:!0});return{data:(c=>{if(c!=null){if(e==="complex"&&!o)throw new Error("Please provide the ABI JSON contents if you want to use the COMPLEX queries in useScQuery! Check README.md for more info.");if(e==="complex"&&o&&_optionalChain([c, 'optionalAccess', _81 => _81.returnData])&&_optionalChain([t, 'optionalAccess', _82 => _82.scAddress])&&_optionalChain([t, 'optionalAccess', _83 => _83.funcName])){let u=new _sdkcore.ResultsParser,y=_sdkcore.AbiRegistry.create(o),I=new (0, _sdkcore.SmartContract)({address:new (0, _sdkcore.Address)(t.scAddress),abi:y}).getEndpoint(t.funcName),A=_sdkcore.ContractQueryResponse.fromHttpResponse(c);return u.parseQueryResponse(A,I)}return e==="boolean"?!!Number(c):e==="number"?Number(c):c}})(_optionalChain([s, 'optionalAccess', _84 => _84.data, 'optionalAccess', _85 => _85.data])||_optionalChain([d, 'optionalAccess', _86 => _86.data, 'optionalAccess', _87 => _87.data])),isLoading:p,isValidating:w||T,error:a||l,fetch:r?m:g}}async function et({url:e,type:t,payload:n,baseEndpoint:r}){return t==="post"?await V.post(e,n||{},{baseEndpoint:r}):t==="put"?await V.put(e,n||{},{baseEndpoint:r}):t==="delete"?await V.delete(e,{baseEndpoint:r}):await V.get(e,{baseEndpoint:r})}function Qs({url:e,type:t,payload:n,options:r,autoInit:o=!0,baseEndpoint:i}){let{data:s,error:a,mutate:m,isValidating:w,isLoading:p}=_swr2.default.call(void 0, o?{url:e,payload:n,type:t,baseEndpoint:i}:null,et,{revalidateIfStale:!0,revalidateOnFocus:!1,revalidateOnReconnect:!0,...r}),{data:d,error:l,trigger:g,isMutating:T}=_mutation2.default.call(void 0, {url:e,payload:n,type:t},et,{populateCache:!0,revalidate:!0});return{data:s||d,isLoading:p,isValidating:w||T,error:a||l,fetch:o?m:g}}exports.ESDTType = it; exports.EnvironmentsEnum = nt; exports.LocalstorageKeys = ot; exports.LoginMethodsEnum = tt; exports.SCQueryType = An; exports.WebWalletUrlParamsEnum = rt; exports.formatAmount = es; exports.parseAmount = ve; exports.useAccount = E; exports.useApiCall = Qs; exports.useConfig = D; exports.useExtensionLogin = He; exports.useLedgerLogin = Xe; exports.useLoggingIn = U; exports.useLogin = Ja; exports.useLoginInfo = G; exports.useLogout = $; exports.useMobileAppLogin = Qe; exports.useNetwork = O; exports.useNetworkSync = Mr; exports.useScDeploy = Cs; exports.useScQuery = Gs; exports.useSignMessage = xs; exports.useTokenTransfer = ps; exports.useTransaction = ie; exports.useWebWalletLogin = _e; exports.useXaliasLogin = Je;