@rango-dev/wallets-react 0.0.0-experimental-214d73c7-20260922 → 0.0.0-experimental-487dd292-20260929
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 -2
- 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/mod.d.ts +1 -1
- package/dist/hub/mod.d.ts.map +1 -1
- package/dist/hub/useHubAdapter.d.ts.map +1 -1
- package/dist/hub/utils.d.ts +1 -5
- package/dist/hub/utils.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/legacy/types.d.ts +1 -2
- package/dist/legacy/types.d.ts.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/types.d.ts +4 -2
- 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 +14 -13
- package/src/events.ts +99 -0
- package/src/hub/autoConnect.ts +54 -24
- package/src/hub/constants.ts +12 -0
- package/src/hub/helpers.ts +1 -1
- package/src/hub/mod.ts +1 -1
- package/src/hub/useHubAdapter.ts +78 -27
- package/src/hub/utils.ts +15 -47
- package/src/index.ts +12 -0
- package/src/legacy/types.ts +0 -1
- package/src/provider.tsx +1 -5
- package/src/types.ts +4 -2
- 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(emitter: WalletEventEmitter, walletName: WalletType): 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,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,UAAU,GACrB,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,10 +1,10 @@
|
|
|
1
1
|
import type { UseAdapterParams } from './useHubAdapter.js';
|
|
2
2
|
import type { Hub, Provider, WalletType } from '@hub3js/core';
|
|
3
|
-
import { type
|
|
3
|
+
import { type WalletEventEmitter } from '../events.js';
|
|
4
4
|
export declare function autoConnect(deps: {
|
|
5
5
|
getHub: () => Hub;
|
|
6
6
|
allBlockChains: UseAdapterParams['allBlockChains'];
|
|
7
7
|
wallets?: (WalletType | Provider)[];
|
|
8
|
-
|
|
8
|
+
emitter: WalletEventEmitter;
|
|
9
9
|
}): Promise<void>;
|
|
10
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;
|
|
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,EAAE,kBAAkB,CAAC;CAC7B,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"}
|
package/dist/hub/mod.d.ts
CHANGED
package/dist/hub/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/hub/mod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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"}
|
|
@@ -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;AAqCzD,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,CAugBvE"}
|
package/dist/hub/utils.d.ts
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import type { AllProxiedNamespaces } from './types.js';
|
|
2
|
-
import type { ConnectResult,
|
|
2
|
+
import type { ConnectResult, NamespaceInputForConnect, EventHandler as WalletEventHandler } from '../legacy/mod.js';
|
|
3
3
|
import type { ProviderProps } from '../types.js';
|
|
4
4
|
import type { UtxoActions } from '@hub3js/bip122';
|
|
5
5
|
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 getProviderCoreState(provider: Provider): WalletState;
|
|
12
|
-
export declare function getProviderEventInfo(provider: Provider, allBlockChains: ProviderProps['allBlockChains']): EventInfo;
|
|
13
|
-
export declare function getHubProviders(providers: VersionedProviders[]): Provider[];
|
|
14
10
|
export declare function findProviderByType(providers: Provider[], type: string): Provider | undefined;
|
|
15
11
|
export declare function mapHubEventsToLegacy(hub: Hub, event: Event, onUpdateState: WalletEventHandler, metadata: {
|
|
16
12
|
allBlockChains: ProviderProps['allBlockChains'];
|
package/dist/hub/utils.d.ts.map
CHANGED
|
@@ -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,
|
|
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.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 le=Object.defineProperty;var a=(e,t)=>le(e,"name",{value:t,configurable:!0});import Qe from"react";import{createContext as pe}from"react";var A="Context hasn't been initialized yet.",ue={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=pe(ue);import{pickVersion as Pe}from"@hub3js/core/utils";import{convertEvmBlockchainMetaToEvmChainInfo as Ee,formatAddressWithNetwork as ke,getBlockChainNameFromId as Ae,getSupportedChainsFromProvider as Ie}from"@rango-dev/internal-blockchains";import{AccountId as Te}from"caip";import{isEvmBlockchain as be}from"rango-types";var W=(d=>(d.CONNECTED="connected",d.CONNECTING="connecting",d.REACHABLE="reachable",d.INSTALLED="installed",d.ACCOUNTS="accounts",d.NETWORK="network",d.NAMESPACE_DISCONNECTED="namespace_disconnected",d.PROVIDER_DISCONNECTED="provider_disconnected",d.AUTO_CONNECT_FAILED="auto_connect_failed",d))(W||{});var E="hub-v1-last-connected-wallets";import{CAIP_BITCOIN_CHAIN_ID as me,CAIP_BITCOINCASH_CHAIN_ID as de,CAIP_DOGECOIN_CHAIN_ID as fe,CAIP_LITECOIN_CHAIN_ID as he,CAIP_ZCASH_CHAIN_ID as Ce}from"@hub3js/bip122";import{CAIP_NAMESPACE as ge}from"@hub3js/tvm";import{formatAddressWithNetwork as we}from"@rango-dev/internal-blockchains";import{CAIP_TRON_CHAIN_ID as ve}from"@rango-dev/wallets-core/namespaces/tron";import{AccountId as ye}from"caip";import{Err as R,Ok as K}from"ts-results";function Ne(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===me?"BTC":e.reference===Ce?"ZCASH":e.reference===he?"LTC":e.reference===fe?"DOGE":e.reference===de?"BCH":e.namespace.toLowerCase()===ge?"TON":e.namespace==="sui"||e.reference===ve?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}a(Ne,"mapCaipNamespaceToLegacyNetworkName");function S(e){let{chainId:t,address:n}=ye.parse(e),c=Ne(t);return we(n,c)}a(S,"fromAccountIdToLegacyAddressFormat");async function L(e){return e.reduce(async(t,n)=>{let c=await t;try{let s=await n();return[...c,new K(s)]}catch(s){return[...c,new R(s)]}},Promise.resolve([]))}a(L,"runSequentiallyWithoutFailure");function Y(e){return typeof e=="object"&&!Array.isArray(e)}a(Y,"isConnectResultEvm");function Q(e){return Array.isArray(e)}a(Q,"isConnectResultSolana");function V(e){let t=new Set,n=[],c=a((l,m)=>{n=n.filter(h=>h.key!==l?!0:(h.resolve(m),!1))},"removeKeyFromQueue"),s=a(async()=>{let l=n.find(p=>!t.has(p.key));if(!l)return;let{task:m,resolve:h,key:d}=l;t.add(d);try{let p=await m();h(new K(p))}catch(p){e?.onError&&e.onError(p,{removeCurrentKeyFromQueue:()=>c(d,new R(p))}),h(new R(p))}finally{let p=n.findIndex(r=>r.key===d);p>=0&&n.splice(p,1),t.delete(d),s()}},"processQueue");return a(async(l,m)=>new Promise(h=>{n.push({task:l,resolve:h,key:m}),s()}),"queueTask")}a(V,"createQueue");function G(e){return!!e.allBlockChains?.length&&!!e.autoConnect}a(G,"shouldTryAutoConnect");var T=class{static{a(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{a(this,"LastConnectedWalletsFromStorage")}#e;constructor(t){this.#e=t}addWallet(t,n){if(this.#e===E)return this.#t(t,n);throw new Error("Not implemented")}removeWallets(t){if(this.#e===E)return this.#n(t);throw new Error("Not implemented")}list(){if(this.#e===E)return this.#o();throw new Error("Not implemented")}removeNamespacesFromWallet(t,n){if(this.#e===E)return this.#r(t,n);throw new Error("Not implemented")}#o(){return new T().getItem(E)||{}}#t(t,n){let c=new T,s=c.getItem(this.#e)||{},C=n;if(s[t]){let l=s[t];C=l.concat(n.filter(m=>!l.some(h=>h.namespace===m.namespace)))}c.setItem(this.#e,{...s,[t]:C})}#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 l=(new T().getItem(this.#e)||{})[t]?.filter(m=>!n.includes(m.namespace));this.#n([t]),l?.length>0&&this.#t(t,l)}};function F(e){let[t]=e.state();return{connected:t().connected,connecting:t().connecting,installed:t().installed,accounts:null,network:null,reachable:!0}}a(F,"getProviderCoreState");function _(e,t){let n=e.info()?.metadata.properties?.find(c=>c.name==="details");return{supportedBlockchains:Ie(e,t),isContractWallet:n?.value?.isContractWallet??!1,isHub:!0}}a(_,"getProviderEventInfo");function O(e){return e.map(t=>{try{return Pe(t,"1.0.0")[1]}catch{throw new Error("Legacy providers aren't supported anymore. Expected a provider with version '1.0.0'.")}})}a(O,"getHubProviders");function D(e,t){return e.find(n=>n.id===t)}a(D,"findProviderByType");var Se=new I(E);function z(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 C=t.namespace,l=C?s.findByNamespace(C):void 0,m=null,h=null,d;if(l){let[o]=l.state();m=o().accounts,h=o().network,c.lastConnectAttemptParams[t.provider]&&(d=c.lastConnectAttemptParams[t.provider].find(i=>i.namespace===C)?.derivationPath)}let p={...F(s),accounts:m,network:h,derivationPath:d},r={..._(s,c.allBlockChains),namespace:C};switch(t.type){case"provider_detected":n(t.provider,"installed",!0,p,r);break;case"provider_connecting":n(t.provider,"connecting",t.value,p,r);break;case"provider_connected":n(t.provider,"connected",!0,p,r);break;case"provider_disconnected":n(t.provider,"provider_disconnected",t.provider,p,r),n(t.provider,"connected",!1,p,r),n(t.provider,"accounts",null,p,r);break;case"namespace_disconnected":Se.removeNamespacesFromWallet(t.provider,[t.namespace]),n(t.provider,"namespace_disconnected",t.namespace,p,{...r,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&n(t.provider,"namespace_disconnected",t.namespace,p,r);let o=[];r.isContractWallet?o=t.accounts.map(i=>{let{chainId:u,address:f}=Te.parse(i);if(typeof u=="string")throw new Error("Should be in CAIP format");let w=Ae(u.reference,r.supportedBlockchains);return w?ke(f,w):S(i)}):o=t.accounts.map(i=>S(i)),n(t.provider,"accounts",o,p,{...r,namespace:t.namespace})}break;case"namespace_network_switched":n(t.provider,"network",t.network,p,{...r,namespace:t.namespace});break}}a(z,"mapHubEventsToLegacy");function j(e,t){if(!e.network)return;let n=t.filter(be);return Ee(n)[e.network]}a(j,"convertNamespaceNetworkToEvmChainId");function X(e,t){return j(e,t)||e.network}a(X,"tryConvertNamespaceNetworkToChainInfo");function J(e){return Y(e)?{accounts:e.accounts,network:e.network}:Q(e)?{accounts:e,network:null}:{accounts:[e],network:null}}a(J,"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(l=>l.id===s.id)||e.remove(s.id)})}a(Z,"synchronizeHubWithConfigProviders");function ee(e){return e.namespaceId==="Solana"}a(ee,"isSolanaNamespace");function B(e){return e.namespaceId==="EVM"}a(B,"isEvmNamespace");function te(e){return e.namespaceId==="UTXO"}a(te,"isUtxoNamespace");import{isUserRejectionError as je,WalletConnectionError as Me}from"@hub3js/std/utils";import{getSupportedChainsFromNamespace as Ue,getSupportedChainsFromProvider as qe}from"@rango-dev/internal-blockchains";import{useEffect as M,useRef as U,useState as $e}from"react";import{Ok as Ke,Result as Ye}from"ts-results";import{debug as xe}from"@rango-dev/logging-core";function ne(e,t,n){let c=n instanceof Error?n:new Error(String(n));xe(c,{context:{method:e,args:t},tags:{type:"wallet-error"}})}a(ne,"logError");function We(e,t){return(...n)=>{try{let c=t(...n);return c instanceof Promise?c.catch(s=>{throw ne(e,n,s),s}):c}catch(c){throw ne(e,n,c),c}}}a(We,"withErrorLogging");function oe(e){let t=Object.entries(e).map(([n,c])=>[n,We(n,c.bind(e))]);return Object.fromEntries(t)}a(oe,"withErrorLoggingApi");import{Result as Be}from"ts-results";function He(e){return e.namespace==="EVM"}a(He,"isEvmNamespaceInput");var H=new I(E);async function Re(e,t,n){let{getHub:c,allBlockChains:s,onUpdateState:C}=n,l=c().get(e);if(!l)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 m=[];t.forEach(o=>{let i=o.namespace,u=l.findByNamespace(i);if(!u)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${o.namespace})`);m.push([o,u])});let h=m.map(([o,i])=>{let f=(He(o)?j(o,s||[]):void 0)||o.network;return async()=>{let w;B(i)?w=a(async()=>i.connect(f),"connectNamespacePromise"):w=a(async()=>i.connect(),"connectNamespacePromise");try{await w()}catch(y){throw y instanceof Error?y:new Error(y)}}}),d=await L(h);d.forEach(o=>{o.err&&C?.(e,"auto_connect_failed",o.val,F(l),_(l,s))});let p=m.filter((o,i)=>d[i].err).map(o=>o[0]);if(p.length>0&&H.removeNamespacesFromWallet(e,p.map(o=>o.namespace)),!d.some(o=>o.ok))throw new Error(`No namespace connected for ${e}`);return Be.all(...d.filter(o=>o.ok)).unwrap()}a(Re,"eagerConnect");async function Le(e,t){let n=[],c=[],s=[],C=[];e.forEach(m=>{let h=t.findByNamespace(m.namespace);h?(n.push(m),C.push(async()=>await h.canEagerConnect())):s.push(m)});let l=await L(C);return n.forEach((m,h)=>{l[h].ok&&l[h].val?c.push(m):s.push(m)}),{successNamespaces:c,failedNamespaces:s}}a(Le,"tryRunCanEagerConnect");async function re(e){let{getHub:t,allBlockChains:n,wallets:c,onUpdateState:s}=e,C=H.list(),l=Object.keys(C),m=[];if(l.length){let h=[],d=c?.map(p=>typeof p=="string"?p:p.id);l.forEach(async p=>{if(d&&!d.includes(p)){console.warn("Trying to run auto connect for a wallet which is not included in config. Desired wallet:",p),m.push(p);return}let r=t().get(p),o=C[p].map(f=>({namespace:f.namespace,network:f.network}));if(!o.length||!r){m.push(p);return}let{successNamespaces:i,failedNamespaces:u}=await Le(o,r);if(i.length)u.length&&H.removeNamespacesFromWallet(r.id,u.map(f=>f.namespace));else{m.push(p);return}h.push(Re(p,i,{allBlockChains:n,getHub:t,onUpdateState:s}).catch(f=>console.warn(f)))}),H.removeWallets(m),await Promise.all(h)}}a(re,"autoConnect");import{useEffect as Fe,useRef as _e}from"react";function ae(e){let t=_e(!1);Fe(()=>{G(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}a(ae,"useAutoConnect");import{createStore as Oe,Hub as De}from"@hub3js/core";import{useRef as se}from"react";function ce(e){let t=se(null),n=se(null);function c(){let l=new De({store:s()});return e.forEach(m=>{l.add(m.id,m)}),n.current=l,l}a(c,"createHub");function s(){if(t.current!==null)return t.current;let l=Oe();return t.current=l,l}a(s,"getStore");function C(){let l=n.current?.getAll();return!n.current||!l?c():(Z(n.current,e),n.current)}return a(C,"getHub"),{getStore:s,getHub:C}}a(ce,"useHubRefs");function q(e){let{getStore:t,getHub:n}=ce(e.providers),[,c]=$e(0),s=U({onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}),C=U(!1),l=U({}),m=a((r,o)=>{l.current[r]=o||[]},"updateLastConnectAttemptParams"),h=V({onError:(r,o)=>{let i=r instanceof Me?r.cause:r;je(i)&&o.removeCurrentKeyFromQueue()}});M(()=>{s.current={onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains}},[e]),M(()=>{t().subscribe(r=>{if(s.current.onUpdateState)try{z(n(),r,s.current.onUpdateState,{allBlockChains:s.current.allBlockChains,lastConnectAttemptParams:l.current})}catch(o){console.error(o)}c(o=>o+1)}).flushEvents()},[]),M(()=>{C.current||!e.allBlockChains?.length||(n().init(e.configs?.walletOptions),c(r=>r+1),C.current=!0)},[e.allBlockChains,e.configs?.walletOptions]),ae({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{re({allBlockChains:e.allBlockChains,getHub:n,wallets:e.configs?.wallets,onUpdateState:e.onUpdateState})}});let d=new I(E);return oe({canSwitchNetworkTo(r,o,i){let u=n().get(r);if(!u)return!1;if(!i)throw new Error("Passing namespace to `canSwitchNetworkTo` is required.");let f=u.findByNamespace(i.namespace);if(!f)throw new Error(`We couldn't find any matched namespace on your request provider. (requested namespace: ${i.namespace})`);if(!("canSwitchNetwork"in f))return!1;let w=u.info()?.metadata?.properties?.find(N=>N.name==="namespaces");if(!s.current.allBlockChains)throw new Error("Blockchains are not available");let y=w?.value.data.find(N=>N.value===i.namespace);if(!y)throw new Error(`NamespaceMeta is not defined for requested namespace: ${i.namespace}`);let P=Ue(y,s.current.allBlockChains);return f.canSwitchNetwork({network:o,supportedChains:P})},async connect(r,o){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'connect'.`);if(!o)throw new Error("Passing namespace to `connect` is required.");m(r,o);let u=[];o.forEach(g=>{let v=g.namespace,k=i.findByNamespace(v);if(!k)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${g.namespace})`);u.push([g,k])});let f=u.map(async([g,v])=>{let k=X(g,e.allBlockChains||[]),b;return ee(v)?b=a(async()=>v.connect({derivationPath:g.derivationPath}),"connectNamespacePromise"):B(v)?b=a(async()=>v.connect(k,{derivationPath:g.derivationPath}),"connectNamespacePromise"):te(v)?b=a(async()=>v.connect({derivationPath:g.derivationPath}),"connectNamespacePromise"):b=a(async()=>v.connect(),"connectNamespacePromise"),h(a(async()=>b().then(J).then(ie=>({response:ie,input:{namespace:g.namespace,network:g.network,supportsEagerConnect:"canEagerConnect"in v}})),"connectNamespaceProcess"),r)}),w=await Promise.all(f),y=w.filter(g=>g.ok).filter(g=>g.val.input.supportsEagerConnect).map(g=>({namespace:g.val.input.namespace,network:g.val.input.network}));y.length>0&&d.addWallet(r,y);let P=w.map(g=>g.andThen(v=>new Ke(v.response))),N=Ye.all(...P);if(N.err)throw N.val;return N.unwrap()},async disconnect(r,o){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'disconnect'.`);i.getAll().forEach(u=>{let f=!o||o.includes(u.namespaceId),w=u.state()[0]().connected;if(f&&w)return u.disconnect()}),e.autoConnect&&(o?d.removeNamespacesFromWallet(r,o):d.removeWallets([r]))},async disconnectAll(){let r=Array.from(n().getAll().values()).map(async o=>this.disconnect(o.id));return await Promise.allSettled(r)},async getSigners(r){let o=n().get(r);if(!o)throw new Error(`You should add ${r} to provider first.`);let i=o.info();if(!i)throw new Error("Your provider should have required `info`.");let f=i.metadata.properties?.find(w=>w.name==="signers");if(!f)throw new Error("Your provider should contain signers property.");return f.value.getSigners()},getWalletInfo(r){let o=n().get(r);if(!o)throw new Error(`You should add ${r} to provider first.`);let i=o.info();if(!i)throw new Error("Your provider should have required `info`.");let u={DEFAULT:""},{metadata:f}=i,{extensions:w}=f;Object.keys(w).forEach(v=>{let k=v;if(k==="homepage"&&(u.DEFAULT=w[k]||""),["firefox","chrome","brave","edge"].includes(k)){let $=k.toUpperCase();u[$]=w[k]||""}});let y=f.properties,P=y?.find(v=>v.name==="namespaces"),N=y?.find(v=>v.name==="derivationPath"),g=y?.find(v=>v.name==="details");return{name:f.name,img:f.icon,installLink:u,color:"red",supportedChains:qe(o,s.current.allBlockChains),isContractWallet:g?.value?.isContractWallet,mobileWallet:g?.value?.mobileWallet,showOnMobile:g?.value?.showOnMobile,needsNamespace:P?.value,needsDerivationPath:N?.value,isHub:!0,properties:f.properties}},state(r){let o=n().state(),i=n().get(r),u=o[r];if(!u||!i)return{connected:!1,connecting:!1,installed:!1,reachable:!1,accounts:null,network:null,namespaces:new Map};let f=u.namespaces.filter(P=>P.connected).flatMap(P=>P.accounts?.map(N=>S(N))).filter(P=>!!P),w=new Map(Array.from(i.getAll(),([P,N])=>[N.namespaceId,N.state()[0]()]));return{connected:u.connected,connecting:u.connecting,installed:u.installed,reachable:!0,accounts:f,network:null,namespaces:w}},async suggestAndConnect(r,o){let i=n().get(r);if(!i)throw new Error(`You should add ${r} to provider first then call 'suggestAndConnect'.`);let u=i.findByNamespace(o.namespace);throw u?"suggest"in u?o.network?new Error(`Suggest has not been implemented for given chain: ${o.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: ${o.namespace})`)},hubProvider(r){let o=D(e.providers,r);if(!o)throw new Error(`You're trying to access ${r} provider which is not found in hub providers. it may not be registered yet.`);return o}})}a(q,"useHubAdapter");function Ve(e){let t=q({...e,providers:O(e.providers)});return Qe.createElement(x.Provider,{value:t},e.children)}a(Ve,"Provider");var Ge=Ve;import{useContext as ze}from"react";function Xe(){let e=ze(x);if(!e)throw Error("useWallet can only be used within the Provider component");return e}a(Xe,"useWallets");export{W as Events,Ge as Provider,Xe as useWallets};
|
|
1
|
+
var he=Object.defineProperty;var o=(e,t)=>he(e,"name",{value:t,configurable:!0});import Je from"react";import{createContext as Ee}from"react";var A="Context hasn't been initialized yet.",ye={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=Ee(ye);import{convertEvmBlockchainMetaToEvmChainInfo as xe,formatAddressWithNetwork as be,getBlockChainNameFromId as Se,getSupportedChainsFromProvider as Le}from"@rango-dev/internal-blockchains";import{AccountId as De}from"caip";import{isEvmBlockchain as _e}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",X=[b.LEDGER,b.TREZOR,b.LEDGER_WALLET,b.WALLET_CONNECT_2,b.TON_CONNECT,b.DEFAULT];import{CAIP_BITCOIN_CHAIN_ID as ve,CAIP_BITCOINCASH_CHAIN_ID as we,CAIP_DOGECOIN_CHAIN_ID as Ne,CAIP_LITECOIN_CHAIN_ID as ge,CAIP_ZCASH_CHAIN_ID as Pe}from"@hub3js/bip122";import{CAIP_TRON_CHAIN_ID as Te}from"@hub3js/tron";import{CAIP_NAMESPACE as ke}from"@hub3js/tvm";import{formatAddressWithNetwork as Ae}from"@rango-dev/internal-blockchains";import{AccountId as We}from"caip";import{Err as U,Ok as Z}from"ts-results";function Ie(e){return typeof e=="string"?e:["solana","xrpl","stellar"].includes(e.namespace.toLowerCase())?e.namespace.toUpperCase():e.namespace.toLowerCase()==="eip155"?"ETH":e.reference===ve?"BTC":e.reference===Pe?"ZCASH":e.reference===ge?"LTC":e.reference===Ne?"DOGE":e.reference===we?"BCH":e.namespace.toLowerCase()===ke?"TON":e.namespace==="sui"||e.reference===Te?e.reference.toUpperCase():e.namespace==="starknet"?e.namespace.toUpperCase():e.reference}o(Ie,"mapCaipNamespaceToLegacyNetworkName");function L(e){let{chainId:t,address:n}=We.parse(e),l=Ie(t);return Ae(n,l)}o(L,"fromAccountIdToLegacyAddressFormat");async function q(e){return e.reduce(async(t,n)=>{let l=await t;try{let s=await n();return[...l,new Z(s)]}catch(s){return[...l,new U(s)]}},Promise.resolve([]))}o(q,"runSequentiallyWithoutFailure");function J(e){return typeof e=="object"&&!Array.isArray(e)}o(J,"isConnectResultEvm");function ee(e){return Array.isArray(e)}o(ee,"isConnectResultSolana");function te(e){let t=new Set,n=[],l=o((u,d)=>{n=n.filter(m=>m.key!==u?!0:(m.resolve(d),!1))},"removeKeyFromQueue"),s=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 Z(f))}catch(f){e?.onError&&e.onError(f,{removeCurrentKeyFromQueue:()=>l(w,new U(f))}),m(new U(f))}finally{let f=n.findIndex(a=>a.key===w);f>=0&&n.splice(f,1),t.delete(w),s()}},"processQueue");return o(async(u,d)=>new Promise(m=>{n.push({task:u,resolve:m,key:d}),s()}),"queueTask")}o(te,"createQueue");function ne(e){return!!e.allBlockChains?.length&&!!e.autoConnect}o(ne,"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,s=l.getItem(this.#e)||{},C=n;if(s[t]){let u=s[t];C=u.concat(n.filter(d=>!u.some(m=>m.namespace===d.namespace)))}l.setItem(this.#e,{...s,[t]:C})}#n(t){let n=new I,l=n.getItem(this.#e)||{};if(!t){n.setItem(this.#e,{});return}t.forEach(s=>{l[s]&&delete l[s]}),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)}};function K(e,t){return e.find(n=>n.id===t)}o(K,"findProviderByType");var Oe=new W(P);function oe(e,t,n,l){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 C=t.namespace,u=C?s.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]=s.state(),a={connected:f().connected,connecting:f().connecting,installed:f().installed,accounts:d,network:m,reachable:!0,derivationPath:w},r=s.info()?.metadata.properties?.find(i=>i.name==="details"),c={supportedBlockchains:Le(s,l.allBlockChains),isContractWallet:r?.value?.isContractWallet??!1,isHub:!0,namespace:C};switch(t.type){case"provider_detected":n(t.provider,"installed",!0,a,c);break;case"provider_connecting":n(t.provider,"connecting",t.value,a,c);break;case"provider_connected":n(t.provider,"connected",!0,a,c);break;case"provider_disconnected":n(t.provider,"provider_disconnected",t.provider,a,c),n(t.provider,"connected",!1,a,c),n(t.provider,"accounts",null,a,c);break;case"namespace_disconnected":Oe.removeNamespacesFromWallet(t.provider,[t.namespace]),n(t.provider,"namespace_disconnected",t.namespace,a,{...c,namespace:t.namespace});break;case"namespace_connected":case"namespace_account_switched":{t.type==="namespace_account_switched"&&n(t.provider,"namespace_disconnected",t.namespace,a,c);let i=[];c.isContractWallet?i=t.accounts.map(p=>{let{chainId:E,address:N}=De.parse(p);if(typeof E=="string")throw new Error("Should be in CAIP format");let y=Se(E.reference,c.supportedBlockchains);return y?be(N,y):L(p)}):i=t.accounts.map(p=>L(p)),n(t.provider,"accounts",i,a,{...c,namespace:t.namespace})}break;case"namespace_network_switched":n(t.provider,"network",t.network,a,{...c,namespace:t.namespace});break}}o(oe,"mapHubEventsToLegacy");function $(e,t){if(!e.network)return;let n=t.filter(_e);return xe(n)[e.network]}o($,"convertNamespaceNetworkToEvmChainId");function re(e,t){return $(e,t)||e.network}o(re,"tryConvertNamespaceNetworkToChainInfo");function R(e){return J(e)?{accounts:e.accounts,network:e.network}:ee(e)?{accounts:e,network:null}:{accounts:[e],network:null}}o(R,"transformHubResultToLegacyResult");function ae(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(u=>u.id===s.id)||e.remove(s.id)})}o(ae,"synchronizeHubWithConfigProviders");function se(e){return e.namespaceId==="Solana"}o(se,"isSolanaNamespace");function F(e){return e.namespaceId==="EVM"}o(F,"isEvmNamespace");function ce(e){return e.namespaceId==="UTXO"}o(ce,"isUtxoNamespace");import{utils as Ye}from"@hub3js/evm";import{getSupportedChainsFromNamespace as Qe,getSupportedChainsFromProvider as Ve}from"@rango-dev/internal-blockchains";import{useEffect as Y,useRef as Q,useState as ze}from"react";import{Ok as Xe,Result as Ze}from"ts-results";import{getBlockChainNameFromId as Be}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||{}),ie=new Set;function le(e,t){ie.has(t)||X.includes(t)||(ie.add(t),e.emit(T,{type:"walletDetected",payload:{walletName:t}}))}o(le,"emitWalletDetectedOnce");function j(e,t){return e?Be(e,t||[]):null}o(j,"toBlockchainName");import{debug as Re}from"@rango-dev/logging-core";function pe(e,t,n){let l=n instanceof Error?n:new Error(String(n));Re(l,{context:{method:e,args:t},tags:{type:"wallet-error"}})}o(pe,"logError");function Fe(e,t){return(...n)=>{try{let l=t(...n);return l instanceof Promise?l.catch(s=>{throw pe(e,n,s),s}):l}catch(l){throw pe(e,n,l),l}}}o(Fe,"withErrorLogging");function ue(e){let t=Object.entries(e).map(([n,l])=>[n,Fe(n,l.bind(e))]);return Object.fromEntries(t)}o(ue,"withErrorLoggingApi");import{Result as He}from"ts-results";function G(e,t){return{walletName:e,namespace:t.namespace,chain:t.network||null,origin:"auto"}}o(G,"autoConnectEventPayload");function je(e){return e.namespace==="EVM"}o(je,"isEvmNamespaceInput");var M=new W(P);async function Me(e,t,n){let{getHub:l,allBlockChains:s,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(r=>{let c=r.namespace,i=u.findByNamespace(c);if(!i)throw new Error(`We couldn't find any provider matched with your request namespace. (requested namespace: ${r.namespace})`);d.push([r,i])});let m=d.map(([r,c])=>{let p=(je(r)?$(r,s||[]):void 0)||r.network;return async()=>{let E;F(c)?E=o(async()=>c.connect(p),"connectNamespacePromise"):E=o(async()=>c.connect(),"connectNamespacePromise");let N=G(e,r);try{let y=await E();C.emit(T,{type:"walletConnected",payload:{...N,chain:j(R(y).network,s)}})}catch(y){throw C.emit(T,{type:"walletConnectFailed",payload:N}),y instanceof Error?y:new Error(y)}}}),w=await q(m),f=d.filter((r,c)=>w[c].err).map(r=>r[0]);if(f.length>0&&M.removeNamespacesFromWallet(e,f.map(r=>r.namespace)),!w.some(r=>r.ok))throw new Error(`No namespace connected for ${e}`);return He.all(...w.filter(r=>r.ok)).unwrap()}o(Me,"eagerConnect");async function Ue(e,t){let n=[],l=[],s=[],C=[];e.forEach(d=>{let m=t.findByNamespace(d.namespace);m?(n.push(d),C.push(async()=>await m.canEagerConnect())):s.push(d)});let u=await q(C);return n.forEach((d,m)=>{u[m].ok&&u[m].val?l.push(d):s.push(d)}),{successNamespaces:l,failedNamespaces:s}}o(Ue,"tryRunCanEagerConnect");async function me(e){let{getHub:t,allBlockChains:n,wallets:l,emitter:s}=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 a=t().get(f),r=C[f].map(p=>({namespace:p.namespace,network:p.network}));if(!r.length||!a){d.push(f);return}r.forEach(p=>{s.emit(T,{type:"walletConnectInitiated",payload:G(f,p)})});let{successNamespaces:c,failedNamespaces:i}=await Ue(r,a);if(i.forEach(p=>{s.emit(T,{type:"walletConnectFailed",payload:G(f,p)})}),c.length)i.length&&M.removeNamespacesFromWallet(a.id,i.map(p=>p.namespace));else{d.push(f);return}m.push(Me(f,c,{allBlockChains:n,getHub:t,emitter:s}).catch(p=>console.warn(p)))}),M.removeWallets(d),await Promise.all(m)}}o(me,"autoConnect");import{useEffect as qe,useRef as Ke}from"react";function de(e){let t=Ke(!1);qe(()=>{ne(e)&&!t.current&&(t.current=!0,e.autoConnectHandler())},[e.autoConnect,e.allBlockChains])}o(de,"useAutoConnect");import{createStore as $e,Hub as Ge}from"@hub3js/core";import{useRef as fe}from"react";function Ce(e){let t=fe(null),n=fe(null);function l(){let u=new Ge({store:s()});return e.forEach(d=>{u.add(d.id,d)}),n.current=u,u}o(l,"createHub");function s(){if(t.current!==null)return t.current;let u=$e();return t.current=u,u}o(s,"getStore");function C(){let u=n.current?.getAll();return!n.current||!u?l():(ae(n.current,e),n.current)}return o(C,"getHub"),{getStore:s,getHub:C}}o(Ce,"useHubRefs");function V(e){let{getStore:t,getHub:n}=Ce(e.providers),[,l]=ze(0),s=Q({onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains,emitter:e.emitter}),C=Q(!1),u=Q({}),d=o((a,r)=>{u.current[a]=r||[]},"updateLastConnectAttemptParams"),m=te({onError:(a,r)=>{Ye.isUserRejectionError(a)&&r.removeCurrentKeyFromQueue()}});Y(()=>{s.current={onUpdateState:e.onUpdateState,allBlockChains:e.allBlockChains,emitter:e.emitter}},[e]),Y(()=>{let a=o((c,i,p,E,N)=>{i==="installed"&&E.installed&&le(s.current.emitter,c),s.current.onUpdateState?.(c,i,p,E,N)},"onUpdateState"),r=o(c=>{try{oe(n(),c,a,{allBlockChains:s.current.allBlockChains,lastConnectAttemptParams:u.current})}catch(i){console.error(i)}l(i=>i+1)},"onStoreEvent");t().subscribe(r).flushEvents()},[]),Y(()=>{C.current||!e.allBlockChains?.length||(n().init(e.configs?.walletOptions),l(a=>a+1),C.current=!0)},[e.allBlockChains,e.configs?.walletOptions]),de({autoConnect:e.autoConnect,allBlockChains:e.allBlockChains,autoConnectHandler:()=>{me({allBlockChains:e.allBlockChains,getHub:n,wallets:e.configs?.wallets,emitter:s.current.emitter})}});let w=new W(P);return ue({canSwitchNetworkTo(a,r,c){let i=n().get(a);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(!s.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=Qe(N,s.current.allBlockChains);return p.canSwitchNetwork({network:r,supportedChains:y})},async connect(a,r){let c=n().get(a);if(!c)throw new Error(`You should add ${a} to provider first then call 'connect'.`);if(!r)throw new Error("Passing namespace to `connect` is required.");d(a,r);let i=[];r.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=re(h,e.allBlockChains||[]),x;se(v)?x=o(async()=>v.connect({derivationPath:h.derivationPath}),"connectNamespacePromise"):F(v)?x=o(async()=>v.connect(k,{derivationPath:h.derivationPath}),"connectNamespacePromise"):ce(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:a,namespace:h.namespace,origin:"manual"},z=h.network||null;e.emitter.emit(T,{type:"walletConnectInitiated",payload:{...S,chain:z}});try{let _=await D();return e.emitter.emit(T,{type:"walletConnected",payload:{...S,chain:j(_.response.network,e.allBlockChains)}}),_}catch(_){throw e.emitter.emit(T,{type:"walletConnectFailed",payload:{...S,chain:z}}),_}},"connectNamespaceProcessWithEvents"),a)}),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(a,N);let y=E.map(h=>h.andThen(v=>new Xe(v.response))),g=Ze.all(...y);if(g.err)throw g.val;return g.unwrap()},async disconnect(a,r){let c=n().get(a);if(!c)throw new Error(`You should add ${a} to provider first then call 'disconnect'.`);c.getAll().forEach(i=>{let p=!r||r.includes(i.namespaceId),E=i.state()[0]().connected;if(p&&E)return e.emitter.emit(T,{type:"walletDisconnected",payload:{walletName:a,namespace:i.namespaceId}}),i.disconnect()}),e.autoConnect&&(r?w.removeNamespacesFromWallet(a,r):w.removeWallets([a]))},async disconnectAll(){let a=Array.from(n().getAll().values()).map(async r=>this.disconnect(r.id));return await Promise.allSettled(a)},async getSigners(a){let r=n().get(a);if(!r)throw new Error(`You should add ${a} to provider first.`);let c=r.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(a){let r=n().get(a);if(!r)throw new Error(`You should add ${a} to provider first.`);let c=r.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:Ve(r,s.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(a){let r=n().state(),c=n().get(a),i=r[a];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(a,r){let c=n().get(a);if(!c)throw new Error(`You should add ${a} to provider first then call 'suggestAndConnect'.`);let i=c.findByNamespace(r.namespace);throw i?"suggest"in i?r.network?new Error(`Suggest has not been implemented for given chain: ${r.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: ${r.namespace})`)},hubProvider(a){let r=K(e.providers,a);if(!r)throw new Error(`You're trying to access ${a} provider which is not found in hub providers. it may not be registered yet.`);return r}})}o(V,"useHubAdapter");function et(e){let t=V(e);return Je.createElement(O.Provider,{value:t},e.children)}o(et,"Provider");var tt=et;import{useContext as nt}from"react";function ot(){let e=nt(O);if(!e)throw Error("useWallet can only be used within the Provider component");return e}o(ot,"useWallets");export{B as Events,tt as Provider,T as WalletEventChannel,H as WalletEventTypes,ot as useWallets};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|