@rango-dev/wallets-react 0.49.2-next.0 → 0.49.2-next.2

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/dist/hub/mod.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { getHubProviders, findProviderByType } from './utils.js';
1
+ export { findProviderByType } from './utils.js';
2
2
  export { useHubAdapter } from './useHubAdapter.js';
3
3
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/hub/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/hub/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -6,9 +6,7 @@ import type { Hub, Provider, ProxiedNamespace, WalletType } from '@hub3js/core';
6
6
  import type { Event } from '@hub3js/core/store';
7
7
  import type { Chain as AddEthereumChainParameter, EvmActions } from '@hub3js/evm';
8
8
  import type { SolanaActions } from '@hub3js/solana';
9
- import { type VersionedProviders } from '@hub3js/core/utils';
10
9
  import { type BlockchainMeta } from 'rango-types';
11
- export declare function getHubProviders(providers: VersionedProviders[]): Provider[];
12
10
  export declare function findProviderByType(providers: Provider[], type: string): Provider | undefined;
13
11
  export declare function mapHubEventsToLegacy(hub: Hub, event: Event, onUpdateState: WalletEventHandler, metadata: {
14
12
  allBlockChains: ProviderProps['allBlockChains'];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hub/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACxB,YAAY,IAAI,kBAAkB,EACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EACV,KAAK,IAAI,yBAAyB,EAClC,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAe,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAQ1E,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,aAAa,CAAC;AAYnE,wBAAgB,eAAe,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAU3E;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,EAAE,MAAM,GACX,QAAQ,GAAG,SAAS,CAEtB;AAWD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,kBAAkB,EACjC,QAAQ,EAAE;IACR,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,wBAAwB,EAAE;QACxB,CAAC,IAAI,EAAE,UAAU,GAAG,wBAAwB,EAAE,CAAC;KAChD,CAAC;CACH,GACA,IAAI,CAqLN;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,cAAc,EAAE,GACrB,yBAAyB,GAAG,SAAS,CASvC;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,cAAc,EAAE,GACrB,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAMhD;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GACxD,aAAa,CAiBf;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,sBAAsB,EAAE,QAAQ,EAAE,QAwBnC;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,aAAa,CAAC,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,CAE5D;AACD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,UAAU,CAAC,GAAG;IAAE,WAAW,EAAE,KAAK,CAAA;CAAE,CAEtD;AACD,wBAAgB,eAAe,CAC7B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,WAAW,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAExD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/hub/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EACV,aAAa,EACb,wBAAwB,EACxB,YAAY,IAAI,kBAAkB,EACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EACV,KAAK,IAAI,yBAAyB,EAClC,UAAU,EACX,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AASpD,OAAO,EAAE,KAAK,cAAc,EAAmB,MAAM,aAAa,CAAC;AAYnE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,QAAQ,EAAE,EACrB,IAAI,EAAE,MAAM,GACX,QAAQ,GAAG,SAAS,CAEtB;AAWD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,kBAAkB,EACjC,QAAQ,EAAE;IACR,cAAc,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,wBAAwB,EAAE;QACxB,CAAC,IAAI,EAAE,UAAU,GAAG,wBAAwB,EAAE,CAAC;KAChD,CAAC;CACH,GACA,IAAI,CAqLN;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,cAAc,EAAE,GACrB,yBAAyB,GAAG,SAAS,CASvC;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,wBAAwB,EACnC,IAAI,EAAE,cAAc,EAAE,GACrB,MAAM,GAAG,yBAAyB,GAAG,SAAS,CAMhD;AAED,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC,GACxD,aAAa,CAiBf;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,GAAG,EACR,sBAAsB,EAAE,QAAQ,EAAE,QAwBnC;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,aAAa,CAAC,GAAG;IAAE,WAAW,EAAE,QAAQ,CAAA;CAAE,CAE5D;AACD,wBAAgB,cAAc,CAC5B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,UAAU,CAAC,GAAG;IAAE,WAAW,EAAE,KAAK,CAAA;CAAE,CAEtD;AACD,wBAAgB,eAAe,CAC7B,EAAE,EAAE,oBAAoB,GACvB,EAAE,IAAI,oBAAoB,GAC3B,gBAAgB,CAAC,WAAW,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAExD"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var ce=Object.defineProperty;var o=(e,t)=>ce(e,"name",{value:t,configurable:!0});import $e from"react";import{createContext as ie}from"react";var A="Context hasn't been initialized yet.",le={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)},getWalletInfo(){throw new Error(A)},getSigners(){throw new Error(A)},hubProvider(){throw new Error(A)}},x=ie(le);import{pickVersion as ve}from"@hub3js/core/utils";import{convertEvmBlockchainMetaToEvmChainInfo as Ne,formatAddressWithNetwork as Pe,getBlockChainNameFromId as ke,getSupportedChainsFromProvider as Ee}from"@rango-dev/internal-blockchains";import{AccountId as Ae}from"caip";import{isEvmBlockchain as Ie}from"rango-types";var R=(u=>(u.CONNECTED="connected",u.CONNECTING="connecting",u.REACHABLE="reachable",u.INSTALLED="installed",u.ACCOUNTS="accounts",u.NETWORK="network",u.NAMESPACE_DISCONNECTED="namespace_disconnected",u.PROVIDER_DISCONNECTED="provider_disconnected",u))(R||{});var k="hub-v1-last-connected-wallets";import{CAIP_BITCOIN_CHAIN_ID as pe,CAIP_BITCOINCASH_CHAIN_ID as ue,CAIP_DOGECOIN_CHAIN_ID as me,CAIP_LITECOIN_CHAIN_ID as de,CAIP_ZCASH_CHAIN_ID as fe}from"@hub3js/bip122";import{CAIP_NAMESPACE as he}from"@hub3js/tvm";import{formatAddressWithNetwork as Ce}from"@rango-dev/internal-blockchains";import{CAIP_TRON_CHAIN_ID as we}from"@rango-dev/wallets-core/namespaces/tron";import{AccountId as ge}from"caip";import{Err as H,Ok as q}from"ts-results";function ye(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===pe?"BTC":e.reference===fe?"ZCASH":e.reference===de?"LTC":e.reference===me?"DOGE":e.reference===ue?"BCH":e.namespace.toLowerCase()===he?"TON":e.namespace==="sui"||e.reference===we?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}o(ye,"mapCaipNamespaceToLegacyNetworkName");function S(e){let{chainId:t,address:n}=ge.parse(e),c=ye(t);return Ce(n,c)}o(S,"fromAccountIdToLegacyAddressFormat");async function L(e){return e.reduce(async(t,n)=>{let c=await t;try{let s=await n();return[...c,new q(s)]}catch(s){return[...c,new H(s)]}},Promise.resolve([]))}o(L,"runSequentiallyWithoutFailure");function $(e){return typeof e=="object"&&!Array.isArray(e)}o($,"isConnectResultEvm");function K(e){return Array.isArray(e)}o(K,"isConnectResultSolana");function Y(e){let t=new Set,n=[],c=o((p,m)=>{n=n.filter(u=>u.key!==p?!0:(u.resolve(m),!1))},"removeKeyFromQueue"),s=o(async()=>{let p=n.find(g=>!t.has(g.key));if(!p)return;let{task:m,resolve:u,key:f}=p;t.add(f);try{let g=await m();u(new q(g))}catch(g){e?.onError&&e.onError(g,{removeCurrentKeyFromQueue:()=>c(f,new H(g))}),u(new H(g))}finally{let g=n.findIndex(r=>r.key===f);g>=0&&n.splice(g,1),t.delete(f),s()}},"processQueue");return o(async(p,m)=>new Promise(u=>{n.push({task:p,resolve:u,key:m}),s()}),"queueTask")}o(Y,"createQueue");function Q(e){return!!e.allBlockChains?.length&&!!e.autoConnect}o(Q,"shouldTryAutoConnect");var T=class{static{o(this,"Persistor")}getItem(t){let n=localStorage.getItem(t);return n?JSON.parse(n):null}setItem(t,n){localStorage.setItem(t,JSON.stringify(n))}removeItem(t){localStorage.removeItem(t)}};var I=class{static{o(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,n){if(this.#e===k)return this.#t(t,n);throw new Error("Not implemented")}removeWallets(t){if(this.#e===k)return this.#n(t);throw new Error("Not implemented")}list(){if(this.#e===k)return this.#r();throw new Error("Not implemented")}removeNamespacesFromWallet(t,n){if(this.#e===k)return this.#o(t,n);throw new Error("Not implemented")}#r(){return new T().getItem(k)||{}}#t(t,n){let c=new T,s=c.getItem(this.#e)||{},h=n;if(s[t]){let p=s[t];h=p.concat(n.filter(m=>!p.some(u=>u.namespace===m.namespace)))}c.setItem(this.#e,{...s,[t]:h})}#n(t){let n=new T,c=n.getItem(this.#e)||{};if(!t){n.setItem(this.#e,{});return}t.forEach(s=>{c[s]&&delete c[s]}),n.setItem(this.#e,c)}#o(t,n){let p=(new T().getItem(this.#e)||{})[t]?.filter(m=>!n.includes(m.namespace));this.#n([t]),p?.length>0&&this.#t(t,p)}};function F(e){return e.map(t=>{try{return ve(t,"1.0.0")[1]}catch{throw new Error("Legacy providers aren't supported anymore. Expected a provider with version '1.0.0'.")}})}o(F,"getHubProviders");function O(e,t){return e.find(n=>n.id===t)}o(O,"findProviderByType");var Te=new I(k);function V(e,t,n,c){let s=e.get(t.provider);if(!s)throw new Error("Currently all the events have assigned to a provider. The event doesn't include one.",{cause:t});let h=t.namespace,p=h?s.findByNamespace(h):void 0,m=null,u=null,f;if(p){let[l]=p.state();m=l().accounts,u=l().network,c.lastConnectAttemptParams[t.provider]&&(f=c.lastConnectAttemptParams[t.provider].find(d=>d.namespace===h)?.derivationPath)}let[g]=s.state(),r={connected:g().connected,connecting:g().connecting,installed:g().installed,accounts:m,network:u,reachable:!0,derivationPath:f},a=s.info()?.metadata.properties?.find(l=>l.name==="details"),i={supportedBlockchains:Ee(s,c.allBlockChains),isContractWallet:a?.value?.isContractWallet??!1,isHub:!0,namespace:h};switch(t.type){case"provider_detected":n(t.provider,"installed",!0,r,i);break;case"provider_connecting":n(t.provider,"connecting",t.value,r,i);break;case"provider_connected":n(t.provider,"connected",!0,r,i);break;case"provider_disconnected":n(t.provider,"provider_disconnected",t.provider,r,i),n(t.provider,"connected",!1,r,i),n(t.provider,"accounts",null,r,i);break;case"namespace_disconnected":Te.removeNamespacesFromWallet(t.provider,[t.namespace]),n(t.provider,"namespace_disconnected",t.namespace,r,{...i,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&n(t.provider,"namespace_disconnected",t.namespace,r,i);let l=[];i.isContractWallet?l=t.accounts.map(d=>{let{chainId:w,address:P}=Ae.parse(d);if(typeof w=="string")throw new Error("Should be in CAIP format");let v=ke(w.reference,i.supportedBlockchains);return v?Pe(P,v):S(d)}):l=t.accounts.map(d=>S(d)),n(t.provider,"accounts",l,r,{...i,namespace:t.namespace})}break;case"namespace_network_switched":n(t.provider,"network",t.network,r,{...i,namespace:t.namespace});break}}o(V,"mapHubEventsToLegacy");function _(e,t){if(!e.network)return;let n=t.filter(Ie);return Ne(n)[e.network]}o(_,"convertNamespaceNetworkToEvmChainId");function G(e,t){return _(e,t)||e.network}o(G,"tryConvertNamespaceNetworkToChainInfo");function z(e){return $(e)?{accounts:e.accounts,network:e.network}:K(e)?{accounts:e,network:null}:{accounts:[e],network:null}}o(z,"transformHubResultToLegacyResult");function X(e,t){let n=e.getAll();t.filter(s=>!n.get(s.id)).forEach(s=>{e.add(s.id,s),s.init()}),n.forEach(s=>{t.some(p=>p.id===s.id)||e.remove(s.id)})}o(X,"synchronizeHubWithConfigProviders");function J(e){return e.namespaceId==="Solana"}o(J,"isSolanaNamespace");function W(e){return e.namespaceId==="EVM"}o(W,"isEvmNamespace");function Z(e){return e.namespaceId==="UTXO"}o(Z,"isUtxoNamespace");import{utils as _e}from"@hub3js/evm";import{getSupportedChainsFromNamespace as De,getSupportedChainsFromProvider as je}from"@rango-dev/internal-blockchains";import{useEffect as D,useRef as j,useState as Me}from"react";import{Ok as Ue,Result as qe}from"ts-results";import{debug as be}from"@rango-dev/logging-core";function ee(e,t,n){let c=n instanceof Error?n:new Error(String(n));be(c,{context:{method:e,args:t},tags:{type:"wallet-error"}})}o(ee,"logError");function Se(e,t){return(...n)=>{try{let c=t(...n);return c instanceof Promise?c.catch(s=>{throw ee(e,n,s),s}):c}catch(c){throw ee(e,n,c),c}}}o(Se,"withErrorLogging");function te(e){let t=Object.entries(e).map(([n,c])=>[n,Se(n,c.bind(e))]);return Object.fromEntries(t)}o(te,"withErrorLoggingApi");import{Result as xe}from"ts-results";function We(e){return e.namespace==="EVM"}o(We,"isEvmNamespaceInput");var B=new I(k);async function Be(e,t,n){let{getHub:c,allBlockChains:s}=n,h=c().get(e);if(!h)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 p=[];t.forEach(r=>{let a=r.namespace,i=h.findByNamespace(a);if(!i)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${r.namespace})`);p.push([r,i])});let m=p.map(([r,a])=>{let l=(We(r)?_(r,s||[]):void 0)||r.network;return async()=>{let d;W(a)?d=o(async()=>a.connect(l),"connectNamespacePromise"):d=o(async()=>a.connect(),"connectNamespacePromise");try{await d()}catch(w){throw w instanceof Error?w:new Error(w)}}}),u=await L(m),f=p.filter((r,a)=>u[a].err).map(r=>r[0]);if(f.length>0&&B.removeNamespacesFromWallet(e,f.map(r=>r.namespace)),!u.some(r=>r.ok))throw new Error(`No namespace connected for ${e}`);return xe.all(...u.filter(r=>r.ok)).unwrap()}o(Be,"eagerConnect");async function Re(e,t){let n=[],c=[],s=[],h=[];e.forEach(m=>{let u=t.findByNamespace(m.namespace);u?(n.push(m),h.push(async()=>await u.canEagerConnect())):s.push(m)});let p=await L(h);return n.forEach((m,u)=>{p[u].ok&&p[u].val?c.push(m):s.push(m)}),{successNamespaces:c,failedNamespaces:s}}o(Re,"tryRunCanEagerConnect");async function ne(e){let{getHub:t,allBlockChains:n,wallets:c}=e,s=B.list(),h=Object.keys(s),p=[];if(h.length){let m=[],u=c?.map(f=>typeof f=="string"?f:f.id);h.forEach(async f=>{if(u&&!u.includes(f)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",f),p.push(f);return}let g=t().get(f),r=s[f].map(l=>({namespace:l.namespace,network:l.network}));if(!r.length||!g){p.push(f);return}let{successNamespaces:a,failedNamespaces:i}=await Re(r,g);if(a.length)i.length&&B.removeNamespacesFromWallet(g.id,i.map(l=>l.namespace));else{p.push(f);return}m.push(Be(f,a,{allBlockChains:n,getHub:t}).catch(l=>console.warn(l)))}),B.removeWallets(p),await Promise.all(m)}}o(ne,"autoConnect");import{useEffect as He,useRef as Le}from"react";function re(e){let t=Le(!1);He(()=>{Q(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}o(re,"useAutoConnect");import{createStore as Fe,Hub as Oe}from"@hub3js/core";import{useRef as oe}from"react";function se(e){let t=oe(null),n=oe(null);function c(){let p=new Oe({store:s()});return e.forEach(m=>{p.add(m.id,m)}),n.current=p,p}o(c,"createHub");function s(){if(t.current!==null)return t.current;let p=Fe();return t.current=p,p}o(s,"getStore");function h(){let p=n.current?.getAll();return!n.current||!p?c():(X(n.current,e),n.current)}return o(h,"getHub"),{getStore:s,getHub:h}}o(se,"useHubRefs");function M(e){let{getStore:t,getHub:n}=se(e.providers),[,c]=Me(0),s=j({onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}),h=j(!1),p=j({}),m=o((r,a)=>{p.current[r]=a||[]},"updateLastConnectAttemptParams"),u=Y({onError:(r,a)=>{_e.isUserRejectionError(r)&&a.removeCurrentKeyFromQueue()}});D(()=>{s.current={onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}},[e]),D(()=>{t().subscribe(r=>{if(s.current.onUpdateState)try{V(n(),r,s.current.onUpdateState,{allBlockChains:s.current.allBlockChains,lastConnectAttemptParams:p.current})}catch(a){console.error(a)}c(a=>a+1)}).flushEvents()},[]),D(()=>{h.current||!e.allBlockChains?.length||(n().init(e.configs?.walletOptions),c(r=>r+1),h.current=!0)},[e.allBlockChains,e.configs?.walletOptions]),re({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{ne({allBlockChains:e.allBlockChains,getHub:n,wallets:e.configs?.wallets})}});let f=new I(k);return te({canSwitchNetworkTo(r,a,i){let l=n().get(r);if(!l)return!1;if(!i)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let d=l.findByNamespace(i.namespace);if(!d)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${i.namespace})`);if(!("canSwitchNetwork"in d))return!1;let w=l.info()?.metadata?.properties?.find(N=>N.name==="namespaces");if(!s.current.allBlockChains)throw new Error("Blockchains are not available");let P=w?.value.data.find(N=>N.value===i.namespace);if(!P)throw new Error(`NamespaceMeta is not defined for requested namespace: ${i.namespace}`);let v=De(P,s.current.allBlockChains);return d.canSwitchNetwork({network:a,supportedChains:v})},async connect(r,a){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'connect'.`);if(!a)throw new Error("Passing namespace to `connect` is required.");m(r,a);let l=[];a.forEach(C=>{let y=C.namespace,E=i.findByNamespace(y);if(!E)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${C.namespace})`);l.push([C,E])});let d=l.map(async([C,y])=>{let E=G(C,e.allBlockChains||[]),b;return J(y)?b=o(async()=>y.connect({derivationPath:C.derivationPath}),"connectNamespacePromise"):W(y)?b=o(async()=>y.connect(E,{derivationPath:C.derivationPath}),"connectNamespacePromise"):Z(y)?b=o(async()=>y.connect({derivationPath:C.derivationPath}),"connectNamespacePromise"):b=o(async()=>y.connect(),"connectNamespacePromise"),u(o(async()=>b().then(z).then(ae=>({response:ae,input:{namespace:C.namespace,network:C.network,supportsEagerConnect:"canEagerConnect"in y}})),"connectNamespaceProcess"),r)}),w=await Promise.all(d),P=w.filter(C=>C.ok).filter(C=>C.val.input.supportsEagerConnect).map(C=>({namespace:C.val.input.namespace,network:C.val.input.network}));P.length>0&&f.addWallet(r,P);let v=w.map(C=>C.andThen(y=>new Ue(y.response))),N=qe.all(...v);if(N.err)throw N.val;return N.unwrap()},async disconnect(r,a){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'disconnect'.`);i.getAll().forEach(l=>{let d=!a||a.includes(l.namespaceId),w=l.state()[0]().connected;if(d&&w)return l.disconnect()}),e.autoConnect&&(a?f.removeNamespacesFromWallet(r,a):f.removeWallets([r]))},async disconnectAll(){let r=Array.from(n().getAll().values()).map(async a=>this.disconnect(a.id));return await Promise.allSettled(r)},async getSigners(r){let a=n().get(r);if(!a)throw new Error(`You should add ${r} to provider first.`);let i=a.info();if(!i)throw new Error("Your provider should have required `info`.");let d=i.metadata.properties?.find(w=>w.name==="signers");if(!d)throw new Error("Your provider should contain signers property.");return d.value.getSigners()},getWalletInfo(r){let a=n().get(r);if(!a)throw new Error(`You should add ${r} to provider first.`);let i=a.info();if(!i)throw new Error("Your provider should have required `info`.");let l={DEFAULT:""},{metadata:d}=i,{extensions:w}=d;Object.keys(w).forEach(y=>{let E=y;if(E==="homepage"&&(l.DEFAULT=w[E]||""),["firefox","chrome","brave","edge"].includes(E)){let U=E.toUpperCase();l[U]=w[E]||""}});let P=d.properties,v=P?.find(y=>y.name==="namespaces"),N=P?.find(y=>y.name==="derivationPath"),C=P?.find(y=>y.name==="details");return{name:d.name,img:d.icon,installLink:l,color:"red",supportedChains:je(a,s.current.allBlockChains),isContractWallet:C?.value?.isContractWallet,mobileWallet:C?.value?.mobileWallet,showOnMobile:C?.value?.showOnMobile,needsNamespace:v?.value,needsDerivationPath:N?.value,isHub:!0,properties:d.properties}},state(r){let a=n().state(),i=n().get(r),l=a[r];if(!l||!i)return{connected:!1,connecting:!1,installed:!1,reachable:!1,accounts:null,network:null,namespaces:new Map};let d=l.namespaces.filter(v=>v.connected).flatMap(v=>v.accounts?.map(N=>S(N))).filter(v=>!!v),w=new Map(Array.from(i.getAll(),([v,N])=>[N.namespaceId,N.state()[0]()]));return{connected:l.connected,connecting:l.connecting,installed:l.installed,reachable:!0,accounts:d,network:null,namespaces:w}},async suggestAndConnect(r,a){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'suggestAndConnect'.`);let l=i.findByNamespace(a.namespace);throw l?"suggest"in l?a.network?new Error(`Suggest has not been implemented for given chain: ${a.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: ${a.namespace})`)},hubProvider(r){let a=O(e.providers,r);if(!a)throw new Error(`You're trying to access ${r} provider which is not found in hub providers. it may not be registered yet.`);return a}})}o(M,"useHubAdapter");function Ke(e){let t=M({...e,providers:F(e.providers)});return $e.createElement(x.Provider,{value:t},e.children)}o(Ke,"Provider");var Ye=Ke;import{useContext as Qe}from"react";function Ve(){let e=Qe(x);if(!e)throw Error("useWallet can only be used within the Provider component");return e}o(Ve,"useWallets");export{R as Events,Ye as Provider,Ve as useWallets};
1
+ var ae=Object.defineProperty;var r=(e,t)=>ae(e,"name",{value:t,configurable:!0});import Ue from"react";import{createContext as ce}from"react";var A="Context hasn't been initialized yet.",ie={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)},getWalletInfo(){throw new Error(A)},getSigners(){throw new Error(A)},hubProvider(){throw new Error(A)}},x=ce(ie);import{convertEvmBlockchainMetaToEvmChainInfo as ye,formatAddressWithNetwork as Ne,getBlockChainNameFromId as ve,getSupportedChainsFromProvider as Pe}from"@rango-dev/internal-blockchains";import{AccountId as ke}from"caip";import{isEvmBlockchain as Ee}from"rango-types";var R=(u=>(u.CONNECTED="connected",u.CONNECTING="connecting",u.REACHABLE="reachable",u.INSTALLED="installed",u.ACCOUNTS="accounts",u.NETWORK="network",u.NAMESPACE_DISCONNECTED="namespace_disconnected",u.PROVIDER_DISCONNECTED="provider_disconnected",u))(R||{});var k="hub-v1-last-connected-wallets";import{CAIP_BITCOIN_CHAIN_ID as le,CAIP_BITCOINCASH_CHAIN_ID as pe,CAIP_DOGECOIN_CHAIN_ID as ue,CAIP_LITECOIN_CHAIN_ID as me,CAIP_ZCASH_CHAIN_ID as de}from"@hub3js/bip122";import{CAIP_NAMESPACE as fe}from"@hub3js/tvm";import{formatAddressWithNetwork as he}from"@rango-dev/internal-blockchains";import{CAIP_TRON_CHAIN_ID as Ce}from"@rango-dev/wallets-core/namespaces/tron";import{AccountId as we}from"caip";import{Err as H,Ok as U}from"ts-results";function ge(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===le?"BTC":e.reference===de?"ZCASH":e.reference===me?"LTC":e.reference===ue?"DOGE":e.reference===pe?"BCH":e.namespace.toLowerCase()===fe?"TON":e.namespace==="sui"||e.reference===Ce?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}r(ge,"mapCaipNamespaceToLegacyNetworkName");function S(e){let{chainId:t,address:n}=we.parse(e),c=ge(t);return he(n,c)}r(S,"fromAccountIdToLegacyAddressFormat");async function F(e){return e.reduce(async(t,n)=>{let c=await t;try{let s=await n();return[...c,new U(s)]}catch(s){return[...c,new H(s)]}},Promise.resolve([]))}r(F,"runSequentiallyWithoutFailure");function q(e){return typeof e=="object"&&!Array.isArray(e)}r(q,"isConnectResultEvm");function $(e){return Array.isArray(e)}r($,"isConnectResultSolana");function K(e){let t=new Set,n=[],c=r((p,m)=>{n=n.filter(u=>u.key!==p?!0:(u.resolve(m),!1))},"removeKeyFromQueue"),s=r(async()=>{let p=n.find(g=>!t.has(g.key));if(!p)return;let{task:m,resolve:u,key:f}=p;t.add(f);try{let g=await m();u(new U(g))}catch(g){e?.onError&&e.onError(g,{removeCurrentKeyFromQueue:()=>c(f,new H(g))}),u(new H(g))}finally{let g=n.findIndex(o=>o.key===f);g>=0&&n.splice(g,1),t.delete(f),s()}},"processQueue");return r(async(p,m)=>new Promise(u=>{n.push({task:p,resolve:u,key:m}),s()}),"queueTask")}r(K,"createQueue");function Y(e){return!!e.allBlockChains?.length&&!!e.autoConnect}r(Y,"shouldTryAutoConnect");var T=class{static{r(this,"Persistor")}getItem(t){let n=localStorage.getItem(t);return n?JSON.parse(n):null}setItem(t,n){localStorage.setItem(t,JSON.stringify(n))}removeItem(t){localStorage.removeItem(t)}};var I=class{static{r(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,n){if(this.#e===k)return this.#t(t,n);throw new Error("Not implemented")}removeWallets(t){if(this.#e===k)return this.#n(t);throw new Error("Not implemented")}list(){if(this.#e===k)return this.#o();throw new Error("Not implemented")}removeNamespacesFromWallet(t,n){if(this.#e===k)return this.#r(t,n);throw new Error("Not implemented")}#o(){return new T().getItem(k)||{}}#t(t,n){let c=new T,s=c.getItem(this.#e)||{},h=n;if(s[t]){let p=s[t];h=p.concat(n.filter(m=>!p.some(u=>u.namespace===m.namespace)))}c.setItem(this.#e,{...s,[t]:h})}#n(t){let n=new T,c=n.getItem(this.#e)||{};if(!t){n.setItem(this.#e,{});return}t.forEach(s=>{c[s]&&delete c[s]}),n.setItem(this.#e,c)}#r(t,n){let p=(new T().getItem(this.#e)||{})[t]?.filter(m=>!n.includes(m.namespace));this.#n([t]),p?.length>0&&this.#t(t,p)}};function L(e,t){return e.find(n=>n.id===t)}r(L,"findProviderByType");var Ae=new I(k);function Q(e,t,n,c){let s=e.get(t.provider);if(!s)throw new Error("Currently all the events have assigned to a provider. The event doesn't include one.",{cause:t});let h=t.namespace,p=h?s.findByNamespace(h):void 0,m=null,u=null,f;if(p){let[l]=p.state();m=l().accounts,u=l().network,c.lastConnectAttemptParams[t.provider]&&(f=c.lastConnectAttemptParams[t.provider].find(d=>d.namespace===h)?.derivationPath)}let[g]=s.state(),o={connected:g().connected,connecting:g().connecting,installed:g().installed,accounts:m,network:u,reachable:!0,derivationPath:f},a=s.info()?.metadata.properties?.find(l=>l.name==="details"),i={supportedBlockchains:Pe(s,c.allBlockChains),isContractWallet:a?.value?.isContractWallet??!1,isHub:!0,namespace:h};switch(t.type){case"provider_detected":n(t.provider,"installed",!0,o,i);break;case"provider_connecting":n(t.provider,"connecting",t.value,o,i);break;case"provider_connected":n(t.provider,"connected",!0,o,i);break;case"provider_disconnected":n(t.provider,"provider_disconnected",t.provider,o,i),n(t.provider,"connected",!1,o,i),n(t.provider,"accounts",null,o,i);break;case"namespace_disconnected":Ae.removeNamespacesFromWallet(t.provider,[t.namespace]),n(t.provider,"namespace_disconnected",t.namespace,o,{...i,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&n(t.provider,"namespace_disconnected",t.namespace,o,i);let l=[];i.isContractWallet?l=t.accounts.map(d=>{let{chainId:w,address:P}=ke.parse(d);if(typeof w=="string")throw new Error("Should be in CAIP format");let N=ve(w.reference,i.supportedBlockchains);return N?Ne(P,N):S(d)}):l=t.accounts.map(d=>S(d)),n(t.provider,"accounts",l,o,{...i,namespace:t.namespace})}break;case"namespace_network_switched":n(t.provider,"network",t.network,o,{...i,namespace:t.namespace});break}}r(Q,"mapHubEventsToLegacy");function O(e,t){if(!e.network)return;let n=t.filter(Ee);return ye(n)[e.network]}r(O,"convertNamespaceNetworkToEvmChainId");function G(e,t){return O(e,t)||e.network}r(G,"tryConvertNamespaceNetworkToChainInfo");function V(e){return q(e)?{accounts:e.accounts,network:e.network}:$(e)?{accounts:e,network:null}:{accounts:[e],network:null}}r(V,"transformHubResultToLegacyResult");function z(e,t){let n=e.getAll();t.filter(s=>!n.get(s.id)).forEach(s=>{e.add(s.id,s),s.init()}),n.forEach(s=>{t.some(p=>p.id===s.id)||e.remove(s.id)})}r(z,"synchronizeHubWithConfigProviders");function X(e){return e.namespaceId==="Solana"}r(X,"isSolanaNamespace");function W(e){return e.namespaceId==="EVM"}r(W,"isEvmNamespace");function J(e){return e.namespaceId==="UTXO"}r(J,"isUtxoNamespace");import{utils as Le}from"@hub3js/evm";import{getSupportedChainsFromNamespace as Oe,getSupportedChainsFromProvider as _e}from"@rango-dev/internal-blockchains";import{useEffect as _,useRef as D,useState as De}from"react";import{Ok as je,Result as Me}from"ts-results";import{debug as Ie}from"@rango-dev/logging-core";function Z(e,t,n){let c=n instanceof Error?n:new Error(String(n));Ie(c,{context:{method:e,args:t},tags:{type:"wallet-error"}})}r(Z,"logError");function Te(e,t){return(...n)=>{try{let c=t(...n);return c instanceof Promise?c.catch(s=>{throw Z(e,n,s),s}):c}catch(c){throw Z(e,n,c),c}}}r(Te,"withErrorLogging");function ee(e){let t=Object.entries(e).map(([n,c])=>[n,Te(n,c.bind(e))]);return Object.fromEntries(t)}r(ee,"withErrorLoggingApi");import{Result as be}from"ts-results";function Se(e){return e.namespace==="EVM"}r(Se,"isEvmNamespaceInput");var B=new I(k);async function xe(e,t,n){let{getHub:c,allBlockChains:s}=n,h=c().get(e);if(!h)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 p=[];t.forEach(o=>{let a=o.namespace,i=h.findByNamespace(a);if(!i)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${o.namespace})`);p.push([o,i])});let m=p.map(([o,a])=>{let l=(Se(o)?O(o,s||[]):void 0)||o.network;return async()=>{let d;W(a)?d=r(async()=>a.connect(l),"connectNamespacePromise"):d=r(async()=>a.connect(),"connectNamespacePromise");try{await d()}catch(w){throw w instanceof Error?w:new Error(w)}}}),u=await F(m),f=p.filter((o,a)=>u[a].err).map(o=>o[0]);if(f.length>0&&B.removeNamespacesFromWallet(e,f.map(o=>o.namespace)),!u.some(o=>o.ok))throw new Error(`No namespace connected for ${e}`);return be.all(...u.filter(o=>o.ok)).unwrap()}r(xe,"eagerConnect");async function We(e,t){let n=[],c=[],s=[],h=[];e.forEach(m=>{let u=t.findByNamespace(m.namespace);u?(n.push(m),h.push(async()=>await u.canEagerConnect())):s.push(m)});let p=await F(h);return n.forEach((m,u)=>{p[u].ok&&p[u].val?c.push(m):s.push(m)}),{successNamespaces:c,failedNamespaces:s}}r(We,"tryRunCanEagerConnect");async function te(e){let{getHub:t,allBlockChains:n,wallets:c}=e,s=B.list(),h=Object.keys(s),p=[];if(h.length){let m=[],u=c?.map(f=>typeof f=="string"?f:f.id);h.forEach(async f=>{if(u&&!u.includes(f)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",f),p.push(f);return}let g=t().get(f),o=s[f].map(l=>({namespace:l.namespace,network:l.network}));if(!o.length||!g){p.push(f);return}let{successNamespaces:a,failedNamespaces:i}=await We(o,g);if(a.length)i.length&&B.removeNamespacesFromWallet(g.id,i.map(l=>l.namespace));else{p.push(f);return}m.push(xe(f,a,{allBlockChains:n,getHub:t}).catch(l=>console.warn(l)))}),B.removeWallets(p),await Promise.all(m)}}r(te,"autoConnect");import{useEffect as Be,useRef as Re}from"react";function ne(e){let t=Re(!1);Be(()=>{Y(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}r(ne,"useAutoConnect");import{createStore as He,Hub as Fe}from"@hub3js/core";import{useRef as oe}from"react";function re(e){let t=oe(null),n=oe(null);function c(){let p=new Fe({store:s()});return e.forEach(m=>{p.add(m.id,m)}),n.current=p,p}r(c,"createHub");function s(){if(t.current!==null)return t.current;let p=He();return t.current=p,p}r(s,"getStore");function h(){let p=n.current?.getAll();return!n.current||!p?c():(z(n.current,e),n.current)}return r(h,"getHub"),{getStore:s,getHub:h}}r(re,"useHubRefs");function j(e){let{getStore:t,getHub:n}=re(e.providers),[,c]=De(0),s=D({onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}),h=D(!1),p=D({}),m=r((o,a)=>{p.current[o]=a||[]},"updateLastConnectAttemptParams"),u=K({onError:(o,a)=>{Le.isUserRejectionError(o)&&a.removeCurrentKeyFromQueue()}});_(()=>{s.current={onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}},[e]),_(()=>{t().subscribe(o=>{if(s.current.onUpdateState)try{Q(n(),o,s.current.onUpdateState,{allBlockChains:s.current.allBlockChains,lastConnectAttemptParams:p.current})}catch(a){console.error(a)}c(a=>a+1)}).flushEvents()},[]),_(()=>{h.current||!e.allBlockChains?.length||(n().init(e.configs?.walletOptions),c(o=>o+1),h.current=!0)},[e.allBlockChains,e.configs?.walletOptions]),ne({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{te({allBlockChains:e.allBlockChains,getHub:n,wallets:e.configs?.wallets})}});let f=new I(k);return ee({canSwitchNetworkTo(o,a,i){let l=n().get(o);if(!l)return!1;if(!i)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let d=l.findByNamespace(i.namespace);if(!d)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${i.namespace})`);if(!("canSwitchNetwork"in d))return!1;let w=l.info()?.metadata?.properties?.find(v=>v.name==="namespaces");if(!s.current.allBlockChains)throw new Error("Blockchains are not available");let P=w?.value.data.find(v=>v.value===i.namespace);if(!P)throw new Error(`NamespaceMeta is not defined for requested namespace: ${i.namespace}`);let N=Oe(P,s.current.allBlockChains);return d.canSwitchNetwork({network:a,supportedChains:N})},async connect(o,a){let i=n().get(o);if(!i)throw new Error(`You should add ${o} to provider first then call 'connect'.`);if(!a)throw new Error("Passing namespace to `connect` is required.");m(o,a);let l=[];a.forEach(C=>{let y=C.namespace,E=i.findByNamespace(y);if(!E)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${C.namespace})`);l.push([C,E])});let d=l.map(async([C,y])=>{let E=G(C,e.allBlockChains||[]),b;return X(y)?b=r(async()=>y.connect({derivationPath:C.derivationPath}),"connectNamespacePromise"):W(y)?b=r(async()=>y.connect(E,{derivationPath:C.derivationPath}),"connectNamespacePromise"):J(y)?b=r(async()=>y.connect({derivationPath:C.derivationPath}),"connectNamespacePromise"):b=r(async()=>y.connect(),"connectNamespacePromise"),u(r(async()=>b().then(V).then(se=>({response:se,input:{namespace:C.namespace,network:C.network,supportsEagerConnect:"canEagerConnect"in y}})),"connectNamespaceProcess"),o)}),w=await Promise.all(d),P=w.filter(C=>C.ok).filter(C=>C.val.input.supportsEagerConnect).map(C=>({namespace:C.val.input.namespace,network:C.val.input.network}));P.length>0&&f.addWallet(o,P);let N=w.map(C=>C.andThen(y=>new je(y.response))),v=Me.all(...N);if(v.err)throw v.val;return v.unwrap()},async disconnect(o,a){let i=n().get(o);if(!i)throw new Error(`You should add ${o} to provider first then call 'disconnect'.`);i.getAll().forEach(l=>{let d=!a||a.includes(l.namespaceId),w=l.state()[0]().connected;if(d&&w)return l.disconnect()}),e.autoConnect&&(a?f.removeNamespacesFromWallet(o,a):f.removeWallets([o]))},async disconnectAll(){let o=Array.from(n().getAll().values()).map(async a=>this.disconnect(a.id));return await Promise.allSettled(o)},async getSigners(o){let a=n().get(o);if(!a)throw new Error(`You should add ${o} to provider first.`);let i=a.info();if(!i)throw new Error("Your provider should have required `info`.");let d=i.metadata.properties?.find(w=>w.name==="signers");if(!d)throw new Error("Your provider should contain signers property.");return d.value.getSigners()},getWalletInfo(o){let a=n().get(o);if(!a)throw new Error(`You should add ${o} to provider first.`);let i=a.info();if(!i)throw new Error("Your provider should have required `info`.");let l={DEFAULT:""},{metadata:d}=i,{extensions:w}=d;Object.keys(w).forEach(y=>{let E=y;if(E==="homepage"&&(l.DEFAULT=w[E]||""),["firefox","chrome","brave","edge"].includes(E)){let M=E.toUpperCase();l[M]=w[E]||""}});let P=d.properties,N=P?.find(y=>y.name==="namespaces"),v=P?.find(y=>y.name==="derivationPath"),C=P?.find(y=>y.name==="details");return{name:d.name,img:d.icon,installLink:l,color:"red",supportedChains:_e(a,s.current.allBlockChains),isContractWallet:C?.value?.isContractWallet,mobileWallet:C?.value?.mobileWallet,showOnMobile:C?.value?.showOnMobile,needsNamespace:N?.value,needsDerivationPath:v?.value,isHub:!0,properties:d.properties}},state(o){let a=n().state(),i=n().get(o),l=a[o];if(!l||!i)return{connected:!1,connecting:!1,installed:!1,reachable:!1,accounts:null,network:null,namespaces:new Map};let d=l.namespaces.filter(N=>N.connected).flatMap(N=>N.accounts?.map(v=>S(v))).filter(N=>!!N),w=new Map(Array.from(i.getAll(),([N,v])=>[v.namespaceId,v.state()[0]()]));return{connected:l.connected,connecting:l.connecting,installed:l.installed,reachable:!0,accounts:d,network:null,namespaces:w}},async suggestAndConnect(o,a){let i=n().get(o);if(!i)throw new Error(`You should add ${o} to provider first then call 'suggestAndConnect'.`);let l=i.findByNamespace(a.namespace);throw l?"suggest"in l?a.network?new Error(`Suggest has not been implemented for given chain: ${a.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: ${a.namespace})`)},hubProvider(o){let a=L(e.providers,o);if(!a)throw new Error(`You're trying to access ${o} provider which is not found in hub providers. it may not be registered yet.`);return a}})}r(j,"useHubAdapter");function qe(e){let t=j(e);return Ue.createElement(x.Provider,{value:t},e.children)}r(qe,"Provider");var $e=qe;import{useContext as Ke}from"react";function Ye(){let e=Ke(x);if(!e)throw Error("useWallet can only be used within the Provider component");return e}r(Ye,"useWallets");export{R as Events,$e as Provider,Ye as useWallets};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/provider.tsx", "../src/context.ts", "../src/hub/utils.ts", "../src/legacy/types.ts", "../src/hub/constants.ts", "../src/hub/helpers.ts", "../src/hub/persistor.ts", "../src/hub/lastConnectedWallets.ts", "../src/hub/useHubAdapter.ts", "../src/helpers.ts", "../src/hub/autoConnect.ts", "../src/hub/useAutoConnect.ts", "../src/hub/useHubRefs.ts", "../src/hooks.ts"],
4
- "sourcesContent": ["import type { ProviderProps } from './types.js';\n\nimport React from 'react';\n\nimport { WalletContext } from './context.js';\nimport { useHubAdapter } from './hub/mod.js';\nimport { getHubProviders } from './hub/utils.js';\n\nfunction Provider(props: ProviderProps) {\n const api = useHubAdapter({\n ...props,\n providers: getHubProviders(props.providers),\n });\n\n return (\n <WalletContext.Provider value={api}>\n {props.children}\n </WalletContext.Provider>\n );\n}\n\nexport default Provider;\n", "import type { ProviderContext } from './types.js';\n\nimport { createContext } from 'react';\n\nconst defaultErrorMessage = \"Context hasn't been initialized yet.\";\nconst defaultContext: ProviderContext = {\n async connect() {\n throw new Error(defaultErrorMessage);\n },\n async disconnect() {\n throw new Error(defaultErrorMessage);\n },\n async disconnectAll() {\n throw new Error(defaultErrorMessage);\n },\n async suggestAndConnect() {\n throw new Error(defaultErrorMessage);\n },\n state() {\n throw new Error(defaultErrorMessage);\n },\n canSwitchNetworkTo() {\n throw new Error(defaultErrorMessage);\n },\n getWalletInfo() {\n throw new Error(defaultErrorMessage);\n },\n getSigners() {\n throw new Error(defaultErrorMessage);\n },\n hubProvider() {\n throw new Error(defaultErrorMessage);\n },\n};\n\nexport const WalletContext = createContext<ProviderContext>(defaultContext);\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type {\n ConnectResult,\n NamespaceInputForConnect,\n EventHandler as WalletEventHandler,\n} from '../legacy/mod.js';\nimport type { ProviderProps } from '../types.js';\nimport type { UtxoActions } from '@hub3js/bip122';\nimport type { Hub, Provider, ProxiedNamespace, WalletType } from '@hub3js/core';\nimport type { Event } from '@hub3js/core/store';\nimport type {\n Chain as AddEthereumChainParameter,\n EvmActions,\n} from '@hub3js/evm';\nimport type { SolanaActions } from '@hub3js/solana';\n\nimport { pickVersion, type VersionedProviders } from '@hub3js/core/utils';\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n formatAddressWithNetwork,\n getBlockChainNameFromId,\n getSupportedChainsFromProvider,\n} from '@rango-dev/internal-blockchains';\nimport { AccountId } from 'caip';\nimport { type BlockchainMeta, isEvmBlockchain } from 'rango-types';\n\nimport { Events } from '../legacy/mod.js';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport {\n fromAccountIdToLegacyAddressFormat,\n isConnectResultEvm,\n isConnectResultSolana,\n} from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\n\nexport function getHubProviders(providers: VersionedProviders[]): Provider[] {\n return providers.map((provider) => {\n try {\n return pickVersion(provider, '1.0.0')[1] as Provider;\n } catch {\n throw new Error(\n \"Legacy providers aren't supported anymore. Expected a provider with version '1.0.0'.\"\n );\n }\n });\n}\n\nexport function findProviderByType(\n providers: Provider[],\n type: string\n): Provider | undefined {\n return providers.find((provider) => provider.id === type);\n}\n\n/**\n * We will call this function on hub's `subscribe`.\n * it will check states and will emit legacy events for backward compatibility.\n */\n\nconst lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n);\n\nexport function mapHubEventsToLegacy(\n hub: Hub,\n event: Event,\n onUpdateState: WalletEventHandler,\n metadata: {\n allBlockChains: ProviderProps['allBlockChains'];\n lastConnectAttemptParams: {\n [type: WalletType]: NamespaceInputForConnect[];\n };\n }\n): void {\n const provider = hub.get(event.provider);\n if (!provider) {\n throw new Error(\n \"Currently all the events have assigned to a provider. The event doesn't include one.\",\n {\n cause: event,\n }\n );\n }\n\n // @ts-expect-error for those events that doesn't have namespace, it will be undefinded\n const namespaceId: string | undefined = event.namespace;\n\n const namespace = namespaceId\n ? provider.findByNamespace(namespaceId)\n : undefined;\n let accounts: string[] | null = null;\n let network: string | null = null;\n let derivationPath: string | undefined;\n\n if (namespace) {\n const [getNamespaceState] = namespace.state();\n accounts = getNamespaceState().accounts;\n network = getNamespaceState().network;\n\n if (metadata.lastConnectAttemptParams[event.provider]) {\n derivationPath = metadata.lastConnectAttemptParams[event.provider].find(\n (namespace) => namespace.namespace === namespaceId\n )?.derivationPath;\n }\n }\n\n const [getProviderState] = provider.state();\n const coreState = {\n connected: getProviderState().connected,\n connecting: getProviderState().connecting,\n installed: getProviderState().installed,\n accounts,\n network,\n reachable: true,\n derivationPath,\n };\n\n const detailsProperty = provider\n .info()\n ?.metadata.properties?.find((property) => property.name === 'details');\n\n const eventInfo = {\n supportedBlockchains: getSupportedChainsFromProvider(\n provider,\n metadata.allBlockChains\n ),\n isContractWallet: detailsProperty?.value?.isContractWallet ?? false,\n isHub: true,\n namespace: namespaceId,\n };\n\n switch (event.type) {\n case 'provider_detected':\n onUpdateState(\n event.provider,\n Events.INSTALLED,\n true,\n coreState,\n eventInfo\n );\n break;\n case 'provider_connecting':\n onUpdateState(\n event.provider,\n Events.CONNECTING,\n event.value,\n coreState,\n eventInfo\n );\n break;\n case 'provider_connected':\n onUpdateState(\n event.provider,\n Events.CONNECTED,\n true,\n coreState,\n eventInfo\n );\n break;\n case 'provider_disconnected':\n onUpdateState(\n event.provider,\n Events.PROVIDER_DISCONNECTED,\n event.provider,\n coreState,\n eventInfo\n );\n onUpdateState(\n event.provider,\n Events.CONNECTED,\n false,\n coreState,\n eventInfo\n );\n onUpdateState(\n event.provider,\n Events.ACCOUNTS,\n null,\n coreState,\n eventInfo\n );\n break;\n case 'namespace_disconnected':\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n event.provider,\n [event.namespace]\n );\n\n onUpdateState(\n event.provider,\n Events.NAMESPACE_DISCONNECTED,\n event.namespace,\n coreState,\n {\n ...eventInfo,\n namespace: event.namespace,\n }\n );\n // onUpdateState(event.provider, Events.ACCOUNTS, null, coreState, eventInfo);\n break;\n case 'namespace_connected':\n case 'namespace_account_switched':\n {\n if (event.type === 'namespace_account_switched') {\n onUpdateState(\n event.provider,\n Events.NAMESPACE_DISCONNECTED,\n event.namespace,\n coreState,\n eventInfo\n );\n }\n\n let formattedAddresses: string[] = [];\n if (eventInfo.isContractWallet) {\n formattedAddresses = event.accounts.map((account) => {\n const { chainId, address } = AccountId.parse(account);\n if (typeof chainId === 'string') {\n throw new Error('Should be in CAIP format');\n }\n const blockchainName = getBlockChainNameFromId(\n chainId.reference,\n eventInfo.supportedBlockchains\n );\n\n return blockchainName\n ? formatAddressWithNetwork(address, blockchainName)\n : fromAccountIdToLegacyAddressFormat(account);\n });\n } else {\n formattedAddresses = event.accounts.map((accounts) =>\n fromAccountIdToLegacyAddressFormat(accounts)\n );\n }\n\n onUpdateState(\n event.provider,\n Events.ACCOUNTS,\n formattedAddresses,\n coreState,\n {\n ...eventInfo,\n namespace: event.namespace,\n }\n );\n }\n break;\n case 'namespace_network_switched':\n onUpdateState(event.provider, Events.NETWORK, event.network, coreState, {\n ...eventInfo,\n namespace: event.namespace,\n });\n break;\n }\n}\n\n/**\n * In legacy mode, for those who have switch network functionality (like evm), we are using an enum for network names\n * this enum only has meaning for us, and when we are going to connect an instance (e.g. window.ethereum) we should pass chain id.\n */\nexport function convertNamespaceNetworkToEvmChainId(\n namespace: NamespaceInputForConnect,\n meta: BlockchainMeta[]\n): AddEthereumChainParameter | undefined {\n if (!namespace.network) {\n return undefined;\n }\n\n const evmBlockchainsList = meta.filter(isEvmBlockchain);\n const evmChains = convertEvmBlockchainMetaToEvmChainInfo(evmBlockchainsList);\n\n return evmChains[namespace.network];\n}\n\n/**\n * We are passing an string for chain id (e.g. ETH, POLYGON), but wallet's instances (e.g. window.ethereum) needs chainId (e.g. 0x1).\n * This function will help us to map these strings to proper hex ids.\n */\nexport function tryConvertNamespaceNetworkToChainInfo(\n namespace: NamespaceInputForConnect,\n meta: BlockchainMeta[]\n): string | AddEthereumChainParameter | undefined {\n // `undefined` means it's not evm or we couldn't find it in meta.\n const evmChain = convertNamespaceNetworkToEvmChainId(namespace, meta);\n const network = evmChain || namespace.network;\n\n return network;\n}\n\nexport function transformHubResultToLegacyResult(\n res: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): ConnectResult {\n if (isConnectResultEvm(res)) {\n return {\n accounts: res.accounts,\n network: res.network,\n };\n } else if (isConnectResultSolana(res)) {\n return {\n accounts: res,\n network: null,\n };\n }\n\n return {\n accounts: [res],\n network: null,\n };\n}\n\n/**\n * Synchronizes providers in the hub with the configuration providers.\n * - Registers and initializes any configuration providers not yet in the hub\n * - Removes providers from the hub that aren't in the configuration\n */\nexport function synchronizeHubWithConfigProviders(\n hub: Hub,\n configurationProviders: Provider[]\n) {\n const registeredProviders = hub.getAll();\n\n // Register and initialize providers that exist in config but not in hub\n const providersToRegister = configurationProviders.filter(\n (configProvider) => !registeredProviders.get(configProvider.id)\n );\n\n providersToRegister.forEach((providerToRegister) => {\n hub.add(providerToRegister.id, providerToRegister);\n providerToRegister.init();\n });\n\n // Remove providers that exist in hub but not in config\n registeredProviders.forEach((registeredProvider) => {\n const isProviderInConfig = configurationProviders.some(\n (configProvider) => configProvider.id === registeredProvider.id\n );\n\n if (!isProviderInConfig) {\n hub.remove(registeredProvider.id);\n }\n });\n}\n\nexport function isSolanaNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<SolanaActions> & { namespaceId: 'Solana' } {\n return ns.namespaceId === 'Solana';\n}\nexport function isEvmNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<EvmActions> & { namespaceId: 'EVM' } {\n return ns.namespaceId === 'EVM';\n}\nexport function isUtxoNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<UtxoActions> & { namespaceId: 'UTXO' } {\n return ns.namespaceId === 'UTXO';\n}\n", "import type {\n DerivationPathProperty,\n NamespacesProperty,\n ProviderMetadata,\n WalletType,\n} from '@hub3js/core';\nimport type { Namespace } from '@hub3js/namespaces';\nimport type { Network } from '@rango-dev/internal-blockchains';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nexport type NamespaceMeta = NamespacesProperty['value']['data'][number];\nexport type NeedsNamespace = NamespacesProperty['value'];\nexport type NeedsDerivationPath = DerivationPathProperty['value'];\n\nexport type InstallObjects = {\n CHROME?: string;\n FIREFOX?: string;\n EDGE?: string;\n BRAVE?: string;\n DEFAULT: string;\n};\n\nexport type WalletInfo = {\n name: string;\n img: string;\n installLink: InstallObjects | string;\n /**\n * @deprecated we don't use this value anymore.\n */\n color: string;\n supportedChains: BlockchainMeta[];\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n mobileWallet?: boolean;\n\n needsDerivationPath?: NeedsDerivationPath;\n needsNamespace?: NeedsNamespace;\n};\n\nexport type WalletState = {\n connected: boolean;\n connecting: boolean;\n /**\n * @deprecated it always returns `false`. don't use it.\n */\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n derivationPath?: string;\n};\n\ntype NamespaceData = {\n namespace: Namespace;\n derivationPath?: string;\n};\n\nexport type NamespaceInputForConnect<T extends Namespace = Namespace> = {\n /**\n * By default, you should specify namespace (e.g. evm).\n */\n namespace: T;\n /**\n * In some cases, we need to connect a specific network on a namespace. e.g. Polygon on EVM.\n */\n network: Network | undefined;\n derivationPath?: string;\n};\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n // Hub only events\n NAMESPACE_DISCONNECTED = 'namespace_disconnected',\n\n PROVIDER_DISCONNECTED = 'provider_disconnected',\n}\n\nexport type EventInfo = {\n supportedBlockchains: BlockchainMeta[];\n isContractWallet: boolean;\n isHub: boolean;\n // will be set alongside ACCOUNT event\n namespace?: Namespace;\n derivationPath?: string;\n};\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n coreState: WalletState,\n info: EventInfo\n) => void;\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n};\n\nexport type ExtendedWalletInfo = WalletInfo & {\n properties?: ProviderMetadata['properties'];\n isHub?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstanceType = any;\n\ntype ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n derivationPath?: string;\n};\n\ntype GetInstanceOptions = {\n network?: Network;\n currentProvider: InstanceType;\n meta: BlockchainMeta[];\n getState: () => WalletState;\n /**\n * We always get the instance once and reuse it whenever we needs. By using this option\n * We can force the library to get a new instance and replace it with the old one.\n *\n * Originally, we used this option for wallet connect 1 and its switching network challenge.\n */\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\ntype TryGetInstance =\n | (() => InstanceType)\n | ((\n options: Pick<GetInstanceOptions, 'force' | 'network'>\n ) => Promise<InstanceType>);\n\ntype Connect = (options: {\n instance: InstanceType;\n network?: Network;\n meta: BlockchainMeta[];\n namespaces?: NamespaceData[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\ntype Disconnect = (options: {\n instance: InstanceType;\n destroyInstance: () => void;\n}) => Promise<void>;\n\ntype CleanupSubscribe = () => void;\n\ntype Subscribe = (options: {\n instance: InstanceType;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => CleanupSubscribe | void;\n\ntype SwitchNetwork = (options: {\n instance: InstanceType;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n getState?: () => WalletState;\n updateChainId: (chainId: string) => void;\n}) => Promise<void>;\n\ntype Suggest = (options: {\n instance: InstanceType;\n network: Network;\n meta: BlockchainMeta[];\n}) => Promise<void>;\n\ntype CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: InstanceType;\n}) => boolean;\n\ntype CanEagerConnect = (options: {\n instance: InstanceType;\n meta: BlockchainMeta[];\n}) => Promise<boolean>;\n\ninterface WalletActions {\n connect: Connect;\n getInstance: InstanceType;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n suggest?: Suggest;\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: InstanceType) => Promise<SignerFactory>;\n canSwitchNetworkTo?: CanSwitchNetwork;\n canEagerConnect?: CanEagerConnect;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\ninterface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n isAsyncSwitchNetwork?: boolean;\n}\n\n/**\n * @deprecated Pass a hub `Provider` instead. This type will be removed in future versions.\n */\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n", "export const HUB_LAST_CONNECTED_WALLETS = 'hub-v1-last-connected-wallets';\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type { ProviderProps } from '../types.js';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\nimport type { Result } from 'ts-results';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n CAIP_BITCOINCASH_CHAIN_ID,\n CAIP_DOGECOIN_CHAIN_ID,\n CAIP_LITECOIN_CHAIN_ID,\n CAIP_ZCASH_CHAIN_ID,\n} from '@hub3js/bip122';\nimport { CAIP_NAMESPACE as CAIP_TON_NAMESPACE } from '@hub3js/tvm';\nimport { formatAddressWithNetwork } from '@rango-dev/internal-blockchains';\nimport { CAIP_TRON_CHAIN_ID } from '@rango-dev/wallets-core/namespaces/tron';\nimport { AccountId, type ChainIdParams } from 'caip';\nimport { Err, Ok } from 'ts-results';\n\nexport function mapCaipNamespaceToLegacyNetworkName(\n chainId: ChainIdParams | string\n): string {\n if (typeof chainId === 'string') {\n return chainId;\n }\n const useNamespaceAsNetworkFor = ['solana', 'xrpl', 'stellar'];\n\n if (useNamespaceAsNetworkFor.includes(chainId.namespace.toLowerCase())) {\n return chainId.namespace.toUpperCase();\n }\n\n if (chainId.namespace.toLowerCase() === 'eip155') {\n return 'ETH';\n } else if (chainId.reference === CAIP_BITCOIN_CHAIN_ID) {\n return 'BTC';\n } else if (chainId.reference === CAIP_ZCASH_CHAIN_ID) {\n return 'ZCASH';\n } else if (chainId.reference === CAIP_LITECOIN_CHAIN_ID) {\n return 'LTC';\n } else if (chainId.reference === CAIP_DOGECOIN_CHAIN_ID) {\n return 'DOGE';\n } else if (chainId.reference === CAIP_BITCOINCASH_CHAIN_ID) {\n return 'BCH';\n }\n\n if (chainId.namespace.toLowerCase() === CAIP_TON_NAMESPACE) {\n return 'TON';\n }\n if (chainId.namespace === 'sui' || chainId.reference === CAIP_TRON_CHAIN_ID) {\n return chainId.reference.toUpperCase();\n }\n if (chainId.namespace === 'starknet') {\n return chainId.namespace.toUpperCase();\n }\n\n return chainId.reference;\n}\n\n/**\n * CAIP's accountId has a format like this: eip155:1:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb\n * Legacy format is something like this: ETH:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb\n * This function will try to convert this two format.\n *\n * @see https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md\n */\nexport function fromAccountIdToLegacyAddressFormat(account: string): string {\n const { chainId, address } = AccountId.parse(account);\n const network = mapCaipNamespaceToLegacyNetworkName(chainId);\n return formatAddressWithNetwork(address, network);\n}\n\n/**\n * Getting a list of (lazy) promises and run them one after another.\n */\n\nexport async function runSequentiallyWithoutFailure<R>(\n promises: Array<() => Promise<R>>\n): Promise<Result<R, unknown>[]> {\n return promises.reduce(async (prevPromise, task) => {\n const previousResults = await prevPromise;\n try {\n const taskResult = await task();\n return [...previousResults, new Ok(taskResult)];\n } catch (error) {\n return [...previousResults, new Err(error)];\n }\n }, Promise.resolve<Result<R, unknown>[]>([]));\n}\n\nexport function isConnectResultEvm(\n result: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): result is AccountsWithActiveChain {\n return typeof result === 'object' && !Array.isArray(result);\n}\n\nexport function isConnectResultSolana(\n result: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): result is Accounts {\n return Array.isArray(result);\n}\n\ntype QueueItem<T> = {\n task: () => Promise<T>;\n resolve: (value: Result<T, unknown>) => void;\n key: string;\n};\n/**\n * Creates a queue manager that ensures sequential execution of tasks by key.\n * When multiple tasks with the same key are queued, they are executed one at a time\n * in the order they were added. This prevents race conditions and ensures\n * predictable task execution order.\n *\n */\nexport function createQueue(options?: {\n onError?: (\n error: unknown,\n actions: {\n removeCurrentKeyFromQueue: () => void;\n }\n ) => void;\n}) {\n const processingKeys = new Set<string>();\n let queue: QueueItem<unknown>[] = [];\n\n const removeKeyFromQueue = (\n key: string,\n result: Result<unknown, unknown>\n ) => {\n queue = queue.filter((q) => {\n if (q.key !== key) {\n return true;\n }\n q.resolve(result);\n return false;\n });\n };\n\n const processQueue = async () => {\n const currentItem = queue.find((item) => !processingKeys.has(item.key));\n if (!currentItem) {\n return;\n }\n\n const { task, resolve, key } = currentItem;\n processingKeys.add(key);\n\n try {\n const result = await task();\n resolve(new Ok(result));\n } catch (error) {\n if (options?.onError) {\n options.onError(error, {\n removeCurrentKeyFromQueue: () =>\n removeKeyFromQueue(key, new Err(error)),\n });\n }\n\n resolve(new Err(error));\n } finally {\n const indexOfCurrentItem = queue.findIndex((item) => item.key === key);\n if (indexOfCurrentItem >= 0) {\n queue.splice(indexOfCurrentItem, 1);\n }\n processingKeys.delete(key);\n void processQueue();\n }\n };\n\n const queueTask = async <T>(\n task: () => Promise<T>,\n key: string\n ): Promise<Result<T, unknown>> =>\n new Promise((resolve) => {\n queue.push({\n task,\n resolve: resolve as (value: Result<unknown, unknown>) => void,\n key,\n });\n void processQueue();\n });\n\n return queueTask;\n}\n\nexport function shouldTryAutoConnect(\n props: Pick<ProviderProps, 'allBlockChains' | 'autoConnect'>\n): boolean {\n return !!props.allBlockChains?.length && !!props.autoConnect;\n}\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "import type { Namespace } from '@hub3js/namespaces';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { Persistor } from './persistor.js';\n\nexport interface NamespaceInput {\n namespace: Namespace;\n network: string | undefined;\n}\n\nexport interface LastConnectedWalletsStorage {\n [providerId: string]: NamespaceInput[];\n}\n\n/**\n * We are doing some certain actions on storage for `last-connected-wallets` key.\n * This class helps us to define them in one place.\n */\nexport class LastConnectedWalletsFromStorage {\n #storageKey: string;\n\n constructor(storageKey: string) {\n this.#storageKey = storageKey;\n }\n\n addWallet(providerId: string, namespaces: NamespaceInput[]): void {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#addWalletToHub(providerId, namespaces);\n }\n throw new Error('Not implemented');\n }\n removeWallets(providerIds?: string[]): void {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#removeWalletsFromHub(providerIds);\n }\n throw new Error('Not implemented');\n }\n list(): LastConnectedWalletsStorage {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#listFromHub();\n }\n throw new Error('Not implemented');\n }\n removeNamespacesFromWallet(providerId: string, namespaceIds: string[]) {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#removeNamespaceFromWalletHub(providerId, namespaceIds);\n }\n throw new Error('Not implemented');\n }\n\n #listFromHub(): LastConnectedWalletsStorage {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const lastConnectedWallets =\n persistor.getItem(HUB_LAST_CONNECTED_WALLETS) || {};\n return lastConnectedWallets;\n }\n #addWalletToHub(providerId: string, namespaces: NamespaceInput[]): void {\n const storage = new Persistor<LastConnectedWalletsStorage>();\n const storageState = storage.getItem(this.#storageKey) || {};\n\n let toBeAddedNamespaces = namespaces;\n\n // If provider already exits in the storage, we should just add new namespaces to the previously added namespaces.\n if (!!storageState[providerId]) {\n const storedNamespaces = storageState[providerId];\n toBeAddedNamespaces = storedNamespaces.concat(\n namespaces.filter(\n (namespace) =>\n !storedNamespaces.some(\n (storedNamespace) =>\n storedNamespace.namespace === namespace.namespace\n )\n )\n );\n }\n\n storage.setItem(this.#storageKey, {\n ...storageState,\n [providerId]: toBeAddedNamespaces,\n });\n }\n #removeWalletsFromHub(providerIds?: string[]): void {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const storageState = persistor.getItem(this.#storageKey) || {};\n\n // Remove all wallets\n if (!providerIds) {\n persistor.setItem(this.#storageKey, {});\n return;\n }\n\n // Remove some of the wallets\n providerIds.forEach((providerId) => {\n if (storageState[providerId]) {\n delete storageState[providerId];\n }\n });\n\n persistor.setItem(this.#storageKey, storageState);\n }\n #removeNamespaceFromWalletHub(\n providerId: string,\n namespaceIds: string[]\n ): void {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const storageState = persistor.getItem(this.#storageKey) || {};\n\n const currentProviderNamespaces = storageState[providerId];\n const newProviderNamespaces = currentProviderNamespaces?.filter(\n (namespace) => !namespaceIds.includes(namespace.namespace)\n );\n\n this.#removeWalletsFromHub([providerId]);\n if (newProviderNamespaces?.length > 0) {\n this.#addWalletToHub(providerId, newProviderNamespaces);\n }\n }\n}\n", "import type { AllProxiedNamespaces, ExtensionLink } from './types.js';\nimport type {\n ConnectResult,\n NamespaceInputForConnect,\n WalletInfo,\n} from '../legacy/mod.js';\nimport type { ProviderContext, ProviderProps } from '../types.js';\nimport type { Provider, WalletType } from '@hub3js/core';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\n\nimport { utils } from '@hub3js/evm';\nimport {\n getSupportedChainsFromNamespace,\n getSupportedChainsFromProvider,\n} from '@rango-dev/internal-blockchains';\nimport { useEffect, useRef, useState } from 'react';\nimport { Ok, Result } from 'ts-results';\n\nimport { withErrorLoggingApi } from '../helpers.js';\n\nimport { autoConnect } from './autoConnect.js';\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { createQueue, fromAccountIdToLegacyAddressFormat } from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\nimport { useAutoConnect } from './useAutoConnect.js';\nimport { useHubRefs } from './useHubRefs.js';\nimport {\n findProviderByType,\n isEvmNamespace,\n isSolanaNamespace,\n isUtxoNamespace,\n mapHubEventsToLegacy,\n transformHubResultToLegacyResult,\n tryConvertNamespaceNetworkToChainInfo,\n} from './utils.js';\n\nexport type UseAdapterParams = Omit<ProviderProps, 'providers'> & {\n providers: Provider[];\n};\n\nexport function useHubAdapter(params: UseAdapterParams): ProviderContext {\n const { getStore, getHub } = useHubRefs(params.providers);\n const [, rerender] = useState(0);\n // useEffect will run `subscribe` once, so we need a reference and mutate the value if it's changes.\n const dataRef = useRef({\n onUpdateState: params.onUpdateState,\n allBlockChains: params.allBlockChains,\n });\n const hubInitiated = useRef(false);\n\n /*\n * Params of each connection attempt for each wallet type are stored here.\n * Derivation path from params is used in `mapHubEventsToLegacy` to be added to the payload of connect events.\n */\n const lastConnectAttemptParamsRef = useRef<{\n [type: WalletType]: NamespaceInputForConnect[];\n }>({});\n\n const updateLastConnectAttemptParams = (\n type: WalletType,\n namespaces: NamespaceInputForConnect[] | undefined\n ) => {\n lastConnectAttemptParamsRef.current[type] = namespaces || [];\n };\n\n const queueTask = createQueue({\n onError: (error, actions) => {\n if (utils.isUserRejectionError(error)) {\n actions.removeCurrentKeyFromQueue();\n }\n },\n });\n\n useEffect(() => {\n dataRef.current = {\n onUpdateState: params.onUpdateState,\n allBlockChains: params.allBlockChains,\n };\n }, [params]);\n\n useEffect(() => {\n getStore()\n .subscribe((event) => {\n if (dataRef.current.onUpdateState) {\n try {\n mapHubEventsToLegacy(\n getHub(),\n event,\n dataRef.current.onUpdateState,\n {\n allBlockChains: dataRef.current.allBlockChains,\n lastConnectAttemptParams: lastConnectAttemptParamsRef.current,\n }\n );\n } catch (e) {\n console.error(e);\n }\n }\n rerender((currentRender) => currentRender + 1);\n })\n .flushEvents();\n }, []);\n\n // Initialize hub only after blockchain meta is available (e.g. WalletConnect needs it at init).\n useEffect(() => {\n if (hubInitiated.current || !params.allBlockChains?.length) {\n return;\n }\n\n getHub().init(params.configs?.walletOptions);\n rerender((currentRender) => currentRender + 1);\n hubInitiated.current = true;\n }, [params.allBlockChains, params.configs?.walletOptions]);\n\n useAutoConnect({\n autoConnect: params.autoConnect,\n allBlockChains: params.allBlockChains,\n autoConnectHandler: () => {\n void autoConnect({\n allBlockChains: params.allBlockChains,\n getHub,\n wallets: params.configs?.wallets,\n });\n },\n });\n\n const lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n );\n\n const api: ProviderContext = {\n canSwitchNetworkTo(type, network, namespace) {\n const provider = getHub().get(type);\n\n if (!provider) {\n // TODO: should throw an error\n return false;\n }\n\n if (!namespace) {\n throw new Error(\n 'Passing namespace to `canSwitchNetworkTo` is required.'\n );\n }\n\n const proxiedNamespace = provider.findByNamespace(namespace.namespace);\n if (!proxiedNamespace) {\n throw new Error(\n `We couldn't find any matched namespace on your request provider. (requested namespace: ${namespace.namespace})`\n );\n }\n if (!('canSwitchNetwork' in proxiedNamespace)) {\n return false;\n }\n const namespacesProperty = provider\n .info()\n ?.metadata?.properties?.find(\n (property) => property.name === 'namespaces'\n );\n\n if (!dataRef.current.allBlockChains) {\n throw new Error(`Blockchains are not available`);\n }\n\n const namespaceMeta = namespacesProperty?.value.data.find(\n (providerNamespace) => providerNamespace.value === namespace.namespace\n );\n\n if (!namespaceMeta) {\n throw new Error(\n `NamespaceMeta is not defined for requested namespace: ${namespace.namespace}`\n );\n }\n\n const supportedChains = getSupportedChainsFromNamespace(\n namespaceMeta,\n dataRef.current.allBlockChains\n );\n\n return proxiedNamespace.canSwitchNetwork({\n network,\n supportedChains,\n });\n },\n async connect(type, namespaces) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'connect'.`\n );\n }\n\n if (!namespaces) {\n throw new Error('Passing namespace to `connect` is required.');\n }\n\n updateLastConnectAttemptParams(type, namespaces);\n\n // Check `namespace` and look into hub to see how it can match given namespace to hub namespace.\n const targetNamespaces: [\n NamespaceInputForConnect,\n AllProxiedNamespaces\n ][] = [];\n namespaces.forEach((namespace) => {\n const targetNamespace = namespace.namespace;\n\n const result = wallet.findByNamespace(targetNamespace);\n if (!result) {\n throw new Error(\n `We couldn't find any provider matched with your request namespace. (requested namespace: ${namespace.namespace})`\n );\n }\n\n targetNamespaces.push([namespace, result]);\n });\n\n // Try to run `connect` on matched namespaces\n const connectResultFromTargetNamespaces = targetNamespaces.map(\n async ([namespaceInput, namespace]) => {\n const network = tryConvertNamespaceNetworkToChainInfo(\n namespaceInput,\n params.allBlockChains || []\n );\n\n let connectNamespacePromise: () => Promise<\n Accounts | AccountsWithActiveChain\n >;\n\n if (isSolanaNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect({\n derivationPath: namespaceInput.derivationPath,\n });\n } else if (isEvmNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect(network, {\n derivationPath: namespaceInput.derivationPath,\n });\n } else if (isUtxoNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect({\n derivationPath: namespaceInput.derivationPath,\n });\n } else {\n connectNamespacePromise = async () => namespace.connect();\n }\n\n const connectNamespaceProcess = async () =>\n connectNamespacePromise()\n .then<ConnectResult>(transformHubResultToLegacyResult)\n .then((connectResult) => {\n return {\n response: connectResult,\n input: {\n namespace: namespaceInput.namespace,\n network: namespaceInput.network,\n supportsEagerConnect: 'canEagerConnect' in namespace,\n },\n };\n });\n return queueTask(connectNamespaceProcess, type);\n }\n );\n\n /*\n * We need to connect to namespace one after another, sending multiple requests at the same time may be failed.\n * e.g. when wallet popup opens and asking for the password from the user, it should be resolved first, then other request will be resolved.\n */\n const connectResultWithLegacyFormat = await Promise.all(\n connectResultFromTargetNamespaces\n );\n\n // Keeping only namespaces that connected successfully and support eager connect, then we'll store them on storage for auto connect functionality.\n const successfullyConnectedSupportingEagerConnectNamespaces =\n connectResultWithLegacyFormat\n .filter(<T, E>(result: Result<T, E>): result is Ok<T> => result.ok)\n .filter((result) => result.val.input.supportsEagerConnect)\n .map((result) => ({\n namespace: result.val.input.namespace,\n network: result.val.input.network,\n }));\n\n if (successfullyConnectedSupportingEagerConnectNamespaces.length > 0) {\n lastConnectedWalletsFromStorage.addWallet(\n type,\n successfullyConnectedSupportingEagerConnectNamespaces\n );\n }\n\n // Getting rid of `input` from Result\n const connectResults = connectResultWithLegacyFormat.map((result) =>\n result.andThen((okResult) => new Ok(okResult.response))\n );\n\n const allResult = Result.all(...connectResults);\n if (allResult.err) {\n throw allResult.val;\n }\n\n return allResult.unwrap();\n },\n async disconnect(type, namespaces) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'disconnect'.`\n );\n }\n\n wallet.getAll().forEach((namespace) => {\n const namespaceShouldBeDisconnected =\n !namespaces || namespaces.includes(namespace.namespaceId);\n const namespaceIsConnected = namespace.state()[0]().connected;\n if (namespaceShouldBeDisconnected && namespaceIsConnected) {\n return namespace.disconnect();\n }\n });\n\n if (params.autoConnect) {\n if (namespaces) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n type,\n namespaces\n );\n } else {\n lastConnectedWalletsFromStorage.removeWallets([type]);\n }\n }\n },\n async disconnectAll() {\n const disconnectPromises: Promise<void>[] = Array.from(\n getHub().getAll().values()\n ).map(async (provider) => this.disconnect(provider.id));\n\n return await Promise.allSettled(disconnectPromises);\n },\n async getSigners(type) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const info = wallet.info();\n if (!info) {\n throw new Error('Your provider should have required `info`.');\n }\n\n const providerProperties = info.metadata.properties;\n\n const signerProperty = providerProperties?.find(\n (property) => property.name === 'signers'\n );\n if (!signerProperty) {\n throw new Error('Your provider should contain signers property.');\n }\n\n return signerProperty.value.getSigners();\n },\n getWalletInfo(type) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const info = wallet.info();\n if (!info) {\n throw new Error('Your provider should have required `info`.');\n }\n\n const installLink: Exclude<WalletInfo['installLink'], string> = {\n DEFAULT: '',\n };\n\n const { metadata } = info;\n const { extensions } = metadata;\n // `extensions` in legacy format was uppercase and also `DEFAULT` was used instead of `homepage`\n Object.keys(extensions).forEach((k) => {\n const key = k as ExtensionLink;\n\n if (key === 'homepage') {\n installLink.DEFAULT = extensions[key] || '';\n }\n\n const allowedKeys: ExtensionLink[] = [\n 'firefox',\n 'chrome',\n 'brave',\n 'edge',\n ];\n if (allowedKeys.includes(key)) {\n const upperCasedKey = key.toUpperCase() as keyof Exclude<\n WalletInfo['installLink'],\n string\n >;\n installLink[upperCasedKey] = extensions[key] || '';\n }\n });\n\n const providerProperties = metadata.properties;\n\n const namespacesProperty = providerProperties?.find(\n (property) => property.name === 'namespaces'\n );\n const derivationPathProperty = providerProperties?.find(\n (property) => property.name === 'derivationPath'\n );\n const detailsProperty = providerProperties?.find(\n (property) => property.name === 'details'\n );\n\n return {\n name: metadata.name,\n img: metadata.icon,\n installLink: installLink,\n // We don't have this values anymore, fill them with some values that communicate this.\n color: 'red',\n supportedChains: getSupportedChainsFromProvider(\n wallet,\n dataRef.current.allBlockChains\n ),\n isContractWallet: detailsProperty?.value?.isContractWallet,\n mobileWallet: detailsProperty?.value?.mobileWallet,\n // if set to false here, it will not show the wallet in mobile in anyways. to be compatible with old behavior, undefined is more appropirate.\n showOnMobile: detailsProperty?.value?.showOnMobile,\n needsNamespace: namespacesProperty?.value,\n needsDerivationPath: derivationPathProperty?.value,\n isHub: true,\n properties: metadata.properties,\n };\n },\n state(type) {\n const hubState = getHub().state();\n const wallet = getHub().get(type);\n const walletState = hubState[type];\n\n if (!walletState || !wallet) {\n // TODO: should throw an error\n return {\n connected: false,\n connecting: false,\n installed: false,\n reachable: false,\n accounts: null,\n network: null,\n namespaces: new Map(),\n };\n }\n\n const accounts = walletState.namespaces\n .filter((namespace) => namespace.connected)\n .flatMap((namespace) =>\n namespace.accounts?.map((accounts) =>\n fromAccountIdToLegacyAddressFormat(accounts)\n )\n )\n .filter((account): account is string => !!account);\n\n const namespacesState = new Map(\n Array.from(wallet.getAll(), ([_, value]) => [\n value.namespaceId,\n value.state()[0](),\n ])\n );\n\n const coreState = {\n connected: walletState.connected,\n connecting: walletState.connecting,\n installed: walletState.installed,\n reachable: true,\n accounts: accounts,\n network: null,\n namespaces: namespacesState,\n };\n return coreState;\n },\n async suggestAndConnect(type, namespace): Promise<ConnectResult> {\n const provider = getHub().get(type);\n\n if (!provider) {\n throw new Error(\n `You should add ${type} to provider first then call 'suggestAndConnect'.`\n );\n }\n const proxiedNamespace = provider.findByNamespace(namespace.namespace);\n if (!proxiedNamespace) {\n throw new Error(\n `We couldn't find any matched namespace on your request provider. (requested namespace: ${namespace.namespace})`\n );\n }\n if (!('suggest' in proxiedNamespace)) {\n throw new Error('Suggest is not implemented on the provider');\n }\n if (!namespace.network) {\n throw new Error('You should pass network to the suggest and connect');\n }\n throw new Error(\n `Suggest has not been implemented for given chain: ${namespace.network}`\n );\n },\n hubProvider(type) {\n const provider = findProviderByType(params.providers, type);\n\n if (!provider) {\n throw new Error(\n `You're trying to access ${type} provider which is not found in hub providers. it may not be registered yet.`\n );\n }\n\n return provider;\n },\n };\n\n return withErrorLoggingApi(api);\n}\n", "import type { ProviderContext } from './types.js';\n\nimport { debug } from '@rango-dev/logging-core';\n\nfunction logError(method: string, args: unknown[], error: unknown) {\n const err = error instanceof Error ? error : new Error(String(error));\n debug(err, {\n context: { method, args },\n tags: { type: 'wallet-error' },\n });\n}\n\nfunction withErrorLogging<TArgs extends unknown[], TReturn>(\n method: string,\n fn: (...args: TArgs) => TReturn\n): (...args: TArgs) => TReturn {\n return (...args: TArgs): TReturn => {\n try {\n const result = fn(...args);\n // Async method: catch the rejection, log, then throw the rejection.\n if (result instanceof Promise) {\n return result.catch((error: unknown) => {\n logError(method, args, error);\n throw error;\n }) as TReturn;\n }\n return result;\n } catch (error) {\n // Sync method: log and rethrow.\n logError(method, args, error);\n throw error;\n }\n };\n}\n\nexport function withErrorLoggingApi(api: ProviderContext): ProviderContext {\n const entries = Object.entries(api).map(([key, value]) => [\n key,\n withErrorLogging(key, (value as (...args: unknown[]) => unknown).bind(api)),\n ]);\n\n return Object.fromEntries(entries) as ProviderContext;\n}\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type { UseAdapterParams } from './useHubAdapter.js';\nimport type { NamespaceInputForConnect } from '../legacy/types.js';\nimport type { Hub, Provider, WalletType } from '@hub3js/core';\nimport type { DefaultNamespaces, Namespace } from '@hub3js/namespaces';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\n\nimport { Result } from 'ts-results';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { runSequentiallyWithoutFailure } from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\nimport {\n convertNamespaceNetworkToEvmChainId,\n isEvmNamespace,\n} from './utils.js';\n\nfunction isEvmNamespaceInput(\n namespace: NamespaceInputForConnect\n): namespace is NamespaceInputForConnect<'EVM'> {\n return namespace.namespace === 'EVM';\n}\n\n// Getting connected wallets from storage\nconst lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n);\n\n/**\n * Run `.connect` action on some selected namespaces (passed as param) for a provider.\n */\nasync function eagerConnect(\n type: string,\n namespacesInput: NamespaceInputForConnect[] | undefined,\n params: {\n getHub: () => Hub;\n allBlockChains: UseAdapterParams['allBlockChains'];\n }\n) {\n const { getHub, allBlockChains } = params;\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'connect'.`\n );\n }\n\n if (!namespacesInput) {\n throw new Error('Passing namespace to `connect` is required. ');\n }\n\n const targetNamespaces: [NamespaceInputForConnect, AllProxiedNamespaces][] =\n [];\n namespacesInput.forEach((namespaceInput) => {\n const targetNamespace: Namespace = namespaceInput.namespace;\n\n const result = wallet.findByNamespace(targetNamespace);\n\n if (!result) {\n throw new Error(\n `We couldn't find any provider matched with your request namespace. (requested namespace: ${namespaceInput.namespace})`\n );\n }\n\n targetNamespaces.push([namespaceInput, result]);\n });\n\n const connectNamespacesPromises = targetNamespaces.map(\n ([info, namespace]) => {\n const evmChain = isEvmNamespaceInput(info)\n ? convertNamespaceNetworkToEvmChainId(info, allBlockChains || [])\n : undefined;\n const chain = evmChain || info.network;\n\n return async () => {\n let connectNamespacePromise: () => Promise<\n Accounts | AccountsWithActiveChain\n >;\n if (isEvmNamespace(namespace)) {\n connectNamespacePromise = async () => namespace.connect(chain);\n } else {\n connectNamespacePromise = async () => namespace.connect();\n }\n try {\n await connectNamespacePromise();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n /*\n * Since we check for connect failures using `instanceof Error`\n * this check is added here to make sure the thrown error always is an instance of `Error`\n */\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e);\n }\n };\n }\n );\n\n /**\n * Sometimes calling methods on a instance in parallel, would cause an error in wallet.\n * We are running a method at a time to make sure we are covering this.\n * e.g. when we are trying to eagerConnect evm and solana on phantom at the same time, the last namespace throw an error.\n */\n const connectNamespacesResult = await runSequentiallyWithoutFailure(\n connectNamespacesPromises\n );\n\n const failedNamespaces: NamespaceInputForConnect[] = targetNamespaces\n .filter((_, index) => connectNamespacesResult[index].err)\n .map((targetNamespace) => targetNamespace[0]);\n\n if (failedNamespaces.length > 0) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n type,\n failedNamespaces.map((namespace) => namespace.namespace)\n );\n }\n\n const atLeastOneNamespaceConnectedSuccessfully = connectNamespacesResult.some(\n (result) => result.ok\n );\n if (!atLeastOneNamespaceConnectedSuccessfully) {\n throw new Error(`No namespace connected for ${type}`);\n }\n return Result.all(\n ...connectNamespacesResult.filter((result) => result.ok)\n ).unwrap();\n}\n\n/**\n * Run `.canEagerConnect` action on some selected namespaces of a wallet.\n */\nasync function tryRunCanEagerConnect(\n namespaces: NamespaceInputForConnect[],\n wallet: Provider<DefaultNamespaces>\n): Promise<{\n successNamespaces: NamespaceInputForConnect[];\n failedNamespaces: NamespaceInputForConnect[];\n}> {\n const foundNamespaces: NamespaceInputForConnect[] = [];\n const successNamespaces: NamespaceInputForConnect[] = [];\n const failedNamespaces: NamespaceInputForConnect[] = [];\n const canEagerConnectPromises: (() => Promise<boolean>)[] = [];\n\n // 1. Try find namespace instances and create canEagerConnect promises\n namespaces.forEach((namespace) => {\n const namespaceInstance = wallet.findByNamespace(namespace.namespace);\n if (namespaceInstance) {\n foundNamespaces.push(namespace);\n canEagerConnectPromises.push(\n async () => await namespaceInstance.canEagerConnect()\n );\n } else {\n failedNamespaces.push(namespace);\n }\n });\n\n // 2. Run canEagerConnect sequentially on namespaces\n const canEagerConnectResults = await runSequentiallyWithoutFailure(\n canEagerConnectPromises\n );\n\n // 3. Separate success and failed namespaces based on canEagerConnect result\n foundNamespaces.forEach((namespace, index) => {\n if (canEagerConnectResults[index].ok && canEagerConnectResults[index].val) {\n successNamespaces.push(namespace);\n } else {\n failedNamespaces.push(namespace);\n }\n });\n\n return { successNamespaces, failedNamespaces };\n}\n\n/*\n * Get last connected wallets and last connected namespaces for each of them from storage\n * Then run `.connect` on each namespace if `.canEagerConnect` returns true.\n */\nexport async function autoConnect(deps: {\n getHub: () => Hub;\n allBlockChains: UseAdapterParams['allBlockChains'];\n wallets?: (WalletType | Provider)[];\n}): Promise<void> {\n const { getHub, allBlockChains, wallets } = deps;\n const lastConnectedWallets = lastConnectedWalletsFromStorage.list();\n const walletIds = Object.keys(lastConnectedWallets);\n\n const walletsToRemoveFromPersistence: string[] = [];\n\n if (walletIds.length) {\n const eagerConnectQueue: Promise<unknown>[] = [];\n\n const configWalletNames = wallets?.map((wallet) =>\n typeof wallet === 'string' ? wallet : wallet.id\n );\n // Run `.connect` if `.canEagerConnect` returns `true`.\n walletIds.forEach(async (providerName) => {\n if (configWalletNames && !configWalletNames.includes(providerName)) {\n console.warn(\n 'Trying to run auto connect for a wallet which is not included in config. Desired wallet:',\n providerName\n );\n walletsToRemoveFromPersistence.push(providerName);\n return;\n }\n\n const wallet = getHub().get(providerName);\n\n const lastConnectedNamespaces: NamespaceInputForConnect[] =\n lastConnectedWallets[providerName].map((namespace) => ({\n namespace: namespace.namespace,\n network: namespace.network,\n }));\n\n if (!lastConnectedNamespaces.length || !wallet) {\n walletsToRemoveFromPersistence.push(providerName);\n return;\n }\n\n const { successNamespaces, failedNamespaces } =\n await tryRunCanEagerConnect(lastConnectedNamespaces, wallet);\n\n if (!successNamespaces.length) {\n walletsToRemoveFromPersistence.push(providerName);\n return;\n } else if (failedNamespaces.length) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n wallet.id,\n failedNamespaces.map((namespace) => namespace.namespace)\n );\n }\n eagerConnectQueue.push(\n eagerConnect(providerName, successNamespaces, {\n allBlockChains,\n getHub,\n }).catch((error) => console.warn(error))\n );\n });\n\n lastConnectedWalletsFromStorage.removeWallets(\n walletsToRemoveFromPersistence\n );\n\n await Promise.all(eagerConnectQueue);\n }\n}\n", "import type { ProviderProps } from '../types.js';\n\nimport { useEffect, useRef } from 'react';\n\nimport { shouldTryAutoConnect } from './helpers.js';\n\nexport function useAutoConnect(\n props: Pick<ProviderProps, 'allBlockChains' | 'autoConnect'> & {\n /**\n * A function to run autoConnect on instances\n */\n autoConnectHandler: () => void;\n }\n) {\n const autoConnectInitiated = useRef(false);\n\n useEffect(() => {\n if (shouldTryAutoConnect(props) && !autoConnectInitiated.current) {\n autoConnectInitiated.current = true;\n props.autoConnectHandler();\n }\n }, [props.autoConnect, props.allBlockChains]);\n}\n", "import type { Provider, Store } from '@hub3js/core';\n\nimport { createStore, Hub } from '@hub3js/core';\nimport { useRef } from 'react';\n\nimport { synchronizeHubWithConfigProviders } from './utils.js';\n\nexport function useHubRefs(providers: Provider[]) {\n const store = useRef<Store | null>(null);\n\n const hub = useRef<Hub | null>(null);\n\n function createHub() {\n const createdHub = new Hub({\n store: getStore(),\n });\n /*\n * First add providers to hub\n * This helps to `getWalletInfo` be usable, before initialize.\n */\n providers.forEach((provider) => {\n createdHub.add(provider.id, provider);\n });\n hub.current = createdHub;\n return createdHub;\n }\n\n // https://react.dev/reference/react/useRef#avoiding-recreating-the-ref-contents\n function getStore() {\n if (store.current !== null) {\n return store.current;\n }\n const createdStore = createStore();\n store.current = createdStore;\n return createdStore;\n }\n\n function getHub(): Hub {\n const hubProviders = hub.current?.getAll();\n\n if (!hub.current || !hubProviders) {\n return createHub();\n }\n\n synchronizeHubWithConfigProviders(hub.current, providers);\n return hub.current;\n }\n\n return { getStore, getHub };\n}\n", "import type { ProviderContext } from './types.js';\n\nimport { useContext } from 'react';\n\nimport { WalletContext } from './context.js';\n\nexport function useWallets(): ProviderContext {\n const context = useContext(WalletContext);\n if (!context) {\n throw Error('useWallet can only be used within the Provider component');\n }\n return context;\n}\n"],
5
- "mappings": "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",
6
- "names": ["React", "createContext", "defaultErrorMessage", "defaultContext", "WalletContext", "pickVersion", "convertEvmBlockchainMetaToEvmChainInfo", "formatAddressWithNetwork", "getBlockChainNameFromId", "getSupportedChainsFromProvider", "AccountId", "isEvmBlockchain", "Events", "HUB_LAST_CONNECTED_WALLETS", "CAIP_BITCOIN_CHAIN_ID", "CAIP_BITCOINCASH_CHAIN_ID", "CAIP_DOGECOIN_CHAIN_ID", "CAIP_LITECOIN_CHAIN_ID", "CAIP_ZCASH_CHAIN_ID", "CAIP_TON_NAMESPACE", "formatAddressWithNetwork", "CAIP_TRON_CHAIN_ID", "AccountId", "Err", "Ok", "mapCaipNamespaceToLegacyNetworkName", "chainId", "CAIP_BITCOIN_CHAIN_ID", "CAIP_ZCASH_CHAIN_ID", "CAIP_LITECOIN_CHAIN_ID", "CAIP_DOGECOIN_CHAIN_ID", "CAIP_BITCOINCASH_CHAIN_ID", "CAIP_TON_NAMESPACE", "CAIP_TRON_CHAIN_ID", "__name", "fromAccountIdToLegacyAddressFormat", "account", "address", "AccountId", "network", "formatAddressWithNetwork", "runSequentiallyWithoutFailure", "promises", "prevPromise", "task", "previousResults", "taskResult", "Ok", "error", "Err", "isConnectResultEvm", "result", "isConnectResultSolana", "createQueue", "options", "processingKeys", "queue", "removeKeyFromQueue", "key", "q", "processQueue", "currentItem", "item", "resolve", "indexOfCurrentItem", "shouldTryAutoConnect", "props", "Persistor", "__name", "name", "item", "value", "LastConnectedWalletsFromStorage", "__name", "#storageKey", "storageKey", "providerId", "namespaces", "HUB_LAST_CONNECTED_WALLETS", "#addWalletToHub", "providerIds", "#removeWalletsFromHub", "#listFromHub", "namespaceIds", "#removeNamespaceFromWalletHub", "Persistor", "storage", "storageState", "toBeAddedNamespaces", "storedNamespaces", "namespace", "storedNamespace", "persistor", "newProviderNamespaces", "getHubProviders", "providers", "provider", "pickVersion", "__name", "findProviderByType", "type", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "mapHubEventsToLegacy", "hub", "event", "onUpdateState", "metadata", "namespaceId", "namespace", "accounts", "network", "derivationPath", "getNamespaceState", "getProviderState", "coreState", "detailsProperty", "property", "eventInfo", "getSupportedChainsFromProvider", "formattedAddresses", "account", "chainId", "address", "AccountId", "blockchainName", "getBlockChainNameFromId", "formatAddressWithNetwork", "fromAccountIdToLegacyAddressFormat", "convertNamespaceNetworkToEvmChainId", "meta", "evmBlockchainsList", "isEvmBlockchain", "convertEvmBlockchainMetaToEvmChainInfo", "tryConvertNamespaceNetworkToChainInfo", "transformHubResultToLegacyResult", "res", "isConnectResultEvm", "isConnectResultSolana", "synchronizeHubWithConfigProviders", "configurationProviders", "registeredProviders", "configProvider", "providerToRegister", "registeredProvider", "isSolanaNamespace", "ns", "isEvmNamespace", "isUtxoNamespace", "utils", "getSupportedChainsFromNamespace", "getSupportedChainsFromProvider", "useEffect", "useRef", "useState", "Ok", "Result", "debug", "logError", "method", "args", "error", "err", "debug", "__name", "withErrorLogging", "fn", "result", "withErrorLoggingApi", "api", "entries", "key", "value", "Result", "isEvmNamespaceInput", "namespace", "__name", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "eagerConnect", "type", "namespacesInput", "params", "getHub", "allBlockChains", "wallet", "targetNamespaces", "namespaceInput", "targetNamespace", "result", "connectNamespacesPromises", "info", "chain", "convertNamespaceNetworkToEvmChainId", "connectNamespacePromise", "isEvmNamespace", "e", "connectNamespacesResult", "runSequentiallyWithoutFailure", "failedNamespaces", "_", "index", "Result", "tryRunCanEagerConnect", "namespaces", "foundNamespaces", "successNamespaces", "canEagerConnectPromises", "namespaceInstance", "canEagerConnectResults", "autoConnect", "deps", "wallets", "lastConnectedWallets", "walletIds", "walletsToRemoveFromPersistence", "eagerConnectQueue", "configWalletNames", "providerName", "lastConnectedNamespaces", "error", "useEffect", "useRef", "useAutoConnect", "props", "autoConnectInitiated", "useRef", "useEffect", "shouldTryAutoConnect", "__name", "createStore", "Hub", "useRef", "useHubRefs", "providers", "store", "useRef", "hub", "createHub", "createdHub", "Hub", "getStore", "provider", "__name", "createdStore", "createStore", "getHub", "hubProviders", "synchronizeHubWithConfigProviders", "useHubAdapter", "params", "getStore", "getHub", "useHubRefs", "rerender", "useState", "dataRef", "useRef", "hubInitiated", "lastConnectAttemptParamsRef", "updateLastConnectAttemptParams", "__name", "type", "namespaces", "queueTask", "createQueue", "error", "actions", "utils", "useEffect", "event", "mapHubEventsToLegacy", "e", "currentRender", "useAutoConnect", "autoConnect", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "withErrorLoggingApi", "network", "namespace", "provider", "proxiedNamespace", "namespacesProperty", "property", "namespaceMeta", "providerNamespace", "supportedChains", "getSupportedChainsFromNamespace", "wallet", "targetNamespaces", "targetNamespace", "result", "connectResultFromTargetNamespaces", "namespaceInput", "tryConvertNamespaceNetworkToChainInfo", "connectNamespacePromise", "isSolanaNamespace", "isEvmNamespace", "isUtxoNamespace", "transformHubResultToLegacyResult", "connectResult", "connectResultWithLegacyFormat", "successfullyConnectedSupportingEagerConnectNamespaces", "connectResults", "okResult", "Ok", "allResult", "Result", "namespaceShouldBeDisconnected", "namespaceIsConnected", "disconnectPromises", "info", "signerProperty", "installLink", "metadata", "extensions", "k", "key", "upperCasedKey", "providerProperties", "derivationPathProperty", "detailsProperty", "getSupportedChainsFromProvider", "hubState", "walletState", "accounts", "fromAccountIdToLegacyAddressFormat", "account", "namespacesState", "_", "value", "findProviderByType", "Provider", "props", "api", "useHubAdapter", "getHubProviders", "React", "WalletContext", "__name", "provider_default", "useContext", "useWallets", "context", "useContext", "WalletContext", "__name"]
4
+ "sourcesContent": ["import type { ProviderProps } from './types.js';\n\nimport React from 'react';\n\nimport { WalletContext } from './context.js';\nimport { useHubAdapter } from './hub/mod.js';\n\nfunction Provider(props: ProviderProps) {\n const api = useHubAdapter(props);\n\n return (\n <WalletContext.Provider value={api}>\n {props.children}\n </WalletContext.Provider>\n );\n}\n\nexport default Provider;\n", "import type { ProviderContext } from './types.js';\n\nimport { createContext } from 'react';\n\nconst defaultErrorMessage = \"Context hasn't been initialized yet.\";\nconst defaultContext: ProviderContext = {\n async connect() {\n throw new Error(defaultErrorMessage);\n },\n async disconnect() {\n throw new Error(defaultErrorMessage);\n },\n async disconnectAll() {\n throw new Error(defaultErrorMessage);\n },\n async suggestAndConnect() {\n throw new Error(defaultErrorMessage);\n },\n state() {\n throw new Error(defaultErrorMessage);\n },\n canSwitchNetworkTo() {\n throw new Error(defaultErrorMessage);\n },\n getWalletInfo() {\n throw new Error(defaultErrorMessage);\n },\n getSigners() {\n throw new Error(defaultErrorMessage);\n },\n hubProvider() {\n throw new Error(defaultErrorMessage);\n },\n};\n\nexport const WalletContext = createContext<ProviderContext>(defaultContext);\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type {\n ConnectResult,\n NamespaceInputForConnect,\n EventHandler as WalletEventHandler,\n} from '../legacy/mod.js';\nimport type { ProviderProps } from '../types.js';\nimport type { UtxoActions } from '@hub3js/bip122';\nimport type { Hub, Provider, ProxiedNamespace, WalletType } from '@hub3js/core';\nimport type { Event } from '@hub3js/core/store';\nimport type {\n Chain as AddEthereumChainParameter,\n EvmActions,\n} from '@hub3js/evm';\nimport type { SolanaActions } from '@hub3js/solana';\n\nimport {\n convertEvmBlockchainMetaToEvmChainInfo,\n formatAddressWithNetwork,\n getBlockChainNameFromId,\n getSupportedChainsFromProvider,\n} from '@rango-dev/internal-blockchains';\nimport { AccountId } from 'caip';\nimport { type BlockchainMeta, isEvmBlockchain } from 'rango-types';\n\nimport { Events } from '../legacy/mod.js';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport {\n fromAccountIdToLegacyAddressFormat,\n isConnectResultEvm,\n isConnectResultSolana,\n} from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\n\nexport function findProviderByType(\n providers: Provider[],\n type: string\n): Provider | undefined {\n return providers.find((provider) => provider.id === type);\n}\n\n/**\n * We will call this function on hub's `subscribe`.\n * it will check states and will emit legacy events for backward compatibility.\n */\n\nconst lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n);\n\nexport function mapHubEventsToLegacy(\n hub: Hub,\n event: Event,\n onUpdateState: WalletEventHandler,\n metadata: {\n allBlockChains: ProviderProps['allBlockChains'];\n lastConnectAttemptParams: {\n [type: WalletType]: NamespaceInputForConnect[];\n };\n }\n): void {\n const provider = hub.get(event.provider);\n if (!provider) {\n throw new Error(\n \"Currently all the events have assigned to a provider. The event doesn't include one.\",\n {\n cause: event,\n }\n );\n }\n\n // @ts-expect-error for those events that doesn't have namespace, it will be undefinded\n const namespaceId: string | undefined = event.namespace;\n\n const namespace = namespaceId\n ? provider.findByNamespace(namespaceId)\n : undefined;\n let accounts: string[] | null = null;\n let network: string | null = null;\n let derivationPath: string | undefined;\n\n if (namespace) {\n const [getNamespaceState] = namespace.state();\n accounts = getNamespaceState().accounts;\n network = getNamespaceState().network;\n\n if (metadata.lastConnectAttemptParams[event.provider]) {\n derivationPath = metadata.lastConnectAttemptParams[event.provider].find(\n (namespace) => namespace.namespace === namespaceId\n )?.derivationPath;\n }\n }\n\n const [getProviderState] = provider.state();\n const coreState = {\n connected: getProviderState().connected,\n connecting: getProviderState().connecting,\n installed: getProviderState().installed,\n accounts,\n network,\n reachable: true,\n derivationPath,\n };\n\n const detailsProperty = provider\n .info()\n ?.metadata.properties?.find((property) => property.name === 'details');\n\n const eventInfo = {\n supportedBlockchains: getSupportedChainsFromProvider(\n provider,\n metadata.allBlockChains\n ),\n isContractWallet: detailsProperty?.value?.isContractWallet ?? false,\n isHub: true,\n namespace: namespaceId,\n };\n\n switch (event.type) {\n case 'provider_detected':\n onUpdateState(\n event.provider,\n Events.INSTALLED,\n true,\n coreState,\n eventInfo\n );\n break;\n case 'provider_connecting':\n onUpdateState(\n event.provider,\n Events.CONNECTING,\n event.value,\n coreState,\n eventInfo\n );\n break;\n case 'provider_connected':\n onUpdateState(\n event.provider,\n Events.CONNECTED,\n true,\n coreState,\n eventInfo\n );\n break;\n case 'provider_disconnected':\n onUpdateState(\n event.provider,\n Events.PROVIDER_DISCONNECTED,\n event.provider,\n coreState,\n eventInfo\n );\n onUpdateState(\n event.provider,\n Events.CONNECTED,\n false,\n coreState,\n eventInfo\n );\n onUpdateState(\n event.provider,\n Events.ACCOUNTS,\n null,\n coreState,\n eventInfo\n );\n break;\n case 'namespace_disconnected':\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n event.provider,\n [event.namespace]\n );\n\n onUpdateState(\n event.provider,\n Events.NAMESPACE_DISCONNECTED,\n event.namespace,\n coreState,\n {\n ...eventInfo,\n namespace: event.namespace,\n }\n );\n // onUpdateState(event.provider, Events.ACCOUNTS, null, coreState, eventInfo);\n break;\n case 'namespace_connected':\n case 'namespace_account_switched':\n {\n if (event.type === 'namespace_account_switched') {\n onUpdateState(\n event.provider,\n Events.NAMESPACE_DISCONNECTED,\n event.namespace,\n coreState,\n eventInfo\n );\n }\n\n let formattedAddresses: string[] = [];\n if (eventInfo.isContractWallet) {\n formattedAddresses = event.accounts.map((account) => {\n const { chainId, address } = AccountId.parse(account);\n if (typeof chainId === 'string') {\n throw new Error('Should be in CAIP format');\n }\n const blockchainName = getBlockChainNameFromId(\n chainId.reference,\n eventInfo.supportedBlockchains\n );\n\n return blockchainName\n ? formatAddressWithNetwork(address, blockchainName)\n : fromAccountIdToLegacyAddressFormat(account);\n });\n } else {\n formattedAddresses = event.accounts.map((accounts) =>\n fromAccountIdToLegacyAddressFormat(accounts)\n );\n }\n\n onUpdateState(\n event.provider,\n Events.ACCOUNTS,\n formattedAddresses,\n coreState,\n {\n ...eventInfo,\n namespace: event.namespace,\n }\n );\n }\n break;\n case 'namespace_network_switched':\n onUpdateState(event.provider, Events.NETWORK, event.network, coreState, {\n ...eventInfo,\n namespace: event.namespace,\n });\n break;\n }\n}\n\n/**\n * In legacy mode, for those who have switch network functionality (like evm), we are using an enum for network names\n * this enum only has meaning for us, and when we are going to connect an instance (e.g. window.ethereum) we should pass chain id.\n */\nexport function convertNamespaceNetworkToEvmChainId(\n namespace: NamespaceInputForConnect,\n meta: BlockchainMeta[]\n): AddEthereumChainParameter | undefined {\n if (!namespace.network) {\n return undefined;\n }\n\n const evmBlockchainsList = meta.filter(isEvmBlockchain);\n const evmChains = convertEvmBlockchainMetaToEvmChainInfo(evmBlockchainsList);\n\n return evmChains[namespace.network];\n}\n\n/**\n * We are passing an string for chain id (e.g. ETH, POLYGON), but wallet's instances (e.g. window.ethereum) needs chainId (e.g. 0x1).\n * This function will help us to map these strings to proper hex ids.\n */\nexport function tryConvertNamespaceNetworkToChainInfo(\n namespace: NamespaceInputForConnect,\n meta: BlockchainMeta[]\n): string | AddEthereumChainParameter | undefined {\n // `undefined` means it's not evm or we couldn't find it in meta.\n const evmChain = convertNamespaceNetworkToEvmChainId(namespace, meta);\n const network = evmChain || namespace.network;\n\n return network;\n}\n\nexport function transformHubResultToLegacyResult(\n res: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): ConnectResult {\n if (isConnectResultEvm(res)) {\n return {\n accounts: res.accounts,\n network: res.network,\n };\n } else if (isConnectResultSolana(res)) {\n return {\n accounts: res,\n network: null,\n };\n }\n\n return {\n accounts: [res],\n network: null,\n };\n}\n\n/**\n * Synchronizes providers in the hub with the configuration providers.\n * - Registers and initializes any configuration providers not yet in the hub\n * - Removes providers from the hub that aren't in the configuration\n */\nexport function synchronizeHubWithConfigProviders(\n hub: Hub,\n configurationProviders: Provider[]\n) {\n const registeredProviders = hub.getAll();\n\n // Register and initialize providers that exist in config but not in hub\n const providersToRegister = configurationProviders.filter(\n (configProvider) => !registeredProviders.get(configProvider.id)\n );\n\n providersToRegister.forEach((providerToRegister) => {\n hub.add(providerToRegister.id, providerToRegister);\n providerToRegister.init();\n });\n\n // Remove providers that exist in hub but not in config\n registeredProviders.forEach((registeredProvider) => {\n const isProviderInConfig = configurationProviders.some(\n (configProvider) => configProvider.id === registeredProvider.id\n );\n\n if (!isProviderInConfig) {\n hub.remove(registeredProvider.id);\n }\n });\n}\n\nexport function isSolanaNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<SolanaActions> & { namespaceId: 'Solana' } {\n return ns.namespaceId === 'Solana';\n}\nexport function isEvmNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<EvmActions> & { namespaceId: 'EVM' } {\n return ns.namespaceId === 'EVM';\n}\nexport function isUtxoNamespace(\n ns: AllProxiedNamespaces\n): ns is AllProxiedNamespaces &\n ProxiedNamespace<UtxoActions> & { namespaceId: 'UTXO' } {\n return ns.namespaceId === 'UTXO';\n}\n", "import type {\n DerivationPathProperty,\n NamespacesProperty,\n ProviderMetadata,\n WalletType,\n} from '@hub3js/core';\nimport type { Namespace } from '@hub3js/namespaces';\nimport type { Network } from '@rango-dev/internal-blockchains';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nexport type NamespaceMeta = NamespacesProperty['value']['data'][number];\nexport type NeedsNamespace = NamespacesProperty['value'];\nexport type NeedsDerivationPath = DerivationPathProperty['value'];\n\nexport type InstallObjects = {\n CHROME?: string;\n FIREFOX?: string;\n EDGE?: string;\n BRAVE?: string;\n DEFAULT: string;\n};\n\nexport type WalletInfo = {\n name: string;\n img: string;\n installLink: InstallObjects | string;\n /**\n * @deprecated we don't use this value anymore.\n */\n color: string;\n supportedChains: BlockchainMeta[];\n showOnMobile?: boolean;\n isContractWallet?: boolean;\n mobileWallet?: boolean;\n\n needsDerivationPath?: NeedsDerivationPath;\n needsNamespace?: NeedsNamespace;\n};\n\nexport type WalletState = {\n connected: boolean;\n connecting: boolean;\n /**\n * @deprecated it always returns `false`. don't use it.\n */\n reachable: boolean;\n installed: boolean;\n accounts: string[] | null;\n network: Network | null;\n derivationPath?: string;\n};\n\ntype NamespaceData = {\n namespace: Namespace;\n derivationPath?: string;\n};\n\nexport type NamespaceInputForConnect<T extends Namespace = Namespace> = {\n /**\n * By default, you should specify namespace (e.g. evm).\n */\n namespace: T;\n /**\n * In some cases, we need to connect a specific network on a namespace. e.g. Polygon on EVM.\n */\n network: Network | undefined;\n derivationPath?: string;\n};\n\nexport enum Events {\n CONNECTED = 'connected',\n CONNECTING = 'connecting',\n REACHABLE = 'reachable',\n INSTALLED = 'installed',\n ACCOUNTS = 'accounts',\n NETWORK = 'network',\n // Hub only events\n NAMESPACE_DISCONNECTED = 'namespace_disconnected',\n\n PROVIDER_DISCONNECTED = 'provider_disconnected',\n}\n\nexport type EventInfo = {\n supportedBlockchains: BlockchainMeta[];\n isContractWallet: boolean;\n isHub: boolean;\n // will be set alongside ACCOUNT event\n namespace?: Namespace;\n derivationPath?: string;\n};\n\nexport type EventHandler = (\n type: WalletType,\n event: Events,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any,\n coreState: WalletState,\n info: EventInfo\n) => void;\n\nexport type ConnectResult = {\n accounts: string[] | null;\n network: Network | null;\n};\n\nexport type ExtendedWalletInfo = WalletInfo & {\n properties?: ProviderMetadata['properties'];\n isHub?: boolean;\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype InstanceType = any;\n\ntype ProviderConnectResult = {\n accounts: string[];\n chainId: string;\n derivationPath?: string;\n};\n\ntype GetInstanceOptions = {\n network?: Network;\n currentProvider: InstanceType;\n meta: BlockchainMeta[];\n getState: () => WalletState;\n /**\n * We always get the instance once and reuse it whenever we needs. By using this option\n * We can force the library to get a new instance and replace it with the old one.\n *\n * Originally, we used this option for wallet connect 1 and its switching network challenge.\n */\n force?: boolean;\n updateChainId: (chainId: number | string) => void;\n};\n\ntype TryGetInstance =\n | (() => InstanceType)\n | ((\n options: Pick<GetInstanceOptions, 'force' | 'network'>\n ) => Promise<InstanceType>);\n\ntype Connect = (options: {\n instance: InstanceType;\n network?: Network;\n meta: BlockchainMeta[];\n namespaces?: NamespaceData[];\n}) => Promise<ProviderConnectResult | ProviderConnectResult[]>;\n\ntype Disconnect = (options: {\n instance: InstanceType;\n destroyInstance: () => void;\n}) => Promise<void>;\n\ntype CleanupSubscribe = () => void;\n\ntype Subscribe = (options: {\n instance: InstanceType;\n state: WalletState;\n meta: BlockchainMeta[];\n updateChainId: (chainId: string) => void;\n updateAccounts: (accounts: string[], chainId?: string) => void;\n connect: (network?: Network) => void;\n disconnect: () => void;\n}) => CleanupSubscribe | void;\n\ntype SwitchNetwork = (options: {\n instance: InstanceType;\n network: Network;\n meta: BlockchainMeta[];\n newInstance?: TryGetInstance;\n getState?: () => WalletState;\n updateChainId: (chainId: string) => void;\n}) => Promise<void>;\n\ntype Suggest = (options: {\n instance: InstanceType;\n network: Network;\n meta: BlockchainMeta[];\n}) => Promise<void>;\n\ntype CanSwitchNetwork = (options: {\n network: Network;\n meta: BlockchainMeta[];\n provider: InstanceType;\n}) => boolean;\n\ntype CanEagerConnect = (options: {\n instance: InstanceType;\n meta: BlockchainMeta[];\n}) => Promise<boolean>;\n\ninterface WalletActions {\n connect: Connect;\n getInstance: InstanceType;\n disconnect?: Disconnect;\n subscribe?: Subscribe;\n // unsubscribe, // coupled to subscribe.\n\n // Optional, but should be provided at the same time.\n suggest?: Suggest;\n switchNetwork?: SwitchNetwork;\n getSigners: (provider: InstanceType) => Promise<SignerFactory>;\n canSwitchNetworkTo?: CanSwitchNetwork;\n canEagerConnect?: CanEagerConnect;\n getWalletInfo(allBlockChains: BlockchainMeta[]): WalletInfo;\n}\n\ninterface WalletConfig {\n type: WalletType;\n defaultNetwork?: Network;\n checkInstallation?: boolean;\n isAsyncInstance?: boolean;\n isAsyncSwitchNetwork?: boolean;\n}\n\n/**\n * @deprecated Pass a hub `Provider` instead. This type will be removed in future versions.\n */\nexport type ProviderInterface = { config: WalletConfig } & WalletActions;\n", "export const HUB_LAST_CONNECTED_WALLETS = 'hub-v1-last-connected-wallets';\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type { ProviderProps } from '../types.js';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\nimport type { Result } from 'ts-results';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n CAIP_BITCOINCASH_CHAIN_ID,\n CAIP_DOGECOIN_CHAIN_ID,\n CAIP_LITECOIN_CHAIN_ID,\n CAIP_ZCASH_CHAIN_ID,\n} from '@hub3js/bip122';\nimport { CAIP_NAMESPACE as CAIP_TON_NAMESPACE } from '@hub3js/tvm';\nimport { formatAddressWithNetwork } from '@rango-dev/internal-blockchains';\nimport { CAIP_TRON_CHAIN_ID } from '@rango-dev/wallets-core/namespaces/tron';\nimport { AccountId, type ChainIdParams } from 'caip';\nimport { Err, Ok } from 'ts-results';\n\nexport function mapCaipNamespaceToLegacyNetworkName(\n chainId: ChainIdParams | string\n): string {\n if (typeof chainId === 'string') {\n return chainId;\n }\n const useNamespaceAsNetworkFor = ['solana', 'xrpl', 'stellar'];\n\n if (useNamespaceAsNetworkFor.includes(chainId.namespace.toLowerCase())) {\n return chainId.namespace.toUpperCase();\n }\n\n if (chainId.namespace.toLowerCase() === 'eip155') {\n return 'ETH';\n } else if (chainId.reference === CAIP_BITCOIN_CHAIN_ID) {\n return 'BTC';\n } else if (chainId.reference === CAIP_ZCASH_CHAIN_ID) {\n return 'ZCASH';\n } else if (chainId.reference === CAIP_LITECOIN_CHAIN_ID) {\n return 'LTC';\n } else if (chainId.reference === CAIP_DOGECOIN_CHAIN_ID) {\n return 'DOGE';\n } else if (chainId.reference === CAIP_BITCOINCASH_CHAIN_ID) {\n return 'BCH';\n }\n\n if (chainId.namespace.toLowerCase() === CAIP_TON_NAMESPACE) {\n return 'TON';\n }\n if (chainId.namespace === 'sui' || chainId.reference === CAIP_TRON_CHAIN_ID) {\n return chainId.reference.toUpperCase();\n }\n if (chainId.namespace === 'starknet') {\n return chainId.namespace.toUpperCase();\n }\n\n return chainId.reference;\n}\n\n/**\n * CAIP's accountId has a format like this: eip155:1:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb\n * Legacy format is something like this: ETH:0xab16a96D359eC26a11e2C2b3d8f8B8942d5Bfcdb\n * This function will try to convert this two format.\n *\n * @see https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md\n */\nexport function fromAccountIdToLegacyAddressFormat(account: string): string {\n const { chainId, address } = AccountId.parse(account);\n const network = mapCaipNamespaceToLegacyNetworkName(chainId);\n return formatAddressWithNetwork(address, network);\n}\n\n/**\n * Getting a list of (lazy) promises and run them one after another.\n */\n\nexport async function runSequentiallyWithoutFailure<R>(\n promises: Array<() => Promise<R>>\n): Promise<Result<R, unknown>[]> {\n return promises.reduce(async (prevPromise, task) => {\n const previousResults = await prevPromise;\n try {\n const taskResult = await task();\n return [...previousResults, new Ok(taskResult)];\n } catch (error) {\n return [...previousResults, new Err(error)];\n }\n }, Promise.resolve<Result<R, unknown>[]>([]));\n}\n\nexport function isConnectResultEvm(\n result: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): result is AccountsWithActiveChain {\n return typeof result === 'object' && !Array.isArray(result);\n}\n\nexport function isConnectResultSolana(\n result: Awaited<ReturnType<AllProxiedNamespaces['connect']>>\n): result is Accounts {\n return Array.isArray(result);\n}\n\ntype QueueItem<T> = {\n task: () => Promise<T>;\n resolve: (value: Result<T, unknown>) => void;\n key: string;\n};\n/**\n * Creates a queue manager that ensures sequential execution of tasks by key.\n * When multiple tasks with the same key are queued, they are executed one at a time\n * in the order they were added. This prevents race conditions and ensures\n * predictable task execution order.\n *\n */\nexport function createQueue(options?: {\n onError?: (\n error: unknown,\n actions: {\n removeCurrentKeyFromQueue: () => void;\n }\n ) => void;\n}) {\n const processingKeys = new Set<string>();\n let queue: QueueItem<unknown>[] = [];\n\n const removeKeyFromQueue = (\n key: string,\n result: Result<unknown, unknown>\n ) => {\n queue = queue.filter((q) => {\n if (q.key !== key) {\n return true;\n }\n q.resolve(result);\n return false;\n });\n };\n\n const processQueue = async () => {\n const currentItem = queue.find((item) => !processingKeys.has(item.key));\n if (!currentItem) {\n return;\n }\n\n const { task, resolve, key } = currentItem;\n processingKeys.add(key);\n\n try {\n const result = await task();\n resolve(new Ok(result));\n } catch (error) {\n if (options?.onError) {\n options.onError(error, {\n removeCurrentKeyFromQueue: () =>\n removeKeyFromQueue(key, new Err(error)),\n });\n }\n\n resolve(new Err(error));\n } finally {\n const indexOfCurrentItem = queue.findIndex((item) => item.key === key);\n if (indexOfCurrentItem >= 0) {\n queue.splice(indexOfCurrentItem, 1);\n }\n processingKeys.delete(key);\n void processQueue();\n }\n };\n\n const queueTask = async <T>(\n task: () => Promise<T>,\n key: string\n ): Promise<Result<T, unknown>> =>\n new Promise((resolve) => {\n queue.push({\n task,\n resolve: resolve as (value: Result<unknown, unknown>) => void,\n key,\n });\n void processQueue();\n });\n\n return queueTask;\n}\n\nexport function shouldTryAutoConnect(\n props: Pick<ProviderProps, 'allBlockChains' | 'autoConnect'>\n): boolean {\n return !!props.allBlockChains?.length && !!props.autoConnect;\n}\n", "export interface PersistStorage<T> {\n getItem: (name: string) => T | null;\n setItem: (name: string, value: T) => void;\n removeItem: (name: string) => void;\n}\n\nexport class Persistor<T> implements PersistStorage<T> {\n getItem(name: string) {\n const item = localStorage.getItem(name);\n const parsedItem = item ? (JSON.parse(item) as T) : null;\n return parsedItem;\n }\n setItem(name: string, value: T) {\n localStorage.setItem(name, JSON.stringify(value));\n }\n removeItem(name: string) {\n localStorage.removeItem(name);\n }\n}\n", "import type { Namespace } from '@hub3js/namespaces';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { Persistor } from './persistor.js';\n\nexport interface NamespaceInput {\n namespace: Namespace;\n network: string | undefined;\n}\n\nexport interface LastConnectedWalletsStorage {\n [providerId: string]: NamespaceInput[];\n}\n\n/**\n * We are doing some certain actions on storage for `last-connected-wallets` key.\n * This class helps us to define them in one place.\n */\nexport class LastConnectedWalletsFromStorage {\n #storageKey: string;\n\n constructor(storageKey: string) {\n this.#storageKey = storageKey;\n }\n\n addWallet(providerId: string, namespaces: NamespaceInput[]): void {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#addWalletToHub(providerId, namespaces);\n }\n throw new Error('Not implemented');\n }\n removeWallets(providerIds?: string[]): void {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#removeWalletsFromHub(providerIds);\n }\n throw new Error('Not implemented');\n }\n list(): LastConnectedWalletsStorage {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#listFromHub();\n }\n throw new Error('Not implemented');\n }\n removeNamespacesFromWallet(providerId: string, namespaceIds: string[]) {\n if (this.#storageKey === HUB_LAST_CONNECTED_WALLETS) {\n return this.#removeNamespaceFromWalletHub(providerId, namespaceIds);\n }\n throw new Error('Not implemented');\n }\n\n #listFromHub(): LastConnectedWalletsStorage {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const lastConnectedWallets =\n persistor.getItem(HUB_LAST_CONNECTED_WALLETS) || {};\n return lastConnectedWallets;\n }\n #addWalletToHub(providerId: string, namespaces: NamespaceInput[]): void {\n const storage = new Persistor<LastConnectedWalletsStorage>();\n const storageState = storage.getItem(this.#storageKey) || {};\n\n let toBeAddedNamespaces = namespaces;\n\n // If provider already exits in the storage, we should just add new namespaces to the previously added namespaces.\n if (!!storageState[providerId]) {\n const storedNamespaces = storageState[providerId];\n toBeAddedNamespaces = storedNamespaces.concat(\n namespaces.filter(\n (namespace) =>\n !storedNamespaces.some(\n (storedNamespace) =>\n storedNamespace.namespace === namespace.namespace\n )\n )\n );\n }\n\n storage.setItem(this.#storageKey, {\n ...storageState,\n [providerId]: toBeAddedNamespaces,\n });\n }\n #removeWalletsFromHub(providerIds?: string[]): void {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const storageState = persistor.getItem(this.#storageKey) || {};\n\n // Remove all wallets\n if (!providerIds) {\n persistor.setItem(this.#storageKey, {});\n return;\n }\n\n // Remove some of the wallets\n providerIds.forEach((providerId) => {\n if (storageState[providerId]) {\n delete storageState[providerId];\n }\n });\n\n persistor.setItem(this.#storageKey, storageState);\n }\n #removeNamespaceFromWalletHub(\n providerId: string,\n namespaceIds: string[]\n ): void {\n const persistor = new Persistor<LastConnectedWalletsStorage>();\n const storageState = persistor.getItem(this.#storageKey) || {};\n\n const currentProviderNamespaces = storageState[providerId];\n const newProviderNamespaces = currentProviderNamespaces?.filter(\n (namespace) => !namespaceIds.includes(namespace.namespace)\n );\n\n this.#removeWalletsFromHub([providerId]);\n if (newProviderNamespaces?.length > 0) {\n this.#addWalletToHub(providerId, newProviderNamespaces);\n }\n }\n}\n", "import type { AllProxiedNamespaces, ExtensionLink } from './types.js';\nimport type {\n ConnectResult,\n NamespaceInputForConnect,\n WalletInfo,\n} from '../legacy/mod.js';\nimport type { ProviderContext, ProviderProps } from '../types.js';\nimport type { Provider, WalletType } from '@hub3js/core';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\n\nimport { utils } from '@hub3js/evm';\nimport {\n getSupportedChainsFromNamespace,\n getSupportedChainsFromProvider,\n} from '@rango-dev/internal-blockchains';\nimport { useEffect, useRef, useState } from 'react';\nimport { Ok, Result } from 'ts-results';\n\nimport { withErrorLoggingApi } from '../helpers.js';\n\nimport { autoConnect } from './autoConnect.js';\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { createQueue, fromAccountIdToLegacyAddressFormat } from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\nimport { useAutoConnect } from './useAutoConnect.js';\nimport { useHubRefs } from './useHubRefs.js';\nimport {\n findProviderByType,\n isEvmNamespace,\n isSolanaNamespace,\n isUtxoNamespace,\n mapHubEventsToLegacy,\n transformHubResultToLegacyResult,\n tryConvertNamespaceNetworkToChainInfo,\n} from './utils.js';\n\nexport type UseAdapterParams = Omit<ProviderProps, 'providers'> & {\n providers: Provider[];\n};\n\nexport function useHubAdapter(params: UseAdapterParams): ProviderContext {\n const { getStore, getHub } = useHubRefs(params.providers);\n const [, rerender] = useState(0);\n // useEffect will run `subscribe` once, so we need a reference and mutate the value if it's changes.\n const dataRef = useRef({\n onUpdateState: params.onUpdateState,\n allBlockChains: params.allBlockChains,\n });\n const hubInitiated = useRef(false);\n\n /*\n * Params of each connection attempt for each wallet type are stored here.\n * Derivation path from params is used in `mapHubEventsToLegacy` to be added to the payload of connect events.\n */\n const lastConnectAttemptParamsRef = useRef<{\n [type: WalletType]: NamespaceInputForConnect[];\n }>({});\n\n const updateLastConnectAttemptParams = (\n type: WalletType,\n namespaces: NamespaceInputForConnect[] | undefined\n ) => {\n lastConnectAttemptParamsRef.current[type] = namespaces || [];\n };\n\n const queueTask = createQueue({\n onError: (error, actions) => {\n if (utils.isUserRejectionError(error)) {\n actions.removeCurrentKeyFromQueue();\n }\n },\n });\n\n useEffect(() => {\n dataRef.current = {\n onUpdateState: params.onUpdateState,\n allBlockChains: params.allBlockChains,\n };\n }, [params]);\n\n useEffect(() => {\n getStore()\n .subscribe((event) => {\n if (dataRef.current.onUpdateState) {\n try {\n mapHubEventsToLegacy(\n getHub(),\n event,\n dataRef.current.onUpdateState,\n {\n allBlockChains: dataRef.current.allBlockChains,\n lastConnectAttemptParams: lastConnectAttemptParamsRef.current,\n }\n );\n } catch (e) {\n console.error(e);\n }\n }\n rerender((currentRender) => currentRender + 1);\n })\n .flushEvents();\n }, []);\n\n // Initialize hub only after blockchain meta is available (e.g. WalletConnect needs it at init).\n useEffect(() => {\n if (hubInitiated.current || !params.allBlockChains?.length) {\n return;\n }\n\n getHub().init(params.configs?.walletOptions);\n rerender((currentRender) => currentRender + 1);\n hubInitiated.current = true;\n }, [params.allBlockChains, params.configs?.walletOptions]);\n\n useAutoConnect({\n autoConnect: params.autoConnect,\n allBlockChains: params.allBlockChains,\n autoConnectHandler: () => {\n void autoConnect({\n allBlockChains: params.allBlockChains,\n getHub,\n wallets: params.configs?.wallets,\n });\n },\n });\n\n const lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n );\n\n const api: ProviderContext = {\n canSwitchNetworkTo(type, network, namespace) {\n const provider = getHub().get(type);\n\n if (!provider) {\n // TODO: should throw an error\n return false;\n }\n\n if (!namespace) {\n throw new Error(\n 'Passing namespace to `canSwitchNetworkTo` is required.'\n );\n }\n\n const proxiedNamespace = provider.findByNamespace(namespace.namespace);\n if (!proxiedNamespace) {\n throw new Error(\n `We couldn't find any matched namespace on your request provider. (requested namespace: ${namespace.namespace})`\n );\n }\n if (!('canSwitchNetwork' in proxiedNamespace)) {\n return false;\n }\n const namespacesProperty = provider\n .info()\n ?.metadata?.properties?.find(\n (property) => property.name === 'namespaces'\n );\n\n if (!dataRef.current.allBlockChains) {\n throw new Error(`Blockchains are not available`);\n }\n\n const namespaceMeta = namespacesProperty?.value.data.find(\n (providerNamespace) => providerNamespace.value === namespace.namespace\n );\n\n if (!namespaceMeta) {\n throw new Error(\n `NamespaceMeta is not defined for requested namespace: ${namespace.namespace}`\n );\n }\n\n const supportedChains = getSupportedChainsFromNamespace(\n namespaceMeta,\n dataRef.current.allBlockChains\n );\n\n return proxiedNamespace.canSwitchNetwork({\n network,\n supportedChains,\n });\n },\n async connect(type, namespaces) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'connect'.`\n );\n }\n\n if (!namespaces) {\n throw new Error('Passing namespace to `connect` is required.');\n }\n\n updateLastConnectAttemptParams(type, namespaces);\n\n // Check `namespace` and look into hub to see how it can match given namespace to hub namespace.\n const targetNamespaces: [\n NamespaceInputForConnect,\n AllProxiedNamespaces\n ][] = [];\n namespaces.forEach((namespace) => {\n const targetNamespace = namespace.namespace;\n\n const result = wallet.findByNamespace(targetNamespace);\n if (!result) {\n throw new Error(\n `We couldn't find any provider matched with your request namespace. (requested namespace: ${namespace.namespace})`\n );\n }\n\n targetNamespaces.push([namespace, result]);\n });\n\n // Try to run `connect` on matched namespaces\n const connectResultFromTargetNamespaces = targetNamespaces.map(\n async ([namespaceInput, namespace]) => {\n const network = tryConvertNamespaceNetworkToChainInfo(\n namespaceInput,\n params.allBlockChains || []\n );\n\n let connectNamespacePromise: () => Promise<\n Accounts | AccountsWithActiveChain\n >;\n\n if (isSolanaNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect({\n derivationPath: namespaceInput.derivationPath,\n });\n } else if (isEvmNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect(network, {\n derivationPath: namespaceInput.derivationPath,\n });\n } else if (isUtxoNamespace(namespace)) {\n connectNamespacePromise = async () =>\n namespace.connect({\n derivationPath: namespaceInput.derivationPath,\n });\n } else {\n connectNamespacePromise = async () => namespace.connect();\n }\n\n const connectNamespaceProcess = async () =>\n connectNamespacePromise()\n .then<ConnectResult>(transformHubResultToLegacyResult)\n .then((connectResult) => {\n return {\n response: connectResult,\n input: {\n namespace: namespaceInput.namespace,\n network: namespaceInput.network,\n supportsEagerConnect: 'canEagerConnect' in namespace,\n },\n };\n });\n return queueTask(connectNamespaceProcess, type);\n }\n );\n\n /*\n * We need to connect to namespace one after another, sending multiple requests at the same time may be failed.\n * e.g. when wallet popup opens and asking for the password from the user, it should be resolved first, then other request will be resolved.\n */\n const connectResultWithLegacyFormat = await Promise.all(\n connectResultFromTargetNamespaces\n );\n\n // Keeping only namespaces that connected successfully and support eager connect, then we'll store them on storage for auto connect functionality.\n const successfullyConnectedSupportingEagerConnectNamespaces =\n connectResultWithLegacyFormat\n .filter(<T, E>(result: Result<T, E>): result is Ok<T> => result.ok)\n .filter((result) => result.val.input.supportsEagerConnect)\n .map((result) => ({\n namespace: result.val.input.namespace,\n network: result.val.input.network,\n }));\n\n if (successfullyConnectedSupportingEagerConnectNamespaces.length > 0) {\n lastConnectedWalletsFromStorage.addWallet(\n type,\n successfullyConnectedSupportingEagerConnectNamespaces\n );\n }\n\n // Getting rid of `input` from Result\n const connectResults = connectResultWithLegacyFormat.map((result) =>\n result.andThen((okResult) => new Ok(okResult.response))\n );\n\n const allResult = Result.all(...connectResults);\n if (allResult.err) {\n throw allResult.val;\n }\n\n return allResult.unwrap();\n },\n async disconnect(type, namespaces) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'disconnect'.`\n );\n }\n\n wallet.getAll().forEach((namespace) => {\n const namespaceShouldBeDisconnected =\n !namespaces || namespaces.includes(namespace.namespaceId);\n const namespaceIsConnected = namespace.state()[0]().connected;\n if (namespaceShouldBeDisconnected && namespaceIsConnected) {\n return namespace.disconnect();\n }\n });\n\n if (params.autoConnect) {\n if (namespaces) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n type,\n namespaces\n );\n } else {\n lastConnectedWalletsFromStorage.removeWallets([type]);\n }\n }\n },\n async disconnectAll() {\n const disconnectPromises: Promise<void>[] = Array.from(\n getHub().getAll().values()\n ).map(async (provider) => this.disconnect(provider.id));\n\n return await Promise.allSettled(disconnectPromises);\n },\n async getSigners(type) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const info = wallet.info();\n if (!info) {\n throw new Error('Your provider should have required `info`.');\n }\n\n const providerProperties = info.metadata.properties;\n\n const signerProperty = providerProperties?.find(\n (property) => property.name === 'signers'\n );\n if (!signerProperty) {\n throw new Error('Your provider should contain signers property.');\n }\n\n return signerProperty.value.getSigners();\n },\n getWalletInfo(type) {\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(`You should add ${type} to provider first.`);\n }\n\n const info = wallet.info();\n if (!info) {\n throw new Error('Your provider should have required `info`.');\n }\n\n const installLink: Exclude<WalletInfo['installLink'], string> = {\n DEFAULT: '',\n };\n\n const { metadata } = info;\n const { extensions } = metadata;\n // `extensions` in legacy format was uppercase and also `DEFAULT` was used instead of `homepage`\n Object.keys(extensions).forEach((k) => {\n const key = k as ExtensionLink;\n\n if (key === 'homepage') {\n installLink.DEFAULT = extensions[key] || '';\n }\n\n const allowedKeys: ExtensionLink[] = [\n 'firefox',\n 'chrome',\n 'brave',\n 'edge',\n ];\n if (allowedKeys.includes(key)) {\n const upperCasedKey = key.toUpperCase() as keyof Exclude<\n WalletInfo['installLink'],\n string\n >;\n installLink[upperCasedKey] = extensions[key] || '';\n }\n });\n\n const providerProperties = metadata.properties;\n\n const namespacesProperty = providerProperties?.find(\n (property) => property.name === 'namespaces'\n );\n const derivationPathProperty = providerProperties?.find(\n (property) => property.name === 'derivationPath'\n );\n const detailsProperty = providerProperties?.find(\n (property) => property.name === 'details'\n );\n\n return {\n name: metadata.name,\n img: metadata.icon,\n installLink: installLink,\n // We don't have this values anymore, fill them with some values that communicate this.\n color: 'red',\n supportedChains: getSupportedChainsFromProvider(\n wallet,\n dataRef.current.allBlockChains\n ),\n isContractWallet: detailsProperty?.value?.isContractWallet,\n mobileWallet: detailsProperty?.value?.mobileWallet,\n // if set to false here, it will not show the wallet in mobile in anyways. to be compatible with old behavior, undefined is more appropirate.\n showOnMobile: detailsProperty?.value?.showOnMobile,\n needsNamespace: namespacesProperty?.value,\n needsDerivationPath: derivationPathProperty?.value,\n isHub: true,\n properties: metadata.properties,\n };\n },\n state(type) {\n const hubState = getHub().state();\n const wallet = getHub().get(type);\n const walletState = hubState[type];\n\n if (!walletState || !wallet) {\n // TODO: should throw an error\n return {\n connected: false,\n connecting: false,\n installed: false,\n reachable: false,\n accounts: null,\n network: null,\n namespaces: new Map(),\n };\n }\n\n const accounts = walletState.namespaces\n .filter((namespace) => namespace.connected)\n .flatMap((namespace) =>\n namespace.accounts?.map((accounts) =>\n fromAccountIdToLegacyAddressFormat(accounts)\n )\n )\n .filter((account): account is string => !!account);\n\n const namespacesState = new Map(\n Array.from(wallet.getAll(), ([_, value]) => [\n value.namespaceId,\n value.state()[0](),\n ])\n );\n\n const coreState = {\n connected: walletState.connected,\n connecting: walletState.connecting,\n installed: walletState.installed,\n reachable: true,\n accounts: accounts,\n network: null,\n namespaces: namespacesState,\n };\n return coreState;\n },\n async suggestAndConnect(type, namespace): Promise<ConnectResult> {\n const provider = getHub().get(type);\n\n if (!provider) {\n throw new Error(\n `You should add ${type} to provider first then call 'suggestAndConnect'.`\n );\n }\n const proxiedNamespace = provider.findByNamespace(namespace.namespace);\n if (!proxiedNamespace) {\n throw new Error(\n `We couldn't find any matched namespace on your request provider. (requested namespace: ${namespace.namespace})`\n );\n }\n if (!('suggest' in proxiedNamespace)) {\n throw new Error('Suggest is not implemented on the provider');\n }\n if (!namespace.network) {\n throw new Error('You should pass network to the suggest and connect');\n }\n throw new Error(\n `Suggest has not been implemented for given chain: ${namespace.network}`\n );\n },\n hubProvider(type) {\n const provider = findProviderByType(params.providers, type);\n\n if (!provider) {\n throw new Error(\n `You're trying to access ${type} provider which is not found in hub providers. it may not be registered yet.`\n );\n }\n\n return provider;\n },\n };\n\n return withErrorLoggingApi(api);\n}\n", "import type { ProviderContext } from './types.js';\n\nimport { debug } from '@rango-dev/logging-core';\n\nfunction logError(method: string, args: unknown[], error: unknown) {\n const err = error instanceof Error ? error : new Error(String(error));\n debug(err, {\n context: { method, args },\n tags: { type: 'wallet-error' },\n });\n}\n\nfunction withErrorLogging<TArgs extends unknown[], TReturn>(\n method: string,\n fn: (...args: TArgs) => TReturn\n): (...args: TArgs) => TReturn {\n return (...args: TArgs): TReturn => {\n try {\n const result = fn(...args);\n // Async method: catch the rejection, log, then throw the rejection.\n if (result instanceof Promise) {\n return result.catch((error: unknown) => {\n logError(method, args, error);\n throw error;\n }) as TReturn;\n }\n return result;\n } catch (error) {\n // Sync method: log and rethrow.\n logError(method, args, error);\n throw error;\n }\n };\n}\n\nexport function withErrorLoggingApi(api: ProviderContext): ProviderContext {\n const entries = Object.entries(api).map(([key, value]) => [\n key,\n withErrorLogging(key, (value as (...args: unknown[]) => unknown).bind(api)),\n ]);\n\n return Object.fromEntries(entries) as ProviderContext;\n}\n", "import type { AllProxiedNamespaces } from './types.js';\nimport type { UseAdapterParams } from './useHubAdapter.js';\nimport type { NamespaceInputForConnect } from '../legacy/types.js';\nimport type { Hub, Provider, WalletType } from '@hub3js/core';\nimport type { DefaultNamespaces, Namespace } from '@hub3js/namespaces';\nimport type { Accounts, AccountsWithActiveChain } from '@hub3js/std/types';\n\nimport { Result } from 'ts-results';\n\nimport { HUB_LAST_CONNECTED_WALLETS } from './constants.js';\nimport { runSequentiallyWithoutFailure } from './helpers.js';\nimport { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';\nimport {\n convertNamespaceNetworkToEvmChainId,\n isEvmNamespace,\n} from './utils.js';\n\nfunction isEvmNamespaceInput(\n namespace: NamespaceInputForConnect\n): namespace is NamespaceInputForConnect<'EVM'> {\n return namespace.namespace === 'EVM';\n}\n\n// Getting connected wallets from storage\nconst lastConnectedWalletsFromStorage = new LastConnectedWalletsFromStorage(\n HUB_LAST_CONNECTED_WALLETS\n);\n\n/**\n * Run `.connect` action on some selected namespaces (passed as param) for a provider.\n */\nasync function eagerConnect(\n type: string,\n namespacesInput: NamespaceInputForConnect[] | undefined,\n params: {\n getHub: () => Hub;\n allBlockChains: UseAdapterParams['allBlockChains'];\n }\n) {\n const { getHub, allBlockChains } = params;\n const wallet = getHub().get(type);\n if (!wallet) {\n throw new Error(\n `You should add ${type} to provider first then call 'connect'.`\n );\n }\n\n if (!namespacesInput) {\n throw new Error('Passing namespace to `connect` is required. ');\n }\n\n const targetNamespaces: [NamespaceInputForConnect, AllProxiedNamespaces][] =\n [];\n namespacesInput.forEach((namespaceInput) => {\n const targetNamespace: Namespace = namespaceInput.namespace;\n\n const result = wallet.findByNamespace(targetNamespace);\n\n if (!result) {\n throw new Error(\n `We couldn't find any provider matched with your request namespace. (requested namespace: ${namespaceInput.namespace})`\n );\n }\n\n targetNamespaces.push([namespaceInput, result]);\n });\n\n const connectNamespacesPromises = targetNamespaces.map(\n ([info, namespace]) => {\n const evmChain = isEvmNamespaceInput(info)\n ? convertNamespaceNetworkToEvmChainId(info, allBlockChains || [])\n : undefined;\n const chain = evmChain || info.network;\n\n return async () => {\n let connectNamespacePromise: () => Promise<\n Accounts | AccountsWithActiveChain\n >;\n if (isEvmNamespace(namespace)) {\n connectNamespacePromise = async () => namespace.connect(chain);\n } else {\n connectNamespacePromise = async () => namespace.connect();\n }\n try {\n await connectNamespacePromise();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n /*\n * Since we check for connect failures using `instanceof Error`\n * this check is added here to make sure the thrown error always is an instance of `Error`\n */\n if (e instanceof Error) {\n throw e;\n }\n throw new Error(e);\n }\n };\n }\n );\n\n /**\n * Sometimes calling methods on a instance in parallel, would cause an error in wallet.\n * We are running a method at a time to make sure we are covering this.\n * e.g. when we are trying to eagerConnect evm and solana on phantom at the same time, the last namespace throw an error.\n */\n const connectNamespacesResult = await runSequentiallyWithoutFailure(\n connectNamespacesPromises\n );\n\n const failedNamespaces: NamespaceInputForConnect[] = targetNamespaces\n .filter((_, index) => connectNamespacesResult[index].err)\n .map((targetNamespace) => targetNamespace[0]);\n\n if (failedNamespaces.length > 0) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n type,\n failedNamespaces.map((namespace) => namespace.namespace)\n );\n }\n\n const atLeastOneNamespaceConnectedSuccessfully = connectNamespacesResult.some(\n (result) => result.ok\n );\n if (!atLeastOneNamespaceConnectedSuccessfully) {\n throw new Error(`No namespace connected for ${type}`);\n }\n return Result.all(\n ...connectNamespacesResult.filter((result) => result.ok)\n ).unwrap();\n}\n\n/**\n * Run `.canEagerConnect` action on some selected namespaces of a wallet.\n */\nasync function tryRunCanEagerConnect(\n namespaces: NamespaceInputForConnect[],\n wallet: Provider<DefaultNamespaces>\n): Promise<{\n successNamespaces: NamespaceInputForConnect[];\n failedNamespaces: NamespaceInputForConnect[];\n}> {\n const foundNamespaces: NamespaceInputForConnect[] = [];\n const successNamespaces: NamespaceInputForConnect[] = [];\n const failedNamespaces: NamespaceInputForConnect[] = [];\n const canEagerConnectPromises: (() => Promise<boolean>)[] = [];\n\n // 1. Try find namespace instances and create canEagerConnect promises\n namespaces.forEach((namespace) => {\n const namespaceInstance = wallet.findByNamespace(namespace.namespace);\n if (namespaceInstance) {\n foundNamespaces.push(namespace);\n canEagerConnectPromises.push(\n async () => await namespaceInstance.canEagerConnect()\n );\n } else {\n failedNamespaces.push(namespace);\n }\n });\n\n // 2. Run canEagerConnect sequentially on namespaces\n const canEagerConnectResults = await runSequentiallyWithoutFailure(\n canEagerConnectPromises\n );\n\n // 3. Separate success and failed namespaces based on canEagerConnect result\n foundNamespaces.forEach((namespace, index) => {\n if (canEagerConnectResults[index].ok && canEagerConnectResults[index].val) {\n successNamespaces.push(namespace);\n } else {\n failedNamespaces.push(namespace);\n }\n });\n\n return { successNamespaces, failedNamespaces };\n}\n\n/*\n * Get last connected wallets and last connected namespaces for each of them from storage\n * Then run `.connect` on each namespace if `.canEagerConnect` returns true.\n */\nexport async function autoConnect(deps: {\n getHub: () => Hub;\n allBlockChains: UseAdapterParams['allBlockChains'];\n wallets?: (WalletType | Provider)[];\n}): Promise<void> {\n const { getHub, allBlockChains, wallets } = deps;\n const lastConnectedWallets = lastConnectedWalletsFromStorage.list();\n const walletIds = Object.keys(lastConnectedWallets);\n\n const walletsToRemoveFromPersistence: string[] = [];\n\n if (walletIds.length) {\n const eagerConnectQueue: Promise<unknown>[] = [];\n\n const configWalletNames = wallets?.map((wallet) =>\n typeof wallet === 'string' ? wallet : wallet.id\n );\n // Run `.connect` if `.canEagerConnect` returns `true`.\n walletIds.forEach(async (providerName) => {\n if (configWalletNames && !configWalletNames.includes(providerName)) {\n console.warn(\n 'Trying to run auto connect for a wallet which is not included in config. Desired wallet:',\n providerName\n );\n walletsToRemoveFromPersistence.push(providerName);\n return;\n }\n\n const wallet = getHub().get(providerName);\n\n const lastConnectedNamespaces: NamespaceInputForConnect[] =\n lastConnectedWallets[providerName].map((namespace) => ({\n namespace: namespace.namespace,\n network: namespace.network,\n }));\n\n if (!lastConnectedNamespaces.length || !wallet) {\n walletsToRemoveFromPersistence.push(providerName);\n return;\n }\n\n const { successNamespaces, failedNamespaces } =\n await tryRunCanEagerConnect(lastConnectedNamespaces, wallet);\n\n if (!successNamespaces.length) {\n walletsToRemoveFromPersistence.push(providerName);\n return;\n } else if (failedNamespaces.length) {\n lastConnectedWalletsFromStorage.removeNamespacesFromWallet(\n wallet.id,\n failedNamespaces.map((namespace) => namespace.namespace)\n );\n }\n eagerConnectQueue.push(\n eagerConnect(providerName, successNamespaces, {\n allBlockChains,\n getHub,\n }).catch((error) => console.warn(error))\n );\n });\n\n lastConnectedWalletsFromStorage.removeWallets(\n walletsToRemoveFromPersistence\n );\n\n await Promise.all(eagerConnectQueue);\n }\n}\n", "import type { ProviderProps } from '../types.js';\n\nimport { useEffect, useRef } from 'react';\n\nimport { shouldTryAutoConnect } from './helpers.js';\n\nexport function useAutoConnect(\n props: Pick<ProviderProps, 'allBlockChains' | 'autoConnect'> & {\n /**\n * A function to run autoConnect on instances\n */\n autoConnectHandler: () => void;\n }\n) {\n const autoConnectInitiated = useRef(false);\n\n useEffect(() => {\n if (shouldTryAutoConnect(props) && !autoConnectInitiated.current) {\n autoConnectInitiated.current = true;\n props.autoConnectHandler();\n }\n }, [props.autoConnect, props.allBlockChains]);\n}\n", "import type { Provider, Store } from '@hub3js/core';\n\nimport { createStore, Hub } from '@hub3js/core';\nimport { useRef } from 'react';\n\nimport { synchronizeHubWithConfigProviders } from './utils.js';\n\nexport function useHubRefs(providers: Provider[]) {\n const store = useRef<Store | null>(null);\n\n const hub = useRef<Hub | null>(null);\n\n function createHub() {\n const createdHub = new Hub({\n store: getStore(),\n });\n /*\n * First add providers to hub\n * This helps to `getWalletInfo` be usable, before initialize.\n */\n providers.forEach((provider) => {\n createdHub.add(provider.id, provider);\n });\n hub.current = createdHub;\n return createdHub;\n }\n\n // https://react.dev/reference/react/useRef#avoiding-recreating-the-ref-contents\n function getStore() {\n if (store.current !== null) {\n return store.current;\n }\n const createdStore = createStore();\n store.current = createdStore;\n return createdStore;\n }\n\n function getHub(): Hub {\n const hubProviders = hub.current?.getAll();\n\n if (!hub.current || !hubProviders) {\n return createHub();\n }\n\n synchronizeHubWithConfigProviders(hub.current, providers);\n return hub.current;\n }\n\n return { getStore, getHub };\n}\n", "import type { ProviderContext } from './types.js';\n\nimport { useContext } from 'react';\n\nimport { WalletContext } from './context.js';\n\nexport function useWallets(): ProviderContext {\n const context = useContext(WalletContext);\n if (!context) {\n throw Error('useWallet can only be used within the Provider component');\n }\n return context;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "createContext", "defaultErrorMessage", "defaultContext", "WalletContext", "convertEvmBlockchainMetaToEvmChainInfo", "formatAddressWithNetwork", "getBlockChainNameFromId", "getSupportedChainsFromProvider", "AccountId", "isEvmBlockchain", "Events", "HUB_LAST_CONNECTED_WALLETS", "CAIP_BITCOIN_CHAIN_ID", "CAIP_BITCOINCASH_CHAIN_ID", "CAIP_DOGECOIN_CHAIN_ID", "CAIP_LITECOIN_CHAIN_ID", "CAIP_ZCASH_CHAIN_ID", "CAIP_TON_NAMESPACE", "formatAddressWithNetwork", "CAIP_TRON_CHAIN_ID", "AccountId", "Err", "Ok", "mapCaipNamespaceToLegacyNetworkName", "chainId", "CAIP_BITCOIN_CHAIN_ID", "CAIP_ZCASH_CHAIN_ID", "CAIP_LITECOIN_CHAIN_ID", "CAIP_DOGECOIN_CHAIN_ID", "CAIP_BITCOINCASH_CHAIN_ID", "CAIP_TON_NAMESPACE", "CAIP_TRON_CHAIN_ID", "__name", "fromAccountIdToLegacyAddressFormat", "account", "address", "AccountId", "network", "formatAddressWithNetwork", "runSequentiallyWithoutFailure", "promises", "prevPromise", "task", "previousResults", "taskResult", "Ok", "error", "Err", "isConnectResultEvm", "result", "isConnectResultSolana", "createQueue", "options", "processingKeys", "queue", "removeKeyFromQueue", "key", "q", "processQueue", "currentItem", "item", "resolve", "indexOfCurrentItem", "shouldTryAutoConnect", "props", "Persistor", "__name", "name", "item", "value", "LastConnectedWalletsFromStorage", "__name", "#storageKey", "storageKey", "providerId", "namespaces", "HUB_LAST_CONNECTED_WALLETS", "#addWalletToHub", "providerIds", "#removeWalletsFromHub", "#listFromHub", "namespaceIds", "#removeNamespaceFromWalletHub", "Persistor", "storage", "storageState", "toBeAddedNamespaces", "storedNamespaces", "namespace", "storedNamespace", "persistor", "newProviderNamespaces", "findProviderByType", "providers", "type", "provider", "__name", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "mapHubEventsToLegacy", "hub", "event", "onUpdateState", "metadata", "namespaceId", "namespace", "accounts", "network", "derivationPath", "getNamespaceState", "getProviderState", "coreState", "detailsProperty", "property", "eventInfo", "getSupportedChainsFromProvider", "formattedAddresses", "account", "chainId", "address", "AccountId", "blockchainName", "getBlockChainNameFromId", "formatAddressWithNetwork", "fromAccountIdToLegacyAddressFormat", "convertNamespaceNetworkToEvmChainId", "meta", "evmBlockchainsList", "isEvmBlockchain", "convertEvmBlockchainMetaToEvmChainInfo", "tryConvertNamespaceNetworkToChainInfo", "transformHubResultToLegacyResult", "res", "isConnectResultEvm", "isConnectResultSolana", "synchronizeHubWithConfigProviders", "configurationProviders", "registeredProviders", "configProvider", "providerToRegister", "registeredProvider", "isSolanaNamespace", "ns", "isEvmNamespace", "isUtxoNamespace", "utils", "getSupportedChainsFromNamespace", "getSupportedChainsFromProvider", "useEffect", "useRef", "useState", "Ok", "Result", "debug", "logError", "method", "args", "error", "err", "debug", "__name", "withErrorLogging", "fn", "result", "withErrorLoggingApi", "api", "entries", "key", "value", "Result", "isEvmNamespaceInput", "namespace", "__name", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "eagerConnect", "type", "namespacesInput", "params", "getHub", "allBlockChains", "wallet", "targetNamespaces", "namespaceInput", "targetNamespace", "result", "connectNamespacesPromises", "info", "chain", "convertNamespaceNetworkToEvmChainId", "connectNamespacePromise", "isEvmNamespace", "e", "connectNamespacesResult", "runSequentiallyWithoutFailure", "failedNamespaces", "_", "index", "Result", "tryRunCanEagerConnect", "namespaces", "foundNamespaces", "successNamespaces", "canEagerConnectPromises", "namespaceInstance", "canEagerConnectResults", "autoConnect", "deps", "wallets", "lastConnectedWallets", "walletIds", "walletsToRemoveFromPersistence", "eagerConnectQueue", "configWalletNames", "providerName", "lastConnectedNamespaces", "error", "useEffect", "useRef", "useAutoConnect", "props", "autoConnectInitiated", "useRef", "useEffect", "shouldTryAutoConnect", "__name", "createStore", "Hub", "useRef", "useHubRefs", "providers", "store", "useRef", "hub", "createHub", "createdHub", "Hub", "getStore", "provider", "__name", "createdStore", "createStore", "getHub", "hubProviders", "synchronizeHubWithConfigProviders", "useHubAdapter", "params", "getStore", "getHub", "useHubRefs", "rerender", "useState", "dataRef", "useRef", "hubInitiated", "lastConnectAttemptParamsRef", "updateLastConnectAttemptParams", "__name", "type", "namespaces", "queueTask", "createQueue", "error", "actions", "utils", "useEffect", "event", "mapHubEventsToLegacy", "e", "currentRender", "useAutoConnect", "autoConnect", "lastConnectedWalletsFromStorage", "LastConnectedWalletsFromStorage", "HUB_LAST_CONNECTED_WALLETS", "withErrorLoggingApi", "network", "namespace", "provider", "proxiedNamespace", "namespacesProperty", "property", "namespaceMeta", "providerNamespace", "supportedChains", "getSupportedChainsFromNamespace", "wallet", "targetNamespaces", "targetNamespace", "result", "connectResultFromTargetNamespaces", "namespaceInput", "tryConvertNamespaceNetworkToChainInfo", "connectNamespacePromise", "isSolanaNamespace", "isEvmNamespace", "isUtxoNamespace", "transformHubResultToLegacyResult", "connectResult", "connectResultWithLegacyFormat", "successfullyConnectedSupportingEagerConnectNamespaces", "connectResults", "okResult", "Ok", "allResult", "Result", "namespaceShouldBeDisconnected", "namespaceIsConnected", "disconnectPromises", "info", "signerProperty", "installLink", "metadata", "extensions", "k", "key", "upperCasedKey", "providerProperties", "derivationPathProperty", "detailsProperty", "getSupportedChainsFromProvider", "hubState", "walletState", "accounts", "fromAccountIdToLegacyAddressFormat", "account", "namespacesState", "_", "value", "findProviderByType", "Provider", "props", "api", "useHubAdapter", "React", "WalletContext", "__name", "provider_default", "useContext", "useWallets", "context", "useContext", "WalletContext", "__name"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,qBAWrC;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,iBAAS,QAAQ,CAAC,KAAK,EAAE,aAAa,qBAQrC;AAED,eAAe,QAAQ,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import type { ConnectResult, EventHandler, ExtendedWalletInfo, NamespaceInputForConnect, WalletState } from './legacy/types.js';
2
2
  import type { Provider, WalletType } from '@hub3js/core';
3
3
  import type { NamespaceData as HubNamespaceData } from '@hub3js/core/store';
4
- import type { VersionedProviders } from '@hub3js/core/utils';
5
4
  import type { Namespace } from '@hub3js/namespaces';
6
5
  import type { Network } from '@rango-dev/internal-blockchains';
7
6
  import type { BlockchainMeta, SignerFactory } from 'rango-types';
@@ -23,7 +22,7 @@ export type ProviderProps = PropsWithChildren<{
23
22
  onUpdateState?: EventHandler;
24
23
  allBlockChains?: BlockchainMeta[];
25
24
  autoConnect?: boolean;
26
- providers: VersionedProviders[];
25
+ providers: Provider[];
27
26
  configs?: {
28
27
  wallets?: (WalletType | Provider)[];
29
28
  walletOptions?: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CACL,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,wBAAwB,EAAE,GACtC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEtD,KAAK,CACH,IAAI,EAAE,UAAU,GACf,WAAW,GAAG;QAAE,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;KAAE,CAAC;IACnE,kBAAkB,CAChB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,wBAAwB,GACnC,OAAO,CAAC;IACX,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACpD,iBAAiB,CACf,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,wBAAwB,GAClC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;IAC5C,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;QACpC,aAAa,CAAC,EAAE;YACd,CAAC,GAAG,EAAE,UAAU,GAAG;gBACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;gBACnB,UAAU,CAAC,EAAE;oBACX,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;iBAChC,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CACL,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,wBAAwB,EAAE,GACtC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEtD,KAAK,CACH,IAAI,EAAE,UAAU,GACf,WAAW,GAAG;QAAE,UAAU,CAAC,EAAE,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAA;KAAE,CAAC;IACnE,kBAAkB,CAChB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE,wBAAwB,GACnC,OAAO,CAAC;IACX,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,CAAC;IACpD,iBAAiB,CACf,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,wBAAwB,GAClC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC;IAC5C,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;QACpC,aAAa,CAAC,EAAE;YACd,CAAC,GAAG,EAAE,UAAU,GAAG;gBACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;gBACnB,UAAU,CAAC,EAAE;oBACX,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;iBAChC,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/wallets-react",
3
- "version": "0.49.2-next.0",
3
+ "version": "0.49.2-next.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/index.ts",
@@ -31,19 +31,19 @@
31
31
  "react-dom": "^17.0.0 || ^18.0.0"
32
32
  },
33
33
  "dependencies": {
34
- "@hub3js/bip122": "^0.2.1",
35
- "@hub3js/core": "^0.62.0",
36
- "@hub3js/evm": "^0.5.0",
37
- "@hub3js/namespaces": "^0.5.1",
38
- "@hub3js/solana": "^0.5.0",
39
- "@hub3js/std": "^0.4.0",
40
- "@hub3js/sui": "^0.4.0",
41
- "@hub3js/tvm": "^0.4.0",
42
- "@rango-dev/internal-blockchains": "^0.2.2-next.0",
34
+ "@hub3js/bip122": "^0.3.0",
35
+ "@hub3js/core": "^0.63.0",
36
+ "@hub3js/evm": "^0.6.0",
37
+ "@hub3js/namespaces": "^0.6.0",
38
+ "@hub3js/solana": "^0.6.0",
39
+ "@hub3js/std": "^0.5.0",
40
+ "@hub3js/sui": "^0.5.0",
41
+ "@hub3js/tvm": "^0.5.0",
42
+ "@rango-dev/internal-blockchains": "^0.2.2-next.1",
43
43
  "@rango-dev/logging-core": "^0.15.1-next.0",
44
- "@rango-dev/wallets-core": "^0.62.2-next.0",
44
+ "@rango-dev/wallets-core": "^0.62.2-next.1",
45
45
  "caip": "^1.1.1",
46
- "rango-types": "^0.5.0",
46
+ "rango-types": "^0.6.0",
47
47
  "ts-results": "^3.3.0"
48
48
  },
49
49
  "devDependencies": {
package/src/hub/mod.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { getHubProviders, findProviderByType } from './utils.js';
1
+ export { findProviderByType } from './utils.js';
2
2
  export { useHubAdapter } from './useHubAdapter.js';
package/src/hub/utils.ts CHANGED
@@ -14,7 +14,6 @@ import type {
14
14
  } from '@hub3js/evm';
15
15
  import type { SolanaActions } from '@hub3js/solana';
16
16
 
17
- import { pickVersion, type VersionedProviders } from '@hub3js/core/utils';
18
17
  import {
19
18
  convertEvmBlockchainMetaToEvmChainInfo,
20
19
  formatAddressWithNetwork,
@@ -34,18 +33,6 @@ import {
34
33
  } from './helpers.js';
35
34
  import { LastConnectedWalletsFromStorage } from './lastConnectedWallets.js';
36
35
 
37
- export function getHubProviders(providers: VersionedProviders[]): Provider[] {
38
- return providers.map((provider) => {
39
- try {
40
- return pickVersion(provider, '1.0.0')[1] as Provider;
41
- } catch {
42
- throw new Error(
43
- "Legacy providers aren't supported anymore. Expected a provider with version '1.0.0'."
44
- );
45
- }
46
- });
47
- }
48
-
49
36
  export function findProviderByType(
50
37
  providers: Provider[],
51
38
  type: string
package/src/provider.tsx CHANGED
@@ -4,13 +4,9 @@ import React from 'react';
4
4
 
5
5
  import { WalletContext } from './context.js';
6
6
  import { useHubAdapter } from './hub/mod.js';
7
- import { getHubProviders } from './hub/utils.js';
8
7
 
9
8
  function Provider(props: ProviderProps) {
10
- const api = useHubAdapter({
11
- ...props,
12
- providers: getHubProviders(props.providers),
13
- });
9
+ const api = useHubAdapter(props);
14
10
 
15
11
  return (
16
12
  <WalletContext.Provider value={api}>
package/src/types.ts CHANGED
@@ -7,7 +7,6 @@ import type {
7
7
  } from './legacy/types.js';
8
8
  import type { Provider, WalletType } from '@hub3js/core';
9
9
  import type { NamespaceData as HubNamespaceData } from '@hub3js/core/store';
10
- import type { VersionedProviders } from '@hub3js/core/utils';
11
10
  import type { Namespace } from '@hub3js/namespaces';
12
11
  import type { Network } from '@rango-dev/internal-blockchains';
13
12
  import type { BlockchainMeta, SignerFactory } from 'rango-types';
@@ -43,7 +42,7 @@ export type ProviderProps = PropsWithChildren<{
43
42
  onUpdateState?: EventHandler;
44
43
  allBlockChains?: BlockchainMeta[];
45
44
  autoConnect?: boolean;
46
- providers: VersionedProviders[];
45
+ providers: Provider[];
47
46
  configs?: {
48
47
  wallets?: (WalletType | Provider)[];
49
48
  walletOptions?: {