@rango-dev/wallets-react 0.45.2-next.5 → 0.46.1-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/helpers/index.js +1 -1
- package/dist/helpers/index.js.map +3 -3
- package/dist/hub/autoConnect.d.ts.map +1 -1
- package/dist/hub/helpers.d.ts +2 -3
- package/dist/hub/helpers.d.ts.map +1 -1
- package/dist/hub/useHubAdapter.d.ts.map +1 -1
- package/dist/hub/utils.d.ts +2 -8
- package/dist/hub/utils.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/test-utils/fixtures.d.ts.map +1 -1
- package/dist/wallets-react.build.json +1 -1
- package/package.json +3 -4
- package/src/hub/autoConnect.ts +0 -16
- package/src/hub/helpers.ts +3 -19
- package/src/hub/useHubAdapter.ts +1 -38
- package/src/hub/utils.ts +3 -20
- package/src/test-utils/fixtures.ts +0 -78
- package/dist/hub/chainRegisteryConvertors.d.ts +0 -11
- package/dist/hub/chainRegisteryConvertors.d.ts.map +0 -1
- package/src/hub/chainRegisteryConvertors.ts +0 -186
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Ae=Object.defineProperty;var s=(e,t)=>Ae(e,"name",{value:t,configurable:!0});import{Persistor as We}from"@rango-dev/wallets-core/legacy";var k="last-connected-wallets",E="hub-v1-last-connected-wallets";import{Persistor as T}from"@rango-dev/wallets-core/legacy";var A=class{static{s(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,o){if(this.#e===E)return this.#t(t,o);if(this.#e===k)return this.#a(t);throw new Error("Not implemented")}removeWallets(t){if(this.#e===E)return this.#o(t);if(this.#e===k)return this.#c(t);throw new Error("Not implemented")}list(){if(this.#e===E)return this.#r();if(this.#e===k)return this.#n();throw new Error("Not implemented")}removeNamespacesFromWallet(t,o){if(this.#e===E)return this.#s(t,o);throw new Error("Not implemented")}#n(){let o=new T().getItem(k)||[],c={};return o.forEach(a=>{c[a]=[]}),c}#r(){return new T().getItem(E)||{}}#t(t,o){let c=new T,a=c.getItem(this.#e)||{},p=o;if(a[t]){let u=a[t];p=u.concat(o.filter(d=>!u.some(n=>n.namespace===d.namespace)))}c.setItem(this.#e,{...a,[t]:p})}#a(t){let o=new T,c=o.getItem(this.#e)||[];o.setItem(k,c.concat(t))}#o(t){let o=new T,c=o.getItem(this.#e)||{};if(!t){o.setItem(this.#e,{});return}t.forEach(a=>{c[a]&&delete c[a]}),o.setItem(this.#e,c)}#s(t,o){let u=(new T().getItem(this.#e)||{})[t]?.filter(d=>!o.includes(d.namespace));this.#o([t]),u?.length>0&&this.#t(t,u)}#c(t){let o=new T,c=o.getItem(this.#e)||[];if(!t){o.setItem(this.#e,[]);return}o.setItem(k,c.filter(a=>!t.includes(a)))}};function kt(e,t){return e.find(o=>o.type===t)||null}s(kt,"choose");var D={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null};function Z(e,t){if(t.type==="new_state"){let o=e[t.wallet];return o?{...e,[t.wallet]:{...o,[t.name]:t.value}}:{...e,[t.wallet]:{...D,[t.name]:t.value}}}return e}s(Z,"stateReducer");function J(e){return Object.entries(e).filter(([,t])=>t?.connected).map(([t])=>t)}s(J,"connectedWallets");function X(e){return Object.entries(e).map(([t])=>t)}s(X,"availableWallets");function ee(e){let t=new Map;return e.forEach(o=>{let{config:c,...a}=o;t.set(c.type,{actions:a,config:c})}),t}s(ee,"checkWalletProviders");function Et(e){return e?.constructor?.name==="AsyncFunction"}s(Et,"isAsync");function At(e){let{checkInstallation:t=!0}=e.config;return t}s(At,"needsCheckInstallation");async function te({type:e,walletActions:t,getState:o}){if(t.canEagerConnect){let c=new A(k),p=!!c.list()[e];p&&!o(e).connected&&M(),p||c.addWallet(e,[])}}s(te,"tryPersistWallet");function oe({type:e,walletActions:t}){t.canEagerConnect&&new A(k).removeWallets([e])}s(oe,"tryRemoveWalletFromPersistance");function M(){let e=new We;e.getItem(k)&&e.removeItem(k)}s(M,"clearPersistance");function U(e,t){return s((c,a,p,u,d)=>{e({type:"new_state",wallet:c,name:a,value:p}),t&&t(c,a,p,u,d)},"handler")}s(U,"makeEventHandler");import dt from"react";import{createContext as Ne}from"react";var I="Context hasn't been initialized yet.",Ie={async connect(){throw new Error(I)},async disconnect(){throw new Error(I)},async disconnectAll(){throw new Error(I)},async suggestAndConnect(){throw new Error(I)},state(){throw new Error(I)},canSwitchNetworkTo(){throw new Error(I)},providers(){throw new Error(I)},getWalletInfo(){throw new Error(I)},getSigners(){throw new Error(I)},hubProvider(){throw new Error(I)}},b=Ne(Ie);import{LegacyEvents as x}from"@rango-dev/wallets-core/legacy";import"@rango-dev/wallets-core/utils";import{pickVersion as de}from"@rango-dev/wallets-core/utils";import{convertEvmBlockchainMetaToEvmChainInfo as $e}from"@rango-dev/wallets-shared";import{isEvmBlockchain as Ve}from"rango-types";import{useEffect as j,useReducer as Re}from"react";async function ne(e,t){let o=new A(k),c=o.list(),a=Object.keys(c);if(a.length){let p=[];a.forEach(n=>{let l=e.get(n);if(l){let r=t(l);p.push({walletType:n,eagerConnect:r.eagerConnect.bind(r)})}});let u=await Promise.allSettled(p.map(async({eagerConnect:n})=>n())),d=[];u.forEach((n,l)=>{let{status:r}=n;r==="rejected"&&d.push(p[l].walletType)}),d.length&&o.removeWallets(d)}}s(ne,"autoConnect");import{LegacyWallet as xe}from"@rango-dev/wallets-core/legacy";import{useContext as Se,useRef as Te}from"react";function re(e){let t=Te({});function o(c){let a=c.config.type;return typeof t.current[a]>"u"&&(t.current[a]=new xe({config:c.config,handler:e},c.actions)),t.current[a]}return s(o,"updater"),o}s(re,"useInitializers");function Le(){let e=Se(b);if(!e)throw Error("useWallet can only be used within the Provider component");return e}s(Le,"useWallets");import{useEffect as be,useRef as Be}from"react";function ae(e){return!!e.allBlockChains?.length&&!!e.autoConnect}s(ae,"shouldTryAutoConnect");function F(e){let t=Be(!1);be(()=>{ae(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}s(F,"useAutoConnect");function Y(e){let[t,o]=Re(Z,{}),c=re(U(o,e.onUpdateState)),a=e.providers,p=ee(a);F({allBlockChains:e.allBlockChains,autoConnect:e.autoConnect,autoConnectHandler:async()=>ne(p,c)});let u={async connect(d,n){let l=p.get(d);if(!l)throw new Error(`You should add ${d} to provider first.`);let r;n&&n.length>0&&(r=n.find(f=>!!f.network)?.network);let m=await c(l).connect(r,n);return e.autoConnect&&te({type:d,walletActions:l.actions,getState:u.state}),[m]},async disconnect(d){let n=p.get(d);if(!n)throw new Error(`You should add ${d} to provider first.`);await c(n).disconnect(),e.autoConnect&&oe({type:d,walletActions:n.actions})},async disconnectAll(){let d=[];return J(t).forEach(n=>{let l=p.get(n);if(l){let r=c(l);d.push(r.disconnect())}}),e.autoConnect&&M(),await Promise.allSettled(d)},async suggestAndConnect(d,n){let l=p.get(d);if(!l)throw new Error(`You should add ${d} to provider first.`);let r=c(l);if(!n.network)throw new Error("You should pass network to the suggestAndConnect");return await r.suggestAndConnect(n.network)},state(d){return t[d]||D},canSwitchNetworkTo(d,n){let l=p.get(d);if(!l)return!1;let r=c(l);return r.canSwitchNetworkTo?r.canSwitchNetworkTo(n,r.provider):!1},providers(){let d={};return X(t).forEach(n=>{let l=p.get(n);if(l){let r=c(l);d[n]=r.provider}}),d},getWalletInfo(d){let n=p.get(d);if(!n)throw new Error(`You should add ${d} to provider first.`);return n.actions.getWalletInfo(e.allBlockChains||[])},async getSigners(d){let n=p.get(d);if(!n)throw new Error(`You should add ${d} to provider first.`);let l=c(n),r=l.provider;return l.getSigners(r)},hubProvider(){throw new Error("This method is not available on legacy providers.")}};return j(()=>{p.forEach(d=>{let n=c(d),l=s(()=>{n.onInit&&n.onInit()},"runOnInit"),r=s(i=>{i.target&&i.target.readyState==="complete"&&(l(),document.removeEventListener("readystatechange",r))},"initWhenPageIsReady");l(),document.addEventListener("readystatechange",r)})},[]),j(()=>{e.allBlockChains&&p.forEach(n=>{let l=c(n),r=l.getWalletInfo(e.allBlockChains||[]);l.setInfo({supportedBlockchains:r.supportedChains,isContractWallet:!!r.isContractWallet})})},[e.allBlockChains]),j(()=>{p.forEach(d=>{c(d).setHandler(U(o,e.onUpdateState))})},[e.onUpdateState]),u}s(Y,"useLegacyProviders");import{legacyFormatAddressWithNetwork as Fe}from"@rango-dev/wallets-core/legacy";import{CAIP_NAMESPACE as He}from"@rango-dev/wallets-core/namespaces/cosmos";import{CAIP_NAMESPACE as _e}from"@rango-dev/wallets-core/namespaces/ton";import{CAIP_TRON_CHAIN_ID as Oe}from"@rango-dev/wallets-core/namespaces/tron";import{CAIP_BITCOIN_CHAIN_ID as De,CAIP_ZCASH_CHAIN_ID as Me}from"@rango-dev/wallets-core/namespaces/utxo";import{CAIP as Ue}from"@rango-dev/wallets-core/utils";import{getBlockChainNameFromId as je}from"@rango-dev/wallets-shared";import{Err as $,Ok as se}from"ts-results";function Ye(e,t){if(typeof e=="string")return e;if(["solana","xrpl","stellar"].includes(e.namespace.toLowerCase()))return e.namespace.toUpperCase();if(e.namespace.toLowerCase()==="eip155")return"ETH";if(e.reference===De)return"BTC";if(e.reference===Me)return"ZCASH";if(e.namespace.toLowerCase()===_e)return"TON";if(e.namespace.toLowerCase()===He){let c=je(e.reference,t);if(!c)throw new Error(`Network didn't found for given chainId: ${e.reference}`);return c}return e.namespace==="sui"||e.reference===Oe?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}s(Ye,"mapCaipNamespaceToLegacyNetworkName");function H(e,t){let{chainId:o,address:c}=Ue.AccountId.parse(e),a=Ye(o,t);return Fe(c,a)}s(H,"fromAccountIdToLegacyAddressFormat");async function V(e){return e.reduce(async(t,o)=>{let c=await t;try{let a=await o();return[...c,new se(a)]}catch(a){return[...c,new $(a)]}},Promise.resolve([]))}s(V,"runSequentiallyWithoutFailure");function ce(e){return typeof e=="object"&&!Array.isArray(e)}s(ce,"isConnectResultEvm");function ie(e){return Array.isArray(e)}s(ie,"isConnectResultSolana");function le(e){let t=new Set,o=[],c=s((u,d)=>{o=o.filter(n=>n.key!==u?!0:(n.resolve(d),!1))},"removeKeyFromQueue"),a=s(async()=>{let u=o.find(r=>!t.has(r.key));if(!u)return;let{task:d,resolve:n,key:l}=u;t.add(l);try{let r=await d();n(new se(r))}catch(r){e?.onError&&e.onError(r,{removeCurrentKeyFromQueue:()=>c(l,new $(r))}),n(new $(r))}finally{let r=o.findIndex(i=>i.key===l);r>=0&&o.splice(r,1),t.delete(l),a()}},"processQueue");return s(async(u,d)=>new Promise(n=>{o.push({task:u,resolve:n,key:d}),a()}),"queueTask")}s(le,"createQueue");function q(e){let t="0.0.0",o="1.0.0",c=[],a=[];return e.forEach(p=>{try{let u=de(p,o);a.push(u[1])}catch{let u=de(p,t);c.push(u[1])}}),[c,a]}s(q,"separateLegacyAndHubProviders");function S(e,t){return e.find(o=>o.id===t)}s(S,"findProviderByType");var qe=new A(E);function G(e,t){return e.info()?.metadata.properties?.find(a=>a.name==="namespaces")?.value.data.flatMap(a=>a.getSupportedChains(t||[]))||[]}s(G,"getSupportedChainsFromProvider");function pe(e,t,o,c){let a=e.get(t.provider);if(!a)throw new Error("Currently all the events have assigned to a provider. The event doesn't include one.",{cause:t});let p=t.namespace,u=p?a.findByNamespace(p):void 0,d=null,n=null,l;if(u){let[f]=u.state();d=f().accounts,n=f().network,c.lastConnectAttemptParams[t.provider]&&(l=c.lastConnectAttemptParams[t.provider].find(g=>g.namespace===p)?.derivationPath)}let[r]=a.state(),i={connected:r().connected,connecting:r().connecting,installed:r().installed,accounts:d,network:n,reachable:!0,derivationPath:l},m={supportedBlockchains:G(a,c.allBlockChains),isContractWallet:!1,isHub:!0,namespace:p};switch(t.type){case"provider_detected":o(t.provider,x.INSTALLED,!0,i,m);break;case"provider_connecting":o(t.provider,x.CONNECTING,t.value,i,m);break;case"provider_connected":o(t.provider,x.CONNECTED,!0,i,m);break;case"provider_disconnected":o(t.provider,x.PROVIDER_DISCONNECTED,t.provider,i,m),o(t.provider,x.CONNECTED,!1,i,m),o(t.provider,x.ACCOUNTS,null,i,m);break;case"namespace_disconnected":qe.removeNamespacesFromWallet(t.provider,[t.namespace]),o(t.provider,x.NAMESPACE_DISCONNECTED,t.namespace,i,{...m,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&o(t.provider,x.NAMESPACE_DISCONNECTED,t.namespace,i,m);let f=t.accounts.map(g=>H(g,c.allBlockChains||[]));o(t.provider,x.ACCOUNTS,f,i,{...m,namespace:t.namespace})}break;case"namespace_network_switched":o(t.provider,x.NETWORK,t.network,i,{...m,namespace:t.namespace});break}}s(pe,"mapHubEventsToLegacy");function Q(e,t){if(!e.network)return;let o=t.filter(Ve);return $e(o)[e.network]}s(Q,"convertNamespaceNetworkToEvmChainId");function ue(e,t){return Q(e,t)||e.network}s(ue,"tryConvertNamespaceNetworkToChainInfo");function me(e){return ce(e)?{accounts:e.accounts,network:e.network,provider:void 0}:ie(e)?{accounts:e,network:null,provider:void 0}:{accounts:[e],network:null,provider:void 0}}s(me,"transformHubResultToLegacyResult");function fe(e,t){let o=e.getAll();t.filter(a=>!o.get(a.id)).forEach(a=>{e.add(a.id,a),a.init()}),o.forEach(a=>{t.some(u=>u.id===a.id)||e.remove(a.id)})}s(fe,"synchronizeHubWithConfigProviders");function ge(e){return e.namespaceId==="Solana"}s(ge,"isSolanaNamespace");function _(e){return e.namespaceId==="EVM"}s(_,"isEvmNamespace");function B(e){return e.namespaceId==="Cosmos"}s(B,"isCosmosNamespace");import{utils as st}from"@rango-dev/wallets-core/namespaces/evm";import"@rango-dev/wallets-shared";import{cosmosBlockchains as ve}from"rango-types";import{useEffect as Pe,useRef as ke,useState as ct}from"react";import{Ok as it,Result as lt}from"ts-results";import{Provider as Ge}from"@rango-dev/wallets-core";import{legacyIsEvmNamespace as Qe}from"@rango-dev/wallets-core/legacy";import{cosmosBlockchains as Ke}from"rango-types";import{Result as ze}from"ts-results";var O=new A(E);async function Ze(e,t,o){let{getHub:c,allBlockChains:a}=o,p=c().get(e);if(!p)throw new Error(`You should add ${e} to provider first then call 'connect'.`);if(!t)throw new Error("Passing namespace to `connect` is required. ");let u=[];t.forEach(i=>{let m=i.namespace,f=p.findByNamespace(m);if(!f)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${i.namespace})`);u.push([i,f])});let d=u.map(([i,m])=>{let g=(Qe(i)?Q(i,a||[]):void 0)||i.network;return async()=>{let y;if(_(m))y=s(async()=>m.connect(g),"connectNamespacePromise");else if(B(m)){let v=Ke(o.allBlockChains||[]).filter(h=>!!h.chainId);y=s(async()=>m.connect({chainIds:v.filter(h=>h.info&&!h.info.experimental)?.map(h=>h.chainId),customChainIds:v.filter(h=>h.info?.experimental).map(h=>h.chainId)}),"connectNamespacePromise")}else y=s(async()=>m.connect(),"connectNamespacePromise");try{await y()}catch(v){throw v instanceof Error?v:new Error(v)}}}),n=await V(d),l=u.filter((i,m)=>n[m].err).map(i=>i[0]);if(l.length>0&&O.removeNamespacesFromWallet(e,l.map(i=>i.namespace)),!n.some(i=>i.ok))throw new Error(`No namespace connected for ${e}`);return ze.all(...n.filter(i=>i.ok)).unwrap()}s(Ze,"eagerConnect");async function Je(e,t){let o=[],c=[],a=[],p=[];e.forEach(d=>{let n=t.findByNamespace(d.namespace);n?(o.push(d),p.push(async()=>await n.canEagerConnect())):a.push(d)});let u=await V(p);return o.forEach((d,n)=>{u[n].ok&&u[n].val?c.push(d):a.push(d)}),{successNamespaces:c,failedNamespaces:a}}s(Je,"tryRunCanEagerConnect");async function he(e){let{getHub:t,allBlockChains:o,wallets:c}=e,a=O.list(),p=Object.keys(a),u=[];if(p.length){let d=[],n=c?.map(l=>typeof l=="string"?l:l instanceof Ge?l.id:l.config.type);p.forEach(async l=>{if(n&&!n.includes(l)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",l),u.push(l);return}let r=t().get(l),i=a[l].map(g=>({namespace:g.namespace,network:g.network}));if(!i.length||!r){u.push(l);return}let{successNamespaces:m,failedNamespaces:f}=await Je(i,r);if(m.length)f.length&&O.removeNamespacesFromWallet(r.id,f.map(g=>g.namespace));else{u.push(l);return}d.push(Ze(l,m,{allBlockChains:o,getHub:t}).catch(g=>console.warn(g)))}),O.removeWallets(u),await Promise.all(d)}}s(he,"autoConnect");function Ce(e){let t=e.info;if(!t)throw new Error("CosmosChainInfo is required for conversion");let o=Xe(e,t),c=nt(t);return{chain:o,assetList:c}}s(Ce,"convertCosmosMetaToChainRegistry");function Xe(e,t){return{chainName:t.chainName,chainType:"cosmos",chainId:e.chainId||void 0,prettyName:e.displayName,status:e.enabled?"live":"killed",networkType:"mainnet",bech32Prefix:t.bech32Config.bech32PrefixAccAddr,bech32Config:{bech32PrefixAccAddr:t.bech32Config.bech32PrefixAccAddr,bech32PrefixAccPub:t.bech32Config.bech32PrefixAccPub,bech32PrefixValAddr:t.bech32Config.bech32PrefixValAddr,bech32PrefixValPub:t.bech32Config.bech32PrefixValPub,bech32PrefixConsAddr:t.bech32Config.bech32PrefixConsAddr,bech32PrefixConsPub:t.bech32Config.bech32PrefixConsPub},slip44:t.bip44.coinType,fees:{feeTokens:et(t)},staking:{stakingTokens:tt(t)},apis:{rpc:t.rpc?[{address:t.rpc}]:void 0,rest:t.rest?[{address:t.rest}]:void 0},explorers:ot(t),logoURIs:e.logo?{png:window.location.origin+e.logo}:void 0,keywords:t.experimental?["experimental"]:void 0}}s(Xe,"convertToChain");function et(e){return e.feeCurrencies.map(t=>{let o={denom:t.coinMinimalDenom};return e.gasPriceStep&&(o.lowGasPrice=e.gasPriceStep.low,o.averageGasPrice=e.gasPriceStep.average,o.highGasPrice=e.gasPriceStep.high),o})}s(et,"convertFeeTokens");function tt(e){return[{denom:e.stakeCurrency.coinMinimalDenom}]}s(tt,"convertStakingTokens");function ot(e){let t=[];if(e.explorerUrlToTx){let o=e.explorerUrlToTx.split("/tx/")[0];t.push({url:o,txPage:e.explorerUrlToTx.replace(/\{txHash\}|\$\{txHash\}/g,"${txHash}")})}return e.blockExplorerUrls&&e.blockExplorerUrls.length>0&&e.blockExplorerUrls.forEach(o=>{t.some(c=>c.url===o)||t.push({url:o})}),t.length>0?t:void 0}s(ot,"convertExplorers");function nt(e){let t=[];return t.push({denomUnits:[{denom:e.stakeCurrency.coinMinimalDenom,exponent:0},{denom:e.stakeCurrency.coinDenom.toLowerCase(),exponent:e.stakeCurrency.coinDecimals}],base:e.stakeCurrency.coinMinimalDenom,name:e.stakeCurrency.coinDenom,display:e.stakeCurrency.coinDenom.toLowerCase(),symbol:e.stakeCurrency.coinDenom,typeAsset:"sdk.coin",logoURIs:e.stakeCurrency.coinImageUrl?{png:window.location.origin+e.stakeCurrency.coinImageUrl}:void 0,coingeckoId:e.stakeCurrency.coinGeckoId||void 0}),e.currencies.forEach(o=>{o.coinMinimalDenom!==e.stakeCurrency.coinMinimalDenom&&t.push({denomUnits:[{denom:o.coinMinimalDenom,exponent:0},{denom:o.coinDenom.toLowerCase(),exponent:o.coinDecimals}],base:o.coinMinimalDenom,name:o.coinDenom,display:o.coinDenom.toLowerCase(),symbol:o.coinDenom,typeAsset:"sdk.coin",logoURIs:o.coinImageUrl?{png:window.location.origin+o.coinImageUrl}:void 0,coingeckoId:o.coinGeckoId||void 0})}),{chainName:e.chainName,assets:t}}s(nt,"convertToAssetList");import{createStore as rt,Hub as at}from"@rango-dev/wallets-core";import{useRef as ye}from"react";function we(e){let t=ye(null),o=ye(null);function c(){let u=new at({store:a()});return e.forEach(d=>{u.add(d.id,d)}),o.current=u,u}s(c,"createHub");function a(){if(t.current!==null)return t.current;let u=rt();return t.current=u,u}s(a,"getStore");function p(){let u=o.current?.getAll();return!o.current||!u?c():(fe(o.current,e),o.current)}return s(p,"getHub"),{getStore:a,getHub:p}}s(we,"useHubRefs");function K(e){let{getStore:t,getHub:o}=we(e.providers),[,c]=ct(0),a=ke({onUpdateState:e.onUpdateState,allVersionedProviders:e.allVersionedProviders,allBlockChains:e.allBlockChains}),p=ke({}),u=s((r,i)=>{p.current[r]=i||[]},"updateLastConnectAttemptParams"),d=le({onError:(r,i)=>{st.isUserRejectionError(r)&&i.removeCurrentKeyFromQueue()}});Pe(()=>{a.current={onUpdateState:e.onUpdateState,allVersionedProviders:e.allVersionedProviders,allBlockChains:e.allBlockChains}},[e]),Pe(()=>{let r=s(()=>{o().init(e.configs?.walletOptions),c(m=>m+1)},"runOnInit"),i=s(m=>{m.target&&m.target.readyState==="complete"&&(r(),document.removeEventListener("readystatechange",i))},"initHubWhenPageIsReady");r(),document.addEventListener("readystatechange",i),t().subscribe(m=>{if(a.current.onUpdateState)try{pe(o(),m,a.current.onUpdateState,{allBlockChains:a.current.allBlockChains,lastConnectAttemptParams:p.current})}catch(f){console.error(f)}c(f=>f+1)}).flushEvents()},[]),F({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{he({allBlockChains:e.allBlockChains,getHub:o,wallets:e.configs?.wallets})}});let n=new A(E);return{canSwitchNetworkTo(r,i,m){let f=o().get(r);if(!f)throw new Error(`You should add ${r} to provider first then call 'canSwitchNetworkTo'.`);if(!m)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let g=f.findByNamespace(m.namespace);if(!g)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${m.namespace})`);if(!("canSwitchNetwork"in g))return!1;let y=f.info()?.metadata?.properties?.find(h=>h.name==="namespaces");if(!a.current.allBlockChains)throw new Error("Blockchains are not available");let v=y?.value.data.find(h=>h.value===m.namespace)?.getSupportedChains(a.current.allBlockChains);if(!v)throw new Error(`NamespaceMeta is not defined for requested namespace: ${m.namespace}`);return g.canSwitchNetwork({network:i,supportedChains:v})},async connect(r,i){let m=o().get(r);if(!m)throw new Error(`You should add ${r} to provider first then call 'connect'.`);if(!i)throw new Error("Passing namespace to `connect` is required.");u(r,i);let f=[];i.forEach(C=>{let w=C.namespace,W=m.findByNamespace(w);if(!W)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${C.namespace})`);f.push([C,W])});let g=f.map(async([C,w])=>{let W=ue(C,e.allBlockChains||[]),L;if(ge(w))L=s(async()=>w.connect({derivationPath:C.derivationPath}),"connectNamespacePromise");else if(_(w))L=s(async()=>w.connect(W,{derivationPath:C.derivationPath}),"connectNamespacePromise");else if(B(w)){let R=ve(e.allBlockChains||[]).filter(N=>!!N.chainId);L=s(async()=>w.connect({chainIds:R.filter(N=>N.info&&!N.info.experimental)?.map(N=>N.chainId),customChainIds:R.filter(N=>N.info?.experimental).map(N=>N.chainId)}),"connectNamespacePromise")}else L=s(async()=>w.connect(),"connectNamespacePromise");return d(s(async()=>L().then(me).then(R=>({response:R,input:{namespace:C.namespace,network:C.network,supportsEagerConnect:"canEagerConnect"in w}})),"connectNamespaceProcess"),r)}),y=await Promise.all(g),v=y.filter(C=>C.ok).filter(C=>C.val.input.supportsEagerConnect).map(C=>({namespace:C.val.input.namespace,network:C.val.input.network}));v.length>0&&n.addWallet(r,v);let h=y.map(C=>C.andThen(w=>new it(w.response))),P=lt.all(...h);if(P.err)throw P.val;return P.unwrap()},async disconnect(r,i){let m=o().get(r);if(!m)throw new Error(`You should add ${r} to provider first then call 'disconnect'.`);m.getAll().forEach(f=>{let g=!i||i.includes(f.namespaceId),y=f.state()[0]().connected;if(g&&y)return f.disconnect()}),e.autoConnect&&(i?n.removeNamespacesFromWallet(r,i):n.removeWallets([r]))},async disconnectAll(){let r=Array.from(o().getAll().values()).map(async i=>this.disconnect(i.id));return await Promise.allSettled(r)},async getSigners(r){let i=o().get(r);if(!i)throw new Error(`You should add ${r} to provider first.`);let m=i.info();if(!m)throw new Error("Your provider should have required `info`.");let g=m.metadata.properties?.find(y=>y.name==="signers");if(!g)throw new Error("Your provider should contain signers property.");return g.value.getSigners()},getWalletInfo(r){let i=o().get(r);if(!i)throw new Error(`You should add ${r} to provider first.`);let m=i.info();if(!m)throw new Error("Your provider should have required `info`.");let f={DEFAULT:""},{metadata:g}=m,{extensions:y}=g;Object.keys(y).forEach(w=>{let W=w;if(W==="homepage"&&(f.DEFAULT=y[W]||""),["firefox","chrome","brave","edge"].includes(W)){let z=W.toUpperCase();f[z]=y[W]||""}});let v=g.properties,h=v?.find(w=>w.name==="namespaces"),P=v?.find(w=>w.name==="derivationPath"),C=v?.find(w=>w.name==="details");return{name:g.name,img:g.icon,installLink:f,color:"red",supportedChains:G(i,a.current.allBlockChains),isContractWallet:C?.value?.isContractWallet,mobileWallet:C?.value?.mobileWallet,showOnMobile:C?.value?.showOnMobile,needsNamespace:h?.value,needsDerivationPath:P?.value,isHub:!0,properties:g.properties}},providers(){throw new Error("This method is not available on hub providers.")},state(r){let i=o().state(),m=o().get(r),f=i[r];if(!f||!m)throw new Error(`It seems your requested provider doesn't exist in hub. Provider Id: ${r}`);let g=f.namespaces.filter(h=>h.connected).flatMap(h=>h.accounts?.map(P=>H(P,e.allBlockChains||[]))).filter(h=>!!h),y=new Map(Array.from(m.getAll(),([h,P])=>[P.namespaceId,P.state()[0]()]));return{connected:f.connected,connecting:f.connecting,installed:f.installed,reachable:!0,accounts:g,network:null,namespaces:y}},async suggestAndConnect(r,i){let m=o().get(r);if(!m)throw new Error(`You should add ${r} to provider first then call 'suggestAndConnect'.`);let f=m.findByNamespace(i.namespace);if(!f)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${i.namespace})`);if(!("suggest"in f))throw new Error("Suggest is not implemented on the provider");if(!i.network)throw new Error("You should pass network to the suggest and connect");if(B(f)){let g=ve(e.allBlockChains||[])?.filter(P=>P.info&&P.info.experimental).find(P=>P.name===i.network);if(!g)throw new Error(`We couldn't find the suggested chain (${i.network}) in our metadata.`);let{assetList:y,chain:v}=Ce(g);await f.suggest(v,y);let[h]=await this.connect(r,[i]);return h}throw new Error(`Suggest has not been implemented for given chain: ${i.network}`)},hubProvider(){throw new Error("Unreachable code. the method has been implemented in main adapter instance.")}}}s(K,"useHubAdapter");function Ee(e){let{providers:t,...o}=e,[c,a]=q(t),p=Y({...o,providers:c}),u=K({...o,providers:a,allVersionedProviders:t});return{canSwitchNetworkTo(n,l,r){return S(a,n)?u.canSwitchNetworkTo(n,l,r):p.canSwitchNetworkTo(n,l)},async connect(n,l){return S(a,n)?await u.connect(n,l):await p.connect(n,l)},async disconnect(n,l){return S(a,n)?await u.disconnect(n,l):await p.disconnect(n)},async disconnectAll(){return await Promise.allSettled([u.disconnectAll(),p.disconnectAll()])},async getSigners(n){return S(a,n)?u.getSigners(n):p.getSigners(n)},getWalletInfo(n){return S(a,n)?u.getWalletInfo(n):p.getWalletInfo(n)},providers(){return p.providers()},state(n){return S(a,n)?u.state(n):p.state(n)},async suggestAndConnect(n,l){return S(a,n)?u.suggestAndConnect(n,l):await p.suggestAndConnect(n,l)},hubProvider(n){let l=S(a,n);if(l)return l;throw new Error(`You're trying to access ${n} provider which is not found in hub providers. you may try to access a legacy provider or it's not been registered yet.`)}}}s(Ee,"useProviders");function pt(e){let t=Ee(e);return dt.createElement(b.Provider,{value:t},e.children)}s(pt,"Provider");var ut=pt;import{LegacyEvents as gn}from"@rango-dev/wallets-core/legacy";export{gn as Events,ut as Provider,X as availableWallets,ee as checkWalletProviders,kt as choose,M as clearPersistance,J as connectedWallets,D as defaultWalletState,Et as isAsync,U as makeEventHandler,At as needsCheckInstallation,Z as stateReducer,te as tryPersistWallet,oe as tryRemoveWalletFromPersistance,Le as useWallets};
|
|
1
|
+
var Ce=Object.defineProperty;var c=(e,t)=>Ce(e,"name",{value:t,configurable:!0});import{Persistor as Pe}from"@rango-dev/wallets-core/legacy";var w="last-connected-wallets",E="hub-v1-last-connected-wallets";import{Persistor as T}from"@rango-dev/wallets-core/legacy";var W=class{static{c(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,o){if(this.#e===E)return this.#t(t,o);if(this.#e===w)return this.#a(t);throw new Error("Not implemented")}removeWallets(t){if(this.#e===E)return this.#o(t);if(this.#e===w)return this.#c(t);throw new Error("Not implemented")}list(){if(this.#e===E)return this.#n();if(this.#e===w)return this.#r();throw new Error("Not implemented")}removeNamespacesFromWallet(t,o){if(this.#e===E)return this.#s(t,o);throw new Error("Not implemented")}#r(){let o=new T().getItem(w)||[],i={};return o.forEach(a=>{i[a]=[]}),i}#n(){return new T().getItem(E)||{}}#t(t,o){let i=new T,a=i.getItem(this.#e)||{},p=o;if(a[t]){let u=a[t];p=u.concat(o.filter(d=>!u.some(r=>r.namespace===d.namespace)))}i.setItem(this.#e,{...a,[t]:p})}#a(t){let o=new T,i=o.getItem(this.#e)||[];o.setItem(w,i.concat(t))}#o(t){let o=new T,i=o.getItem(this.#e)||{};if(!t){o.setItem(this.#e,{});return}t.forEach(a=>{i[a]&&delete i[a]}),o.setItem(this.#e,i)}#s(t,o){let u=(new T().getItem(this.#e)||{})[t]?.filter(d=>!o.includes(d.namespace));this.#o([t]),u?.length>0&&this.#t(t,u)}#c(t){let o=new T,i=o.getItem(this.#e)||[];if(!t){o.setItem(this.#e,[]);return}o.setItem(w,i.filter(a=>!t.includes(a)))}};function dt(e,t){return e.find(o=>o.type===t)||null}c(dt,"choose");var H={connected:!1,connecting:!1,reachable:!1,installed:!1,accounts:null,network:null};function Q(e,t){if(t.type==="new_state"){let o=e[t.wallet];return o?{...e,[t.wallet]:{...o,[t.name]:t.value}}:{...e,[t.wallet]:{...H,[t.name]:t.value}}}return e}c(Q,"stateReducer");function K(e){return Object.entries(e).filter(([,t])=>t?.connected).map(([t])=>t)}c(K,"connectedWallets");function z(e){return Object.entries(e).map(([t])=>t)}c(z,"availableWallets");function Z(e){let t=new Map;return e.forEach(o=>{let{config:i,...a}=o;t.set(i.type,{actions:a,config:i})}),t}c(Z,"checkWalletProviders");function pt(e){return e?.constructor?.name==="AsyncFunction"}c(pt,"isAsync");function ut(e){let{checkInstallation:t=!0}=e.config;return t}c(ut,"needsCheckInstallation");async function J({type:e,walletActions:t,getState:o}){if(t.canEagerConnect){let i=new W(w),p=!!i.list()[e];p&&!o(e).connected&&_(),p||i.addWallet(e,[])}}c(J,"tryPersistWallet");function X({type:e,walletActions:t}){t.canEagerConnect&&new W(w).removeWallets([e])}c(X,"tryRemoveWalletFromPersistance");function _(){let e=new Pe;e.getItem(w)&&e.removeItem(w)}c(_,"clearPersistance");function O(e,t){return c((i,a,p,u,d)=>{e({type:"new_state",wallet:i,name:a,value:p}),t&&t(i,a,p,u,d)},"handler")}c(O,"makeEventHandler");import Je from"react";import{createContext as Ee}from"react";var A="Context hasn't been initialized yet.",We={async connect(){throw new Error(A)},async disconnect(){throw new Error(A)},async disconnectAll(){throw new Error(A)},async suggestAndConnect(){throw new Error(A)},state(){throw new Error(A)},canSwitchNetworkTo(){throw new Error(A)},providers(){throw new Error(A)},getWalletInfo(){throw new Error(A)},getSigners(){throw new Error(A)},hubProvider(){throw new Error(A)}},x=Ee(We);import{LegacyEvents as S}from"@rango-dev/wallets-core/legacy";import"@rango-dev/wallets-core/utils";import{pickVersion as ce}from"@rango-dev/wallets-core/utils";import{convertEvmBlockchainMetaToEvmChainInfo as Oe}from"@rango-dev/wallets-shared";import{isEvmBlockchain as De}from"rango-types";import{useEffect as D,useReducer as Le}from"react";async function ee(e,t){let o=new W(w),i=o.list(),a=Object.keys(i);if(a.length){let p=[];a.forEach(r=>{let s=e.get(r);if(s){let n=t(s);p.push({walletType:r,eagerConnect:n.eagerConnect.bind(n)})}});let u=await Promise.allSettled(p.map(async({eagerConnect:r})=>r())),d=[];u.forEach((r,s)=>{let{status:n}=r;n==="rejected"&&d.push(p[s].walletType)}),d.length&&o.removeWallets(d)}}c(ee,"autoConnect");import{LegacyWallet as ke}from"@rango-dev/wallets-core/legacy";import{useContext as Ne,useRef as Ae}from"react";function te(e){let t=Ae({});function o(i){let a=i.config.type;return typeof t.current[a]>"u"&&(t.current[a]=new ke({config:i.config,handler:e},i.actions)),t.current[a]}return c(o,"updater"),o}c(te,"useInitializers");function Se(){let e=Ne(x);if(!e)throw Error("useWallet can only be used within the Provider component");return e}c(Se,"useWallets");import{useEffect as Ie,useRef as Te}from"react";function oe(e){return!!e.allBlockChains?.length&&!!e.autoConnect}c(oe,"shouldTryAutoConnect");function b(e){let t=Te(!1);Ie(()=>{oe(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}c(b,"useAutoConnect");function M(e){let[t,o]=Le(Q,{}),i=te(O(o,e.onUpdateState)),a=e.providers,p=Z(a);b({allBlockChains:e.allBlockChains,autoConnect:e.autoConnect,autoConnectHandler:async()=>ee(p,i)});let u={async connect(d,r){let s=p.get(d);if(!s)throw new Error(`You should add ${d} to provider first.`);let n;r&&r.length>0&&(n=r.find(f=>!!f.network)?.network);let m=await i(s).connect(n,r);return e.autoConnect&&J({type:d,walletActions:s.actions,getState:u.state}),[m]},async disconnect(d){let r=p.get(d);if(!r)throw new Error(`You should add ${d} to provider first.`);await i(r).disconnect(),e.autoConnect&&X({type:d,walletActions:r.actions})},async disconnectAll(){let d=[];return K(t).forEach(r=>{let s=p.get(r);if(s){let n=i(s);d.push(n.disconnect())}}),e.autoConnect&&_(),await Promise.allSettled(d)},async suggestAndConnect(d,r){let s=p.get(d);if(!s)throw new Error(`You should add ${d} to provider first.`);let n=i(s);if(!r.network)throw new Error("You should pass network to the suggestAndConnect");return await n.suggestAndConnect(r.network)},state(d){return t[d]||H},canSwitchNetworkTo(d,r){let s=p.get(d);if(!s)return!1;let n=i(s);return n.canSwitchNetworkTo?n.canSwitchNetworkTo(r,n.provider):!1},providers(){let d={};return z(t).forEach(r=>{let s=p.get(r);if(s){let n=i(s);d[r]=n.provider}}),d},getWalletInfo(d){let r=p.get(d);if(!r)throw new Error(`You should add ${d} to provider first.`);return r.actions.getWalletInfo(e.allBlockChains||[])},async getSigners(d){let r=p.get(d);if(!r)throw new Error(`You should add ${d} to provider first.`);let s=i(r),n=s.provider;return s.getSigners(n)},hubProvider(){throw new Error("This method is not available on legacy providers.")}};return D(()=>{p.forEach(d=>{let r=i(d),s=c(()=>{r.onInit&&r.onInit()},"runOnInit"),n=c(l=>{l.target&&l.target.readyState==="complete"&&(s(),document.removeEventListener("readystatechange",n))},"initWhenPageIsReady");s(),document.addEventListener("readystatechange",n)})},[]),D(()=>{e.allBlockChains&&p.forEach(r=>{let s=i(r),n=s.getWalletInfo(e.allBlockChains||[]);s.setInfo({supportedBlockchains:n.supportedChains,isContractWallet:!!n.isContractWallet})})},[e.allBlockChains]),D(()=>{p.forEach(d=>{i(d).setHandler(O(o,e.onUpdateState))})},[e.onUpdateState]),u}c(M,"useLegacyProviders");import{legacyFormatAddressWithNetwork as xe}from"@rango-dev/wallets-core/legacy";import{CAIP_NAMESPACE as be}from"@rango-dev/wallets-core/namespaces/ton";import{CAIP_TRON_CHAIN_ID as Be}from"@rango-dev/wallets-core/namespaces/tron";import{CAIP_BITCOIN_CHAIN_ID as Re,CAIP_ZCASH_CHAIN_ID as Fe}from"@rango-dev/wallets-core/namespaces/utxo";import{CAIP as He}from"@rango-dev/wallets-core/utils";import{Err as j,Ok as re}from"ts-results";function _e(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===Re?"BTC":e.reference===Fe?"ZCASH":e.namespace.toLowerCase()===be?"TON":e.namespace==="sui"||e.reference===Be?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}c(_e,"mapCaipNamespaceToLegacyNetworkName");function B(e){let{chainId:t,address:o}=He.AccountId.parse(e),i=_e(t);return xe(o,i)}c(B,"fromAccountIdToLegacyAddressFormat");async function U(e){return e.reduce(async(t,o)=>{let i=await t;try{let a=await o();return[...i,new re(a)]}catch(a){return[...i,new j(a)]}},Promise.resolve([]))}c(U,"runSequentiallyWithoutFailure");function ne(e){return typeof e=="object"&&!Array.isArray(e)}c(ne,"isConnectResultEvm");function ae(e){return Array.isArray(e)}c(ae,"isConnectResultSolana");function se(e){let t=new Set,o=[],i=c((u,d)=>{o=o.filter(r=>r.key!==u?!0:(r.resolve(d),!1))},"removeKeyFromQueue"),a=c(async()=>{let u=o.find(n=>!t.has(n.key));if(!u)return;let{task:d,resolve:r,key:s}=u;t.add(s);try{let n=await d();r(new re(n))}catch(n){e?.onError&&e.onError(n,{removeCurrentKeyFromQueue:()=>i(s,new j(n))}),r(new j(n))}finally{let n=o.findIndex(l=>l.key===s);n>=0&&o.splice(n,1),t.delete(s),a()}},"processQueue");return c(async(u,d)=>new Promise(r=>{o.push({task:u,resolve:r,key:d}),a()}),"queueTask")}c(se,"createQueue");function Y(e){let t="0.0.0",o="1.0.0",i=[],a=[];return e.forEach(p=>{try{let u=ce(p,o);a.push(u[1])}catch{let u=ce(p,t);i.push(u[1])}}),[i,a]}c(Y,"separateLegacyAndHubProviders");function I(e,t){return e.find(o=>o.id===t)}c(I,"findProviderByType");var Me=new W(E);function $(e,t){return e.info()?.metadata.properties?.find(a=>a.name==="namespaces")?.value.data.flatMap(a=>a.getSupportedChains(t||[]))||[]}c($,"getSupportedChainsFromProvider");function ie(e,t,o,i){let a=e.get(t.provider);if(!a)throw new Error("Currently all the events have assigned to a provider. The event doesn't include one.",{cause:t});let p=t.namespace,u=p?a.findByNamespace(p):void 0,d=null,r=null,s;if(u){let[f]=u.state();d=f().accounts,r=f().network,i.lastConnectAttemptParams[t.provider]&&(s=i.lastConnectAttemptParams[t.provider].find(g=>g.namespace===p)?.derivationPath)}let[n]=a.state(),l={connected:n().connected,connecting:n().connecting,installed:n().installed,accounts:d,network:r,reachable:!0,derivationPath:s},m={supportedBlockchains:$(a,i.allBlockChains),isContractWallet:!1,isHub:!0,namespace:p};switch(t.type){case"provider_detected":o(t.provider,S.INSTALLED,!0,l,m);break;case"provider_connecting":o(t.provider,S.CONNECTING,t.value,l,m);break;case"provider_connected":o(t.provider,S.CONNECTED,!0,l,m);break;case"provider_disconnected":o(t.provider,S.PROVIDER_DISCONNECTED,t.provider,l,m),o(t.provider,S.CONNECTED,!1,l,m),o(t.provider,S.ACCOUNTS,null,l,m);break;case"namespace_disconnected":Me.removeNamespacesFromWallet(t.provider,[t.namespace]),o(t.provider,S.NAMESPACE_DISCONNECTED,t.namespace,l,{...m,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&o(t.provider,S.NAMESPACE_DISCONNECTED,t.namespace,l,m);let f=t.accounts.map(g=>B(g));o(t.provider,S.ACCOUNTS,f,l,{...m,namespace:t.namespace})}break;case"namespace_network_switched":o(t.provider,S.NETWORK,t.network,l,{...m,namespace:t.namespace});break}}c(ie,"mapHubEventsToLegacy");function q(e,t){if(!e.network)return;let o=t.filter(De);return Oe(o)[e.network]}c(q,"convertNamespaceNetworkToEvmChainId");function le(e,t){return q(e,t)||e.network}c(le,"tryConvertNamespaceNetworkToChainInfo");function de(e){return ne(e)?{accounts:e.accounts,network:e.network,provider:void 0}:ae(e)?{accounts:e,network:null,provider:void 0}:{accounts:[e],network:null,provider:void 0}}c(de,"transformHubResultToLegacyResult");function pe(e,t){let o=e.getAll();t.filter(a=>!o.get(a.id)).forEach(a=>{e.add(a.id,a),a.init()}),o.forEach(a=>{t.some(u=>u.id===a.id)||e.remove(a.id)})}c(pe,"synchronizeHubWithConfigProviders");function ue(e){return e.namespaceId==="Solana"}c(ue,"isSolanaNamespace");function R(e){return e.namespaceId==="EVM"}c(R,"isEvmNamespace");import{utils as Qe}from"@rango-dev/wallets-core/namespaces/evm";import"@rango-dev/wallets-shared";import{useEffect as ye,useRef as he,useState as Ke}from"react";import{Ok as ze,Result as Ze}from"ts-results";import{Provider as je}from"@rango-dev/wallets-core";import{legacyIsEvmNamespace as Ue}from"@rango-dev/wallets-core/legacy";import{Result as Ye}from"ts-results";var F=new W(E);async function $e(e,t,o){let{getHub:i,allBlockChains:a}=o,p=i().get(e);if(!p)throw new Error(`You should add ${e} to provider first then call 'connect'.`);if(!t)throw new Error("Passing namespace to `connect` is required. ");let u=[];t.forEach(l=>{let m=l.namespace,f=p.findByNamespace(m);if(!f)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${l.namespace})`);u.push([l,f])});let d=u.map(([l,m])=>{let g=(Ue(l)?q(l,a||[]):void 0)||l.network;return async()=>{let h;R(m)?h=c(async()=>m.connect(g),"connectNamespacePromise"):h=c(async()=>m.connect(),"connectNamespacePromise");try{await h()}catch(C){throw C instanceof Error?C:new Error(C)}}}),r=await U(d),s=u.filter((l,m)=>r[m].err).map(l=>l[0]);if(s.length>0&&F.removeNamespacesFromWallet(e,s.map(l=>l.namespace)),!r.some(l=>l.ok))throw new Error(`No namespace connected for ${e}`);return Ye.all(...r.filter(l=>l.ok)).unwrap()}c($e,"eagerConnect");async function qe(e,t){let o=[],i=[],a=[],p=[];e.forEach(d=>{let r=t.findByNamespace(d.namespace);r?(o.push(d),p.push(async()=>await r.canEagerConnect())):a.push(d)});let u=await U(p);return o.forEach((d,r)=>{u[r].ok&&u[r].val?i.push(d):a.push(d)}),{successNamespaces:i,failedNamespaces:a}}c(qe,"tryRunCanEagerConnect");async function me(e){let{getHub:t,allBlockChains:o,wallets:i}=e,a=F.list(),p=Object.keys(a),u=[];if(p.length){let d=[],r=i?.map(s=>typeof s=="string"?s:s instanceof je?s.id:s.config.type);p.forEach(async s=>{if(r&&!r.includes(s)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",s),u.push(s);return}let n=t().get(s),l=a[s].map(g=>({namespace:g.namespace,network:g.network}));if(!l.length||!n){u.push(s);return}let{successNamespaces:m,failedNamespaces:f}=await qe(l,n);if(m.length)f.length&&F.removeNamespacesFromWallet(n.id,f.map(g=>g.namespace));else{u.push(s);return}d.push($e(s,m,{allBlockChains:o,getHub:t}).catch(g=>console.warn(g)))}),F.removeWallets(u),await Promise.all(d)}}c(me,"autoConnect");import{createStore as Ve,Hub as Ge}from"@rango-dev/wallets-core";import{useRef as fe}from"react";function ge(e){let t=fe(null),o=fe(null);function i(){let u=new Ge({store:a()});return e.forEach(d=>{u.add(d.id,d)}),o.current=u,u}c(i,"createHub");function a(){if(t.current!==null)return t.current;let u=Ve();return t.current=u,u}c(a,"getStore");function p(){let u=o.current?.getAll();return!o.current||!u?i():(pe(o.current,e),o.current)}return c(p,"getHub"),{getStore:a,getHub:p}}c(ge,"useHubRefs");function V(e){let{getStore:t,getHub:o}=ge(e.providers),[,i]=Ke(0),a=he({onUpdateState:e.onUpdateState,allVersionedProviders:e.allVersionedProviders,allBlockChains:e.allBlockChains}),p=he({}),u=c((n,l)=>{p.current[n]=l||[]},"updateLastConnectAttemptParams"),d=se({onError:(n,l)=>{Qe.isUserRejectionError(n)&&l.removeCurrentKeyFromQueue()}});ye(()=>{a.current={onUpdateState:e.onUpdateState,allVersionedProviders:e.allVersionedProviders,allBlockChains:e.allBlockChains}},[e]),ye(()=>{let n=c(()=>{o().init(e.configs?.walletOptions),i(m=>m+1)},"runOnInit"),l=c(m=>{m.target&&m.target.readyState==="complete"&&(n(),document.removeEventListener("readystatechange",l))},"initHubWhenPageIsReady");n(),document.addEventListener("readystatechange",l),t().subscribe(m=>{if(a.current.onUpdateState)try{ie(o(),m,a.current.onUpdateState,{allBlockChains:a.current.allBlockChains,lastConnectAttemptParams:p.current})}catch(f){console.error(f)}i(f=>f+1)}).flushEvents()},[]),b({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{me({allBlockChains:e.allBlockChains,getHub:o,wallets:e.configs?.wallets})}});let r=new W(E);return{canSwitchNetworkTo(n,l,m){let f=o().get(n);if(!f)throw new Error(`You should add ${n} to provider first then call 'canSwitchNetworkTo'.`);if(!m)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let g=f.findByNamespace(m.namespace);if(!g)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${m.namespace})`);if(!("canSwitchNetwork"in g))return!1;let h=f.info()?.metadata?.properties?.find(P=>P.name==="namespaces");if(!a.current.allBlockChains)throw new Error("Blockchains are not available");let C=h?.value.data.find(P=>P.value===m.namespace)?.getSupportedChains(a.current.allBlockChains);if(!C)throw new Error(`NamespaceMeta is not defined for requested namespace: ${m.namespace}`);return g.canSwitchNetwork({network:l,supportedChains:C})},async connect(n,l){let m=o().get(n);if(!m)throw new Error(`You should add ${n} to provider first then call 'connect'.`);if(!l)throw new Error("Passing namespace to `connect` is required.");u(n,l);let f=[];l.forEach(y=>{let v=y.namespace,N=m.findByNamespace(v);if(!N)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${y.namespace})`);f.push([y,N])});let g=f.map(async([y,v])=>{let N=le(y,e.allBlockChains||[]),L;return ue(v)?L=c(async()=>v.connect({derivationPath:y.derivationPath}),"connectNamespacePromise"):R(v)?L=c(async()=>v.connect(N,{derivationPath:y.derivationPath}),"connectNamespacePromise"):L=c(async()=>v.connect(),"connectNamespacePromise"),d(c(async()=>L().then(de).then(we=>({response:we,input:{namespace:y.namespace,network:y.network,supportsEagerConnect:"canEagerConnect"in v}})),"connectNamespaceProcess"),n)}),h=await Promise.all(g),C=h.filter(y=>y.ok).filter(y=>y.val.input.supportsEagerConnect).map(y=>({namespace:y.val.input.namespace,network:y.val.input.network}));C.length>0&&r.addWallet(n,C);let P=h.map(y=>y.andThen(v=>new ze(v.response))),k=Ze.all(...P);if(k.err)throw k.val;return k.unwrap()},async disconnect(n,l){let m=o().get(n);if(!m)throw new Error(`You should add ${n} to provider first then call 'disconnect'.`);m.getAll().forEach(f=>{let g=!l||l.includes(f.namespaceId),h=f.state()[0]().connected;if(g&&h)return f.disconnect()}),e.autoConnect&&(l?r.removeNamespacesFromWallet(n,l):r.removeWallets([n]))},async disconnectAll(){let n=Array.from(o().getAll().values()).map(async l=>this.disconnect(l.id));return await Promise.allSettled(n)},async getSigners(n){let l=o().get(n);if(!l)throw new Error(`You should add ${n} to provider first.`);let m=l.info();if(!m)throw new Error("Your provider should have required `info`.");let g=m.metadata.properties?.find(h=>h.name==="signers");if(!g)throw new Error("Your provider should contain signers property.");return g.value.getSigners()},getWalletInfo(n){let l=o().get(n);if(!l)throw new Error(`You should add ${n} to provider first.`);let m=l.info();if(!m)throw new Error("Your provider should have required `info`.");let f={DEFAULT:""},{metadata:g}=m,{extensions:h}=g;Object.keys(h).forEach(v=>{let N=v;if(N==="homepage"&&(f.DEFAULT=h[N]||""),["firefox","chrome","brave","edge"].includes(N)){let G=N.toUpperCase();f[G]=h[N]||""}});let C=g.properties,P=C?.find(v=>v.name==="namespaces"),k=C?.find(v=>v.name==="derivationPath"),y=C?.find(v=>v.name==="details");return{name:g.name,img:g.icon,installLink:f,color:"red",supportedChains:$(l,a.current.allBlockChains),isContractWallet:y?.value?.isContractWallet,mobileWallet:y?.value?.mobileWallet,showOnMobile:y?.value?.showOnMobile,needsNamespace:P?.value,needsDerivationPath:k?.value,isHub:!0,properties:g.properties}},providers(){throw new Error("This method is not available on hub providers.")},state(n){let l=o().state(),m=o().get(n),f=l[n];if(!f||!m)throw new Error(`It seems your requested provider doesn't exist in hub. Provider Id: ${n}`);let g=f.namespaces.filter(P=>P.connected).flatMap(P=>P.accounts?.map(k=>B(k))).filter(P=>!!P),h=new Map(Array.from(m.getAll(),([P,k])=>[k.namespaceId,k.state()[0]()]));return{connected:f.connected,connecting:f.connecting,installed:f.installed,reachable:!0,accounts:g,network:null,namespaces:h}},async suggestAndConnect(n,l){let m=o().get(n);if(!m)throw new Error(`You should add ${n} to provider first then call 'suggestAndConnect'.`);let f=m.findByNamespace(l.namespace);throw f?"suggest"in f?l.network?new Error(`Suggest has not been implemented for given chain: ${l.network}`):new Error("You should pass network to the suggest and connect"):new Error("Suggest is not implemented on the provider"):new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${l.namespace})`)},hubProvider(){throw new Error("Unreachable code. the method has been implemented in main adapter instance.")}}}c(V,"useHubAdapter");function ve(e){let{providers:t,...o}=e,[i,a]=Y(t),p=M({...o,providers:i}),u=V({...o,providers:a,allVersionedProviders:t});return{canSwitchNetworkTo(r,s,n){return I(a,r)?u.canSwitchNetworkTo(r,s,n):p.canSwitchNetworkTo(r,s)},async connect(r,s){return I(a,r)?await u.connect(r,s):await p.connect(r,s)},async disconnect(r,s){return I(a,r)?await u.disconnect(r,s):await p.disconnect(r)},async disconnectAll(){return await Promise.allSettled([u.disconnectAll(),p.disconnectAll()])},async getSigners(r){return I(a,r)?u.getSigners(r):p.getSigners(r)},getWalletInfo(r){return I(a,r)?u.getWalletInfo(r):p.getWalletInfo(r)},providers(){return p.providers()},state(r){return I(a,r)?u.state(r):p.state(r)},async suggestAndConnect(r,s){return I(a,r)?u.suggestAndConnect(r,s):await p.suggestAndConnect(r,s)},hubProvider(r){let s=I(a,r);if(s)return s;throw new Error(`You're trying to access ${r} provider which is not found in hub providers. you may try to access a legacy provider or it's not been registered yet.`)}}}c(ve,"useProviders");function Xe(e){let t=ve(e);return Je.createElement(x.Provider,{value:t},e.children)}c(Xe,"Provider");var et=Xe;import{LegacyEvents as Ko}from"@rango-dev/wallets-core/legacy";export{Ko as Events,et as Provider,z as availableWallets,Z as checkWalletProviders,dt as choose,_ as clearPersistance,K as connectedWallets,H as defaultWalletState,pt as isAsync,O as makeEventHandler,ut as needsCheckInstallation,Q as stateReducer,J as tryPersistWallet,X as tryRemoveWalletFromPersistance,Se as useWallets};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|