@rango-dev/wallets-react 0.0.0-experimental-1cc1923b-20260930 → 0.0.0-experimental-767249ce-20261007
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/events.d.ts +49 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/hub/autoConnect.d.ts +2 -0
- package/dist/hub/autoConnect.d.ts.map +1 -1
- package/dist/hub/constants.d.ts +1 -0
- package/dist/hub/constants.d.ts.map +1 -1
- package/dist/hub/useHubAdapter.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +4 -4
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/walletEvents.test.d.ts +2 -0
- package/dist/walletEvents.test.d.ts.map +1 -0
- package/package.json +6 -5
- package/src/events.ts +99 -0
- package/src/hub/autoConnect.ts +55 -3
- package/src/hub/constants.ts +12 -0
- package/src/hub/useHubAdapter.ts +82 -23
- package/src/index.ts +12 -0
- package/src/types.ts +3 -0
- package/src/walletEvents.test.tsx +533 -0
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { WalletType } from '@hub3js/core';
|
|
2
|
+
import type { Namespace } from '@hub3js/namespaces';
|
|
3
|
+
import type { BlockchainMeta } from 'rango-types';
|
|
4
|
+
export declare const WalletEventChannel = "walletEvent";
|
|
5
|
+
export declare enum WalletEventTypes {
|
|
6
|
+
WALLET_DETECTED = "walletDetected",
|
|
7
|
+
WALLET_CONNECT_INITIATED = "walletConnectInitiated",
|
|
8
|
+
WALLET_CONNECTED = "walletConnected",
|
|
9
|
+
WALLET_CONNECT_FAILED = "walletConnectFailed",
|
|
10
|
+
WALLET_DISCONNECTED = "walletDisconnected"
|
|
11
|
+
}
|
|
12
|
+
export type WalletConnectOrigin = 'manual' | 'auto';
|
|
13
|
+
type WalletConnectEventPayload = {
|
|
14
|
+
/** Wallet type id, e.g. `metamask`. */
|
|
15
|
+
walletName: WalletType;
|
|
16
|
+
namespace: Namespace;
|
|
17
|
+
/** Rango blockchain name (e.g. `ETH`), or `null` when it isn't known. */
|
|
18
|
+
chain: string | null;
|
|
19
|
+
origin: WalletConnectOrigin;
|
|
20
|
+
};
|
|
21
|
+
export type WalletDetectedEventPayload = {
|
|
22
|
+
walletName: WalletType;
|
|
23
|
+
};
|
|
24
|
+
export type WalletConnectInitiatedEventPayload = WalletConnectEventPayload;
|
|
25
|
+
export type WalletConnectedEventPayload = WalletConnectEventPayload;
|
|
26
|
+
export type WalletConnectFailedEventPayload = WalletConnectEventPayload;
|
|
27
|
+
export type WalletDisconnectedEventPayload = {
|
|
28
|
+
walletName: WalletType;
|
|
29
|
+
namespace: Namespace;
|
|
30
|
+
};
|
|
31
|
+
type EventData<T extends WalletEventTypes, U> = {
|
|
32
|
+
type: T;
|
|
33
|
+
payload: U;
|
|
34
|
+
};
|
|
35
|
+
export type WalletEventData = EventData<WalletEventTypes.WALLET_DETECTED, WalletDetectedEventPayload> | EventData<WalletEventTypes.WALLET_CONNECT_INITIATED, WalletConnectInitiatedEventPayload> | EventData<WalletEventTypes.WALLET_CONNECTED, WalletConnectedEventPayload> | EventData<WalletEventTypes.WALLET_CONNECT_FAILED, WalletConnectFailedEventPayload> | EventData<WalletEventTypes.WALLET_DISCONNECTED, WalletDisconnectedEventPayload>;
|
|
36
|
+
export type WalletEvents = {
|
|
37
|
+
[WalletEventChannel]: WalletEventData;
|
|
38
|
+
};
|
|
39
|
+
export interface Emitter<Events extends Record<string, unknown>> {
|
|
40
|
+
emit<K extends keyof Events>(type: K, event: Events[K]): void;
|
|
41
|
+
}
|
|
42
|
+
export type WalletEventEmitter = Emitter<WalletEvents>;
|
|
43
|
+
export declare function emitWalletDetectedOnce(walletName: WalletType, emitter?: WalletEventEmitter): void;
|
|
44
|
+
/**
|
|
45
|
+
* Connect results may carry an EVM chain id (e.g. `0x1`); events always carry a Rango blockchain name.
|
|
46
|
+
*/
|
|
47
|
+
export declare function toBlockchainName(network: string | null | undefined, allBlockChains: BlockchainMeta[] | undefined): string | null;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD,oBAAY,gBAAgB;IAC1B,eAAe,mBAAmB;IAClC,wBAAwB,2BAA2B;IACnD,gBAAgB,oBAAoB;IACpC,qBAAqB,wBAAwB;IAC7C,mBAAmB,uBAAuB;CAC3C;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEpD,KAAK,yBAAyB,GAAG;IAC/B,uCAAuC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,kCAAkC,GAAG,yBAAyB,CAAC;AAC3E,MAAM,MAAM,2BAA2B,GAAG,yBAAyB,CAAC;AACpE,MAAM,MAAM,+BAA+B,GAAG,yBAAyB,CAAC;AACxE,MAAM,MAAM,8BAA8B,GAAG;IAC3C,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,SAAS,CAAC,CAAC,SAAS,gBAAgB,EAAE,CAAC,IAAI;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,eAAe,GACvB,SAAS,CAAC,gBAAgB,CAAC,eAAe,EAAE,0BAA0B,CAAC,GACvE,SAAS,CACP,gBAAgB,CAAC,wBAAwB,EACzC,kCAAkC,CACnC,GACD,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,GACzE,SAAS,CACP,gBAAgB,CAAC,qBAAqB,EACtC,+BAA+B,CAChC,GACD,SAAS,CACP,gBAAgB,CAAC,mBAAmB,EACpC,8BAA8B,CAC/B,CAAC;AAEN,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,kBAAkB,CAAC,EAAE,eAAe,CAAC;CACvC,CAAC;AAEF,MAAM,WAAW,OAAO,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC/D;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAIvD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,cAAc,EAAE,cAAc,EAAE,GAAG,SAAS,GAC3C,MAAM,GAAG,IAAI,CAKf"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { UseAdapterParams } from './useHubAdapter.js';
|
|
2
2
|
import type { Hub, Provider, WalletType } from '@hub3js/core';
|
|
3
|
+
import { type WalletEventEmitter } from '../events.js';
|
|
3
4
|
export declare function autoConnect(deps: {
|
|
4
5
|
getHub: () => Hub;
|
|
5
6
|
allBlockChains: UseAdapterParams['allBlockChains'];
|
|
6
7
|
wallets?: (WalletType | Provider)[];
|
|
8
|
+
emitter?: WalletEventEmitter;
|
|
7
9
|
}): Promise<void>;
|
|
8
10
|
//# sourceMappingURL=autoConnect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoConnect.d.ts","sourceRoot":"","sources":["../../src/hub/autoConnect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"autoConnect.d.ts","sourceRoot":"","sources":["../../src/hub/autoConnect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM9D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,cAAc,CAAC;AA0MtB,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,MAAM,EAAE,MAAM,GAAG,CAAC;IAClB,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;IACpC,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,GAAG,OAAO,CAAC,IAAI,CAAC,CA8EhB"}
|
package/dist/hub/constants.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hub/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/hub/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,0BAA0B,kCAAkC,CAAC;AAG1E,eAAO,MAAM,2BAA2B,EAAE,MAAM,EAO/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHubAdapter.d.ts","sourceRoot":"","sources":["../../src/hub/useHubAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHubAdapter.d.ts","sourceRoot":"","sources":["../../src/hub/useHubAdapter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AAoCzD,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG;IAChE,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe,CA4gBvE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { default as Provider } from './provider.js';
|
|
2
2
|
export { useWallets } from './hooks.js';
|
|
3
3
|
export type * from './types.js';
|
|
4
|
+
export { WalletEventChannel, WalletEventTypes } from './events.js';
|
|
5
|
+
export type { Emitter, WalletConnectedEventPayload, WalletConnectFailedEventPayload, WalletConnectInitiatedEventPayload, WalletConnectOrigin, WalletDetectedEventPayload, WalletDisconnectedEventPayload, WalletEventData, WalletEvents, } from './events.js';
|
|
4
6
|
export * from './legacy/types.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,mBAAmB,YAAY,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EACV,OAAO,EACP,2BAA2B,EAC3B,+BAA+B,EAC/B,kCAAkC,EAClC,mBAAmB,EACnB,0BAA0B,EAC1B,8BAA8B,EAC9B,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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_TRON_CHAIN_ID as fe}from"@hub3js/tron";import{CAIP_NAMESPACE as he}from"@hub3js/tvm";import{formatAddressWithNetwork as Ce}from"@rango-dev/internal-blockchains";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()===he?"TON":e.namespace==="sui"||e.reference===fe?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 Ce(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};
|
|
1
|
+
var Ce=Object.defineProperty;var o=(e,t)=>Ce(e,"name",{value:t,configurable:!0});import Ze from"react";import{createContext as he}from"react";var A="Context hasn't been initialized yet.",Ee={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)}},O=he(Ee);import{convertEvmBlockchainMetaToEvmChainInfo as Ie,formatAddressWithNetwork as xe,getBlockChainNameFromId as be,getSupportedChainsFromProvider as Se}from"@rango-dev/internal-blockchains";import{AccountId as Le}from"caip";import{isEvmBlockchain as De}from"rango-types";var B=(m=>(m.CONNECTED="connected",m.CONNECTING="connecting",m.REACHABLE="reachable",m.INSTALLED="installed",m.ACCOUNTS="accounts",m.NETWORK="network",m.NAMESPACE_DISCONNECTED="namespace_disconnected",m.PROVIDER_DISCONNECTED="provider_disconnected",m))(B||{});import{WalletTypes as b}from"@rango-dev/provider-all";var P="hub-v1-last-connected-wallets",z=[b.LEDGER,b.TREZOR,b.LEDGER_WALLET,b.WALLET_CONNECT_2,b.TON_CONNECT,b.DEFAULT];import{CAIP_BITCOIN_CHAIN_ID as ye,CAIP_BITCOINCASH_CHAIN_ID as ve,CAIP_DOGECOIN_CHAIN_ID as we,CAIP_LITECOIN_CHAIN_ID as Ne,CAIP_ZCASH_CHAIN_ID as ge}from"@hub3js/bip122";import{CAIP_TRON_CHAIN_ID as Pe}from"@hub3js/tron";import{CAIP_NAMESPACE as Te}from"@hub3js/tvm";import{formatAddressWithNetwork as ke}from"@rango-dev/internal-blockchains";import{AccountId as Ae}from"caip";import{Err as U,Ok as X}from"ts-results";function We(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===ye?"BTC":e.reference===ge?"ZCASH":e.reference===Ne?"LTC":e.reference===we?"DOGE":e.reference===ve?"BCH":e.namespace.toLowerCase()===Te?"TON":e.namespace==="sui"||e.reference===Pe?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}o(We,"mapCaipNamespaceToLegacyNetworkName");function L(e){let{chainId:t,address:n}=Ae.parse(e),l=We(t);return ke(n,l)}o(L,"fromAccountIdToLegacyAddressFormat");async function q(e){return e.reduce(async(t,n)=>{let l=await t;try{let r=await n();return[...l,new X(r)]}catch(r){return[...l,new U(r)]}},Promise.resolve([]))}o(q,"runSequentiallyWithoutFailure");function Z(e){return typeof e=="object"&&!Array.isArray(e)}o(Z,"isConnectResultEvm");function J(e){return Array.isArray(e)}o(J,"isConnectResultSolana");function ee(e){let t=new Set,n=[],l=o((u,d)=>{n=n.filter(m=>m.key!==u?!0:(m.resolve(d),!1))},"removeKeyFromQueue"),r=o(async()=>{let u=n.find(f=>!t.has(f.key));if(!u)return;let{task:d,resolve:m,key:w}=u;t.add(w);try{let f=await d();m(new X(f))}catch(f){e?.onError&&e.onError(f,{removeCurrentKeyFromQueue:()=>l(w,new U(f))}),m(new U(f))}finally{let f=n.findIndex(s=>s.key===w);f>=0&&n.splice(f,1),t.delete(w),r()}},"processQueue");return o(async(u,d)=>new Promise(m=>{n.push({task:u,resolve:m,key:d}),r()}),"queueTask")}o(ee,"createQueue");function te(e){return!!e.allBlockChains?.length&&!!e.autoConnect}o(te,"shouldTryAutoConnect");var I=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 W=class{static{o(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,n){if(this.#e===P)return this.#t(t,n);throw new Error("Not implemented")}removeWallets(t){if(this.#e===P)return this.#n(t);throw new Error("Not implemented")}list(){if(this.#e===P)return this.#o();throw new Error("Not implemented")}removeNamespacesFromWallet(t,n){if(this.#e===P)return this.#r(t,n);throw new Error("Not implemented")}#o(){return new I().getItem(P)||{}}#t(t,n){let l=new I,r=l.getItem(this.#e)||{},C=n;if(r[t]){let u=r[t];C=u.concat(n.filter(d=>!u.some(m=>m.namespace===d.namespace)))}l.setItem(this.#e,{...r,[t]:C})}#n(t){let n=new I,l=n.getItem(this.#e)||{};if(!t){n.setItem(this.#e,{});return}t.forEach(r=>{l[r]&&delete l[r]}),n.setItem(this.#e,l)}#r(t,n){let u=(new I().getItem(this.#e)||{})[t]?.filter(d=>!n.includes(d.namespace));this.#n([t]),u?.length>0&&this.#t(t,u)}};var _e=new W(P);function ne(e,t,n,l){let r=e.get(t.provider);if(!r)throw new Error("Currently all the events have assigned to a provider. The event doesn't include one.",{cause:t});let C=t.namespace,u=C?r.findByNamespace(C):void 0,d=null,m=null,w;if(u){let[i]=u.state();d=i().accounts,m=i().network,l.lastConnectAttemptParams[t.provider]&&(w=l.lastConnectAttemptParams[t.provider].find(p=>p.namespace===C)?.derivationPath)}let[f]=r.state(),s={connected:f().connected,connecting:f().connecting,installed:f().installed,accounts:d,network:m,reachable:!0,derivationPath:w},a=r.info()?.metadata.properties?.find(i=>i.name==="details"),c={supportedBlockchains:Se(r,l.allBlockChains),isContractWallet:a?.value?.isContractWallet??!1,isHub:!0,namespace:C};switch(t.type){case"provider_detected":n(t.provider,"installed",!0,s,c);break;case"provider_connecting":n(t.provider,"connecting",t.value,s,c);break;case"provider_connected":n(t.provider,"connected",!0,s,c);break;case"provider_disconnected":n(t.provider,"provider_disconnected",t.provider,s,c),n(t.provider,"connected",!1,s,c),n(t.provider,"accounts",null,s,c);break;case"namespace_disconnected":_e.removeNamespacesFromWallet(t.provider,[t.namespace]),n(t.provider,"namespace_disconnected",t.namespace,s,{...c,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&n(t.provider,"namespace_disconnected",t.namespace,s,c);let i=[];c.isContractWallet?i=t.accounts.map(p=>{let{chainId:E,address:N}=Le.parse(p);if(typeof E=="string")throw new Error("Should be in CAIP format");let y=be(E.reference,c.supportedBlockchains);return y?xe(N,y):L(p)}):i=t.accounts.map(p=>L(p)),n(t.provider,"accounts",i,s,{...c,namespace:t.namespace})}break;case"namespace_network_switched":n(t.provider,"network",t.network,s,{...c,namespace:t.namespace});break}}o(ne,"mapHubEventsToLegacy");function K(e,t){if(!e.network)return;let n=t.filter(De);return Ie(n)[e.network]}o(K,"convertNamespaceNetworkToEvmChainId");function oe(e,t){return K(e,t)||e.network}o(oe,"tryConvertNamespaceNetworkToChainInfo");function R(e){return Z(e)?{accounts:e.accounts,network:e.network}:J(e)?{accounts:e,network:null}:{accounts:[e],network:null}}o(R,"transformHubResultToLegacyResult");function re(e,t){let n=e.getAll();t.filter(r=>!n.get(r.id)).forEach(r=>{e.add(r.id,r),r.init()}),n.forEach(r=>{t.some(u=>u.id===r.id)||e.remove(r.id)})}o(re,"synchronizeHubWithConfigProviders");function ae(e){return e.namespaceId==="Solana"}o(ae,"isSolanaNamespace");function F(e){return e.namespaceId==="EVM"}o(F,"isEvmNamespace");function se(e){return e.namespaceId==="UTXO"}o(se,"isUtxoNamespace");import{utils as Ge}from"@hub3js/evm";import{getSupportedChainsFromNamespace as Ye,getSupportedChainsFromProvider as Qe}from"@rango-dev/internal-blockchains";import{useEffect as G,useRef as Y,useState as Ve}from"react";import{Ok as ze,Result as Xe}from"ts-results";import{getBlockChainNameFromId as Oe}from"@rango-dev/internal-blockchains";var T="walletEvent",H=(C=>(C.WALLET_DETECTED="walletDetected",C.WALLET_CONNECT_INITIATED="walletConnectInitiated",C.WALLET_CONNECTED="walletConnected",C.WALLET_CONNECT_FAILED="walletConnectFailed",C.WALLET_DISCONNECTED="walletDisconnected",C))(H||{}),ce=new Set;function ie(e,t){ce.has(e)||z.includes(e)||(ce.add(e),t?.emit(T,{type:"walletDetected",payload:{walletName:e}}))}o(ie,"emitWalletDetectedOnce");function j(e,t){return e?Oe(e,t||[]):null}o(j,"toBlockchainName");import{debug as Be}from"@rango-dev/logging-core";function le(e,t,n){let l=n instanceof Error?n:new Error(String(n));Be(l,{context:{method:e,args:t},tags:{type:"wallet-error"}})}o(le,"logError");function Re(e,t){return(...n)=>{try{let l=t(...n);return l instanceof Promise?l.catch(r=>{throw le(e,n,r),r}):l}catch(l){throw le(e,n,l),l}}}o(Re,"withErrorLogging");function pe(e){let t=Object.entries(e).map(([n,l])=>[n,Re(n,l.bind(e))]);return Object.fromEntries(t)}o(pe,"withErrorLoggingApi");import{Result as Fe}from"ts-results";function $(e,t){return{walletName:e,namespace:t.namespace,chain:t.network||null,origin:"auto"}}o($,"createAutoConnectEventPayload");function He(e){return e.namespace==="EVM"}o(He,"isEvmNamespaceInput");var M=new W(P);async function je(e,t,n){let{getHub:l,allBlockChains:r,emitter:C}=n,u=l().get(e);if(!u)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 d=[];t.forEach(a=>{let c=a.namespace,i=u.findByNamespace(c);if(!i)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${a.namespace})`);d.push([a,i])});let m=d.map(([a,c])=>{let p=(He(a)?K(a,r||[]):void 0)||a.network;return async()=>{let E;F(c)?E=o(async()=>c.connect(p),"connectNamespacePromise"):E=o(async()=>c.connect(),"connectNamespacePromise");let N=$(e,a);try{let y=await E();C?.emit(T,{type:"walletConnected",payload:{...N,chain:j(R(y).network,r)}})}catch(y){throw C?.emit(T,{type:"walletConnectFailed",payload:N}),y instanceof Error?y:new Error(y)}}}),w=await q(m),f=d.filter((a,c)=>w[c].err).map(a=>a[0]);if(f.length>0&&M.removeNamespacesFromWallet(e,f.map(a=>a.namespace)),!w.some(a=>a.ok))throw new Error(`No namespace connected for ${e}`);return Fe.all(...w.filter(a=>a.ok)).unwrap()}o(je,"eagerConnect");async function Me(e,t){let n=[],l=[],r=[],C=[];e.forEach(d=>{let m=t.findByNamespace(d.namespace);m?(n.push(d),C.push(async()=>await m.canEagerConnect())):r.push(d)});let u=await q(C);return n.forEach((d,m)=>{u[m].ok&&u[m].val?l.push(d):r.push(d)}),{successNamespaces:l,failedNamespaces:r}}o(Me,"tryRunCanEagerConnect");async function ue(e){let{getHub:t,allBlockChains:n,wallets:l,emitter:r}=e,C=M.list(),u=Object.keys(C),d=[];if(u.length){let m=[],w=l?.map(f=>typeof f=="string"?f:f.id);u.forEach(async f=>{if(w&&!w.includes(f)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",f),d.push(f);return}let s=t().get(f),a=C[f].map(p=>({namespace:p.namespace,network:p.network}));if(!a.length||!s){d.push(f);return}a.forEach(p=>{r?.emit(T,{type:"walletConnectInitiated",payload:$(f,p)})});let{successNamespaces:c,failedNamespaces:i}=await Me(a,s);if(i.forEach(p=>{r?.emit(T,{type:"walletConnectFailed",payload:$(f,p)})}),c.length)i.length&&M.removeNamespacesFromWallet(s.id,i.map(p=>p.namespace));else{d.push(f);return}m.push(je(f,c,{allBlockChains:n,getHub:t,emitter:r}).catch(p=>console.warn(p)))}),M.removeWallets(d),await Promise.all(m)}}o(ue,"autoConnect");import{useEffect as Ue,useRef as qe}from"react";function me(e){let t=qe(!1);Ue(()=>{te(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}o(me,"useAutoConnect");import{createStore as Ke,Hub as $e}from"@hub3js/core";import{useRef as de}from"react";function fe(e){let t=de(null),n=de(null);function l(){let u=new $e({store:r()});return e.forEach(d=>{u.add(d.id,d)}),n.current=u,u}o(l,"createHub");function r(){if(t.current!==null)return t.current;let u=Ke();return t.current=u,u}o(r,"getStore");function C(){let u=n.current?.getAll();return!n.current||!u?l():(re(n.current,e),n.current)}return o(C,"getHub"),{getStore:r,getHub:C}}o(fe,"useHubRefs");function Q(e){let{getStore:t,getHub:n}=fe(e.providers),[,l]=Ve(0),r=Y({onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains,emitter:e.emitter}),C=Y(!1),u=Y({}),d=o((s,a)=>{u.current[s]=a||[]},"updateLastConnectAttemptParams"),m=ee({onError:(s,a)=>{Ge.isUserRejectionError(s)&&a.removeCurrentKeyFromQueue()}});G(()=>{r.current={onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains,emitter:e.emitter}},[e]),G(()=>{let s=o((c,i,p,E,N)=>{i==="installed"&&E.installed&&ie(c,r.current.emitter),r.current.onUpdateState?.(c,i,p,E,N)},"onUpdateState"),a=o(c=>{try{ne(n(),c,s,{allBlockChains:r.current.allBlockChains,lastConnectAttemptParams:u.current})}catch(i){console.error(i)}l(i=>i+1)},"onStoreEvent");t().subscribe(a).flushEvents()},[]),G(()=>{C.current||!e.allBlockChains?.length||(n().init(e.configs?.walletOptions),l(s=>s+1),C.current=!0)},[e.allBlockChains,e.configs?.walletOptions]),me({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{ue({allBlockChains:e.allBlockChains,getHub:n,wallets:e.configs?.wallets,emitter:r.current.emitter})}});let w=new W(P);return pe({canSwitchNetworkTo(s,a,c){let i=n().get(s);if(!i)return!1;if(!c)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let p=i.findByNamespace(c.namespace);if(!p)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${c.namespace})`);if(!("canSwitchNetwork"in p))return!1;let E=i.info()?.metadata?.properties?.find(g=>g.name==="namespaces");if(!r.current.allBlockChains)throw new Error("Blockchains are not available");let N=E?.value.data.find(g=>g.value===c.namespace);if(!N)throw new Error(`NamespaceMeta is not defined for requested namespace: ${c.namespace}`);let y=Ye(N,r.current.allBlockChains);return p.canSwitchNetwork({network:a,supportedChains:y})},async connect(s,a){let c=n().get(s);if(!c)throw new Error(`You should add ${s} to provider first then call 'connect'.`);if(!a)throw new Error("Passing namespace to `connect` is required.");d(s,a);let i=[];a.forEach(h=>{let v=h.namespace,k=c.findByNamespace(v);if(!k)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${h.namespace})`);i.push([h,k])});let p=i.map(async([h,v])=>{let k=oe(h,e.allBlockChains||[]),x;ae(v)?x=o(async()=>v.connect({derivationPath:h.derivationPath}),"connectNamespacePromise"):F(v)?x=o(async()=>v.connect(k,{derivationPath:h.derivationPath}),"connectNamespacePromise"):se(v)?x=o(async()=>v.connect({derivationPath:h.derivationPath}),"connectNamespacePromise"):x=o(async()=>v.connect(),"connectNamespacePromise");let D=o(async()=>x().then(R).then(S=>({response:S,input:{namespace:h.namespace,network:h.network,supportsEagerConnect:"canEagerConnect"in v}})),"connectNamespaceProcess");return m(o(async()=>{if(v.state()[0]().connected)return D();let S={walletName:s,namespace:h.namespace,origin:"manual"},V=h.network||null;r.current.emitter?.emit(T,{type:"walletConnectInitiated",payload:{...S,chain:V}});try{let _=await D();return r.current.emitter?.emit(T,{type:"walletConnected",payload:{...S,chain:j(_.response.network,e.allBlockChains)}}),_}catch(_){throw r.current.emitter?.emit(T,{type:"walletConnectFailed",payload:{...S,chain:V}}),_}},"connectNamespaceProcessWithEvents"),s)}),E=await Promise.all(p),N=E.filter(h=>h.ok).filter(h=>h.val.input.supportsEagerConnect).map(h=>({namespace:h.val.input.namespace,network:h.val.input.network}));N.length>0&&w.addWallet(s,N);let y=E.map(h=>h.andThen(v=>new ze(v.response))),g=Xe.all(...y);if(g.err)throw g.val;return g.unwrap()},async disconnect(s,a){let c=n().get(s);if(!c)throw new Error(`You should add ${s} to provider first then call 'disconnect'.`);c.getAll().forEach(i=>{let p=!a||a.includes(i.namespaceId),E=i.state()[0]().connected;if(p&&E)return r.current.emitter?.emit(T,{type:"walletDisconnected",payload:{walletName:s,namespace:i.namespaceId}}),i.disconnect()}),e.autoConnect&&(a?w.removeNamespacesFromWallet(s,a):w.removeWallets([s]))},async disconnectAll(){let s=Array.from(n().getAll().values()).map(async a=>this.disconnect(a.id));return await Promise.allSettled(s)},async getSigners(s){let a=n().get(s);if(!a)throw new Error(`You should add ${s} to provider first.`);let c=a.info();if(!c)throw new Error("Your provider should have required `info`.");let p=c.metadata.properties?.find(E=>E.name==="signers");if(!p)throw new Error("Your provider should contain signers property.");return p.value.getSigners()},getWalletInfo(s){let a=n().get(s);if(!a)throw new Error(`You should add ${s} to provider first.`);let c=a.info();if(!c)throw new Error("Your provider should have required `info`.");let i={DEFAULT:""},{metadata:p}=c,{extensions:E}=p;Object.keys(E).forEach(v=>{let k=v;if(k==="homepage"&&(i.DEFAULT=E[k]||""),["firefox","chrome","brave","edge"].includes(k)){let D=k.toUpperCase();i[D]=E[k]||""}});let N=p.properties,y=N?.find(v=>v.name==="namespaces"),g=N?.find(v=>v.name==="derivationPath"),h=N?.find(v=>v.name==="details");return{name:p.name,img:p.icon,installLink:i,color:"red",supportedChains:Qe(a,r.current.allBlockChains),isContractWallet:h?.value?.isContractWallet,mobileWallet:h?.value?.mobileWallet,showOnMobile:h?.value?.showOnMobile,needsNamespace:y?.value,needsDerivationPath:g?.value,isHub:!0,properties:p.properties}},state(s){let a=n().state(),c=n().get(s),i=a[s];if(!i||!c)return{connected:!1,connecting:!1,installed:!1,reachable:!1,accounts:null,network:null,namespaces:new Map};let p=i.namespaces.filter(y=>y.connected).flatMap(y=>y.accounts?.map(g=>L(g))).filter(y=>!!y),E=new Map(Array.from(c.getAll(),([y,g])=>[g.namespaceId,g.state()[0]()]));return{connected:i.connected,connecting:i.connecting,installed:i.installed,reachable:!0,accounts:p,network:null,namespaces:E}},async suggestAndConnect(s,a){let c=n().get(s);if(!c)throw new Error(`You should add ${s} to provider first then call 'suggestAndConnect'.`);let i=c.findByNamespace(a.namespace);throw i?"suggest"in i?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(s){let a=n().get(s);if(!a)throw new Error(`You're trying to access ${s} provider which is not found in hub providers. it may not be registered yet.`);return a}})}o(Q,"useHubAdapter");function Je(e){let t=Q(e);return Ze.createElement(O.Provider,{value:t},e.children)}o(Je,"Provider");var et=Je;import{useContext as tt}from"react";function nt(){let e=tt(O);if(!e)throw Error("useWallet can only be used within the Provider component");return e}o(nt,"useWallets");export{B as Events,et as Provider,T as WalletEventChannel,H as WalletEventTypes,nt as useWallets};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|