@sodax/wallet-sdk-react 0.0.1-rc.5 → 0.0.1-rc.6
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/README.md +21 -35
- package/dist/index.cjs +260 -397
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +37 -15540
- package/dist/index.d.ts +37 -15540
- package/dist/index.mjs +255 -373
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/Hydrate.ts +62 -0
- package/src/SodaxWalletProvider.tsx +18 -20
- package/src/actions/getXChainType.ts +2 -4
- package/src/core/XService.ts +4 -10
- package/src/hooks/index.ts +1 -1
- package/src/hooks/useEvmSwitchChain.ts +2 -3
- package/src/hooks/useWalletProvider.ts +23 -18
- package/src/hooks/useXBalances.ts +1 -1
- package/src/hooks/useXConnect.ts +1 -2
- package/src/hooks/useXSignMessage.ts +82 -0
- package/src/index.ts +0 -1
- package/src/types/index.ts +0 -23
- package/src/useXWagmiStore.ts +91 -0
- package/src/utils/index.ts +2 -16
- package/src/xchains/evm/EvmXConnector.ts +1 -1
- package/src/xchains/evm/EvmXService.ts +32 -75
- package/src/xchains/icon/IconXService.ts +2 -2
- package/src/xchains/icon/actions.ts +28 -0
- package/src/xchains/injective/InjectiveKelprXConnector.ts +1 -1
- package/src/xchains/injective/InjectiveMetamaskXConnector.ts +1 -1
- package/src/xchains/injective/actions.ts +25 -0
- package/src/xchains/stellar/StellarXService.ts +1 -2
- package/src/xchains/stellar/actions.ts +24 -0
- package/src/constants/index.ts +0 -1
- package/src/constants/xChains.ts +0 -164
- package/src/hooks/useWalletProviderOptions.ts +0 -51
- package/src/useXWagmiStore.tsx +0 -164
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/xChains.ts","../src/actions/getXChainType.ts","../src/actions/getXService.ts","../src/core/XService.ts","../src/core/XConnector.ts","../src/utils/index.ts","../src/xchains/evm/EvmXService.ts","../src/xchains/evm/EvmXConnector.ts","../src/xchains/icon/IconXService.ts","../src/xchains/icon/iconex/index.tsx","../src/xchains/icon/IconHanaXConnector.ts","../src/xchains/injective/InjectiveXService.ts","../src/xchains/injective/InjectiveKelprXConnector.ts","../src/xchains/injective/InjectiveMetamaskXConnector.ts","../src/xchains/injective/utils.ts","../src/xchains/solana/SolanaXService.ts","../src/xchains/solana/SolanaXConnector.ts","../src/xchains/stellar/CustomSorobanServer.ts","../src/xchains/stellar/utils.ts","../src/xchains/stellar/StellarXService.ts","../src/xchains/stellar/StellarWalletsKitXConnector.ts","../src/xchains/sui/SuiXService.ts","../src/xchains/sui/SuiXConnector.ts","../src/xchains/solana/hooks/useAnchorProvider.tsx","../src/useXWagmiStore.tsx","../src/hooks/useXConnection.ts","../src/hooks/useXAccount.ts","../src/hooks/useXAccounts.ts","../src/hooks/useXConnect.ts","../src/xchains/stellar/useStellarXConnectors.ts","../src/hooks/useXService.ts","../src/hooks/useXConnectors.ts","../src/hooks/useXDisconnect.ts","../src/hooks/useXBalances.ts","../src/hooks/useWalletProviderOptions.ts","../src/hooks/useEthereumChainId.ts","../src/hooks/useEvmSwitchChain.ts","../src/hooks/useWalletProvider.ts","../src/SodaxWalletProvider.tsx","../src/types/index.ts"],"names":["address","xChainMap","hyper","avalanche","arbitrum","base","bsc","sonic","optimism","polygon","nibiru","InjectiveChainId","mainnet","Wallet","state","useConnection","useWallet","React","useCurrentAccount","useCurrentWallet","useMemo","useAccount","useQuery","getNetworkEndpoints","Network","useEffect","switchEthereumChain","useCallback","usePublicClient","useWalletClient","SuiWalletProvider","SolanaConnectionProvider","SolanaWalletProvider","WalletId"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { XChain, ChainId } from '@sodax/types';\n\nexport const icon: XChain = {\n id: 1,\n name: 'ICON',\n xChainId: '0x1.icon',\n xChainType: 'ICON',\n testnet: false,\n};\n\nexport const avalanche: XChain = {\n id: 43_114,\n name: 'Avalanche',\n xChainId: '0xa86a.avax',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const bsc: XChain = {\n id: 56,\n name: 'BNB Chain',\n xChainId: '0x38.bsc',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const arbitrum: XChain = {\n id: 42161,\n name: 'Arbitrum',\n xChainId: '0xa4b1.arbitrum',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const base: XChain = {\n id: 8453,\n name: 'Base',\n xChainId: '0x2105.base',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const injective: XChain = {\n id: 'injective-1',\n name: 'Injective',\n xChainId: 'injective-1',\n xChainType: 'INJECTIVE',\n testnet: false,\n};\n\nexport const stellar: XChain = {\n id: 'stellar',\n name: 'Stellar',\n xChainId: 'stellar',\n xChainType: 'STELLAR',\n testnet: false,\n};\n\nexport const sui: XChain = {\n id: 'sui',\n name: 'Sui',\n xChainId: 'sui',\n xChainType: 'SUI',\n testnet: false,\n};\n\nexport const solana: XChain = {\n id: 'solana',\n name: 'Solana',\n xChainId: 'solana',\n xChainType: 'SOLANA',\n testnet: false,\n};\n\nexport const optimism: XChain = {\n id: 10,\n name: 'Optimism',\n xChainId: '0xa.optimism',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const sonic: XChain = {\n id: 146,\n name: 'Sonic',\n xChainId: 'sonic',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const polygon: XChain = {\n id: 137,\n name: 'Polygon',\n xChainId: '0x89.polygon',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const nibiru: XChain = {\n id: 6900,\n name: 'Nibiru',\n xChainId: 'nibiru',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const hyper: XChain = {\n id: 999,\n name: 'HyperEVM',\n xChainId: 'hyper',\n xChainType: 'EVM',\n testnet: false,\n};\n\nexport const lightlink: XChain = {\n id: 1890,\n name: 'Lightlink',\n xChainId: 'lightlink',\n xChainType: 'EVM',\n testnet: false,\n};\n\n// the order is important, using manual order to display in the UI\nexport const xChainMap: { [key in ChainId]: XChain } = {\n '0x1.icon': icon,\n '0xa4b1.arbitrum': arbitrum,\n '0xa86a.avax': avalanche,\n '0x38.bsc': bsc,\n '0x2105.base': base,\n '0xa.optimism': optimism,\n 'injective-1': injective,\n stellar: stellar,\n sui: sui,\n solana: solana,\n sonic: sonic,\n '0x89.polygon': polygon,\n nibiru: nibiru,\n hyper: hyper,\n lightlink: lightlink,\n};\n\n/**\n * List of all supported chains in Sodax ecosystem\n *\n * Currently supported chains:\n * - EVM chains:\n * - Arbitrum (0xa4b1.arbitrum)\n * - Avalanche (0xa86a.avax)\n * - Base (0x2105.base)\n * - BSC (0x38.bsc)\n * - Optimism (0xa.optimism)\n * - Polygon (0x89.polygon)\n * - Sonic (sonic)\n * - Nibiru (nibiru)\n * - ICON chain: 0x1.icon\n * - Sui chain: sui\n * - Solana chain: solana\n * - Stellar chain: stellar\n * - Injective chain: injective-1\n * - Nibiru chain: nibiru\n * - HyperEVM chain: hyper\n */\n\nexport const xChains = Object.values(xChainMap);\n","import type { ChainId, ChainType } from '@sodax/types';\n\nimport { xChainMap } from '@/constants/xChains';\n\nexport function getXChainType(xChainId: ChainId | undefined): ChainType | undefined {\n if (!xChainId) {\n return undefined;\n }\n return xChainMap[xChainId].xChainType;\n}\n","import type { ChainType } from '@sodax/types';\n\nimport { IconXService, InjectiveXService, SolanaXService, StellarXService } from '..';\nimport { SuiXService } from '..';\nimport { EvmXService } from '..';\nimport type { XService } from '../core';\n\nexport function getXService(xChainType: ChainType): XService {\n switch (xChainType) {\n case 'EVM':\n return EvmXService.getInstance();\n case 'SUI':\n return SuiXService.getInstance();\n case 'SOLANA':\n return SolanaXService.getInstance();\n case 'ICON':\n return IconXService.getInstance();\n case 'INJECTIVE':\n return InjectiveXService.getInstance();\n case 'STELLAR':\n return StellarXService.getInstance();\n default:\n throw new Error(`Unsupported chain type: ${xChainType}`);\n }\n}\n","import type { ChainId, ChainType, XToken } from '@sodax/types';\nimport type { XConnector } from './XConnector';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: XConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @param xChainId The chain ID to query\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken, xChainId: ChainId): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @param xChainId The chain ID to query\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(\n address: string | undefined,\n xTokens: XToken[],\n xChainId: ChainId,\n ): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken, xChainId);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): XConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: XConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): XConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '../types';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n private readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n private readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n}\n","import type { ChainId, XToken } from '@sodax/types';\n\nexport const isNativeToken = (xToken: XToken) => {\n const nativeAddresses = [\n 'cx0000000000000000000000000000000000000000',\n '0x0000000000000000000000000000000000000000',\n 'inj',\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n 'hx0000000000000000000000000000000000000000',\n '11111111111111111111111111111111', // solana\n 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA', // stellar,\n ];\n\n return nativeAddresses.includes(xToken.address);\n};\n\n// TODO: remove this? move to dapp-kit?\nexport const getWagmiChainId = (xChainId: ChainId): number => {\n const xChainMap = {\n '0xa869.fuji': 43113,\n 'sonic-blaze': 57054,\n sonic: 146,\n '0xa86a.avax': 43114,\n '0x38.bsc': 56,\n '0xa4b1.arbitrum': 42161,\n '0x2105.base': 8453,\n '0xa.optimism': 10,\n '0x89.polygon': 137,\n hyper: 999,\n lightlink: 1890,\n };\n return xChainMap[xChainId] ?? 0;\n};\n","import { XService } from '@/core/XService';\nimport type { ChainId, XToken } from '@sodax/types';\nimport type { EVMConfig } from '@/types';\nimport { getWagmiChainId, isNativeToken } from '@/utils';\n\nimport { type Address, type PublicClient, type WalletClient, defineChain, erc20Abi } from 'viem';\nimport { getPublicClient, getWalletClient } from 'wagmi/actions';\nimport { createConfig, http, type Transport } from 'wagmi';\nimport {\n mainnet,\n avalanche,\n base,\n optimism,\n polygon,\n arbitrum,\n bsc,\n sonic,\n nibiru,\n lightlinkPhoenix,\n} from 'wagmi/chains';\n\nimport {\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n SONIC_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n HYPEREVM_MAINNET_CHAIN_ID,\n LIGHTLINK_MAINNET_CHAIN_ID,\n} from '@sodax/types';\n\n// HyperEVM chain is not supported by viem, so we need to define it manually\nexport const hyper = /*#__PURE__*/ defineChain({\n id: 999,\n name: 'HyperEVM',\n nativeCurrency: {\n decimals: 18,\n name: 'HYPE',\n symbol: 'HYPE',\n },\n rpcUrls: {\n default: { http: ['https://rpc.hyperliquid.xyz/evm'] },\n },\n blockExplorers: {\n default: {\n name: 'HyperEVMScan',\n url: 'https://hyperevmscan.io/',\n },\n },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 13051,\n },\n },\n});\n\nconst evmChainMap = {\n [AVALANCHE_MAINNET_CHAIN_ID]: avalanche,\n [ARBITRUM_MAINNET_CHAIN_ID]: arbitrum,\n [BASE_MAINNET_CHAIN_ID]: base,\n [BSC_MAINNET_CHAIN_ID]: bsc,\n [SONIC_MAINNET_CHAIN_ID]: sonic,\n [OPTIMISM_MAINNET_CHAIN_ID]: optimism,\n [POLYGON_MAINNET_CHAIN_ID]: polygon,\n [NIBIRU_MAINNET_CHAIN_ID]: nibiru,\n [HYPEREVM_MAINNET_CHAIN_ID]: hyper,\n [LIGHTLINK_MAINNET_CHAIN_ID]: lightlinkPhoenix,\n} as const;\n\nexport type EvmChainId = keyof typeof evmChainMap;\n\nexport const getWagmiConfig = (chains: EvmChainId[]) => {\n const mappedChains = chains.map(chain => evmChainMap[chain]);\n const finalChains = mappedChains.length > 0 ? mappedChains : [mainnet];\n\n const transports = finalChains.reduce(\n (acc, chain) => {\n acc[chain.id] = http();\n return acc;\n },\n {} as Record<number, Transport>,\n );\n\n return createConfig({\n chains: finalChains as [typeof mainnet, ...(typeof mainnet)[]],\n transports,\n // ssr: true,\n });\n};\n\n/**\n * Service class for handling EVM chain interactions.\n * Implements singleton pattern and provides methods for wallet/chain operations.\n */\n\nexport class EvmXService extends XService {\n private static instance: EvmXService;\n private config: EVMConfig | undefined;\n private constructor() {\n super('EVM');\n }\n\n getXConnectors() {\n return [];\n }\n\n public static getInstance(): EvmXService {\n if (!EvmXService.instance) {\n EvmXService.instance = new EvmXService();\n }\n return EvmXService.instance;\n }\n\n public setConfig(config: EVMConfig) {\n this.config = config;\n }\n\n getPublicClient(chainId: number): PublicClient | undefined {\n if (!this.config) {\n throw new Error('EvmXService: config is not initialized yet');\n }\n\n // @ts-ignore\n return getPublicClient(getWagmiConfig(this.config.chains), { chainId });\n }\n\n public async getWalletClient(chainId: number): Promise<WalletClient> {\n if (!this.config) {\n throw new Error('EvmXService: config is not initialized yet');\n }\n return await getWalletClient(getWagmiConfig(this.config.chains), { chainId });\n }\n\n async getBalance(address: string | undefined, xToken: XToken, xChainId: ChainId): Promise<bigint> {\n if (!address) return 0n;\n\n const chainId = getWagmiChainId(xChainId);\n\n if (isNativeToken(xToken)) {\n const balance = await this.getPublicClient(chainId)?.getBalance({ address: address as Address });\n return balance || 0n;\n }\n\n throw new Error(`Unsupported token: ${xToken.symbol}`);\n }\n\n async getBalances(address: string | undefined, xTokens: XToken[], xChainId: ChainId) {\n if (!address) return {};\n\n const balancePromises = xTokens\n .filter(xToken => isNativeToken(xToken))\n .map(async xToken => {\n const balance = await this.getBalance(address, xToken, xChainId);\n return { symbol: xToken.symbol, address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n const tokenMap = balances.reduce((map, { address, balance }) => {\n if (balance) map[address] = balance;\n return map;\n }, {});\n\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n const result = await this.getPublicClient(getWagmiChainId(xChainId))?.multicall({\n contracts: nonNativeXTokens.map(token => ({\n abi: erc20Abi,\n address: token.address as `0x${string}`,\n functionName: 'balanceOf',\n args: [address],\n chainId: getWagmiChainId(xChainId),\n })),\n });\n\n return nonNativeXTokens\n .map((token, index) => ({\n symbol: token.symbol,\n address: token.address,\n balance: result?.[index]?.result?.toString() || '0',\n }))\n .reduce((acc, balance) => {\n acc[balance.address] = balance.balance;\n return acc;\n }, tokenMap);\n }\n}\n","import { XConnector } from '@/core/XConnector';\nimport type { XAccount } from '@/types';\nimport type { Config, Connector } from 'wagmi';\n\nexport class EvmXConnector extends XConnector {\n connector: Connector;\n\n constructor(connector: Connector) {\n super('EVM', connector.name, connector.id);\n this.connector = connector;\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {\n return;\n }\n\n public get id() {\n return this.connector.id;\n }\n public get icon() {\n return this.connector.icon;\n }\n}\n","import { XService } from '@/core/XService';\nimport type { IconService } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nimport type { ChainId, XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils';\n\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { IconService: IconServiceConstructor, Builder: IconBuilder, Converter: IconConverter } = IconSdk;\nexport interface CallData {\n target: string;\n method: string;\n params: string[];\n}\n\nexport enum SupportedChainId {\n MAINNET = 1,\n}\n\ninterface ChainInfo {\n readonly name: string;\n readonly node: string;\n readonly APIEndpoint: string;\n readonly debugAPIEndpoint: string;\n readonly chainId: number;\n readonly tracker: string;\n}\n\nexport const CHAIN_INFO: { readonly [chainId: number]: ChainInfo } = {\n [SupportedChainId.MAINNET]: {\n name: 'ICON Mainnet',\n node: 'https://ctz.solidwallet.io',\n APIEndpoint: 'https://ctz.solidwallet.io/api/v3',\n debugAPIEndpoint: 'https://api.icon.community/api/v3d',\n chainId: 1,\n tracker: 'https://tracker.icon.community',\n },\n};\n\nexport class IconXService extends XService {\n private static instance: IconXService;\n\n public iconService: IconService;\n\n private constructor() {\n super('ICON');\n this.iconService = new IconServiceConstructor(\n new IconServiceConstructor.HttpProvider(CHAIN_INFO[SupportedChainId.MAINNET].APIEndpoint),\n );\n }\n\n public static getInstance(): IconXService {\n if (!IconXService.instance) {\n IconXService.instance = new IconXService();\n }\n return IconXService.instance;\n }\n\n private async getAggregateData(requireSuccess: boolean, calls: CallData[]) {\n const rawTx = new IconBuilder.CallBuilder()\n // muticall address on mainnet\n .to('cxa4aa9185e23558cff990f494c1fd2845f6cbf741')\n .method('tryAggregate')\n .params({ requireSuccess: IconConverter.toHex(requireSuccess ? 1 : 0), calls })\n .build();\n\n try {\n const result = await this.iconService.call(rawTx).execute();\n const aggs = result['returnData'];\n\n const data = aggs.map(agg => {\n if (agg['success'] === '0x0') {\n return null;\n }\n return agg['returnData'];\n });\n\n return data;\n } catch (err) {\n console.error(err);\n return Array(calls.length).fill(null);\n }\n }\n\n async getBalances(address: string | undefined, xTokens: XToken[], xChainId: ChainId) {\n if (!address) return {};\n\n const balances = {};\n\n const nativeXToken = xTokens.find(xToken => isNativeToken(xToken));\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n\n if (nativeXToken) {\n const balance = await this.iconService.getBalance(address).execute();\n balances[nativeXToken.address] = BigInt(balance.toFixed());\n }\n\n const cds: CallData[] = nonNativeXTokens.map(token => {\n return {\n target: token.address,\n method: 'balanceOf',\n params: [address],\n };\n });\n\n const data: string[] = await this.getAggregateData(\n false,\n cds.filter(cd => cd.target.startsWith('cx')),\n );\n\n return nonNativeXTokens.reduce((agg, token, idx) => {\n const balance = data[idx];\n balances[token.address] = BigInt(balance);\n\n return agg;\n }, balances);\n }\n}\n","const ICONEX_RELAY_RESPONSE = 'ICONEX_RELAY_RESPONSE';\nconst ICONEX_RELAY_REQUEST = 'ICONEX_RELAY_REQUEST';\n\nexport enum ICONexRequestEventType {\n REQUEST_HAS_ACCOUNT = 'REQUEST_HAS_ACCOUNT',\n REQUEST_HAS_ADDRESS = 'REQUEST_HAS_ADDRESS',\n REQUEST_ADDRESS = 'REQUEST_ADDRESS',\n REQUEST_JSON = 'REQUEST_JSON',\n REQUEST_SIGNING = 'REQUEST_SIGNING',\n}\n\nexport enum ICONexResponseEventType {\n RESPONSE_HAS_ACCOUNT = 'RESPONSE_HAS_ACCOUNT',\n RESPONSE_HAS_ADDRESS = 'RESPONSE_HAS_ADDRESS',\n RESPONSE_ADDRESS = 'RESPONSE_ADDRESS',\n RESPONSE_JSON = 'RESPONSE_JSON',\n RESPONSE_SIGNING = 'RESPONSE_SIGNING',\n}\n\nexport interface ICONexRequestEvent {\n type: ICONexRequestEventType;\n payload?: any;\n}\n\nexport interface ICONexResponseEvent {\n type: ICONexResponseEventType;\n payload?: any;\n}\n\nexport type ICONexEvent = ICONexRequestEvent | ICONexResponseEvent;\n\nexport const request = (event: ICONexRequestEvent): Promise<ICONexResponseEvent> => {\n return new Promise((resolve, reject) => {\n const handler = evt => {\n window.removeEventListener(ICONEX_RELAY_RESPONSE, handler);\n resolve(evt.detail);\n };\n\n window.addEventListener(ICONEX_RELAY_RESPONSE, handler);\n window.dispatchEvent(\n new CustomEvent(ICONEX_RELAY_REQUEST, {\n detail: event,\n }),\n );\n });\n};\n","import type { XAccount } from '@/types';\nimport { ICONexRequestEventType, ICONexResponseEventType, request } from './iconex';\n\nimport { XConnector } from '@/core/XConnector';\n\nexport class IconHanaXConnector extends XConnector {\n constructor() {\n super('ICON', 'Hana Wallet', 'hana');\n }\n\n async connect(): Promise<XAccount | undefined> {\n const { hanaWallet } = window as any;\n if (window && !hanaWallet && !hanaWallet?.isAvailable) {\n window.open('https://chromewebstore.google.com/detail/hana-wallet/jfdlamikmbghhapbgfoogdffldioobgl', '_blank');\n return;\n }\n\n const detail = await request({\n type: ICONexRequestEventType.REQUEST_ADDRESS,\n });\n\n if (detail?.type === ICONexResponseEventType.RESPONSE_ADDRESS) {\n return {\n address: detail?.payload,\n xChainType: this.xChainType,\n };\n }\n\n return undefined;\n }\n\n async disconnect(): Promise<void> {\n console.log('HanaIconXConnector disconnected');\n }\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg';\n }\n}\n","import { XService } from '@/core/XService';\nimport { Network, getNetworkEndpoints } from '@injectivelabs/networks';\nimport { ChainGrpcWasmApi, IndexerGrpcAccountPortfolioApi } from '@injectivelabs/sdk-ts';\nimport { ChainId as InjectiveChainId } from '@injectivelabs/ts-types';\nimport { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport type { XToken } from '@sodax/types';\nimport { mainnet } from 'wagmi/chains';\nimport { WalletStrategy } from '@injectivelabs/wallet-strategy';\n\nexport class InjectiveXService extends XService {\n private static instance: InjectiveXService;\n\n public walletStrategy: WalletStrategy;\n public indexerGrpcAccountPortfolioApi: IndexerGrpcAccountPortfolioApi;\n public chainGrpcWasmApi: ChainGrpcWasmApi;\n public msgBroadcaster: MsgBroadcaster;\n\n private constructor() {\n super('INJECTIVE');\n\n const endpoints = getNetworkEndpoints(Network.Mainnet);\n\n this.walletStrategy = new WalletStrategy({\n chainId: InjectiveChainId.Mainnet,\n strategies: {},\n evmOptions: {\n evmChainId: mainnet.id,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n },\n });\n\n this.indexerGrpcAccountPortfolioApi = new IndexerGrpcAccountPortfolioApi(endpoints.indexer);\n this.chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc);\n this.msgBroadcaster = new MsgBroadcaster({\n walletStrategy: this.walletStrategy,\n network: Network.Mainnet,\n endpoints,\n });\n }\n\n public static getInstance(): InjectiveXService {\n if (!InjectiveXService.instance) {\n InjectiveXService.instance = new InjectiveXService();\n }\n return InjectiveXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken) {\n if (!address) return 0n;\n\n const portfolio = await this.indexerGrpcAccountPortfolioApi.fetchAccountPortfolioBalances(address);\n\n const xTokenAddress = xToken.address;\n\n const balance = portfolio.bankBalancesList.find(_balance => _balance.denom === xTokenAddress);\n if (balance) {\n return BigInt(balance.amount);\n }\n\n return 0n;\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { Wallet } from '@injectivelabs/wallet-base';\nimport { isCosmosWalletInstalled } from '@injectivelabs/wallet-cosmos';\nimport { InjectiveXService } from './InjectiveXService';\n\nexport class InjectiveKelprXConnector extends XConnector {\n constructor() {\n super('INJECTIVE', 'Keplr', 'keplr');\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!isCosmosWalletInstalled(Wallet.Keplr)) {\n window.open('https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap?hl=en', '_blank');\n return;\n }\n\n this.getXService().walletStrategy.setWallet(Wallet.Keplr);\n const addresses = await this.getXService().walletStrategy.getAddresses();\n\n return {\n address: addresses?.[0],\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/keplr.svg';\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { getInjectiveAddress } from '@injectivelabs/sdk-ts';\nimport { isEvmBrowserWallet, Wallet } from '@injectivelabs/wallet-base';\nimport { InjectiveXService } from './InjectiveXService';\n\nexport class InjectiveMetamaskXConnector extends XConnector {\n constructor() {\n super('INJECTIVE', 'MetaMask', 'metamask');\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!isEvmBrowserWallet(Wallet.Metamask)) {\n window.open('https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en', '_blank');\n return;\n }\n\n this.getXService().walletStrategy.setWallet(Wallet.Metamask);\n const addresses = await this.getXService().walletStrategy.getAddresses();\n const injectiveAddresses = addresses.map(getInjectiveAddress);\n\n return {\n address: injectiveAddresses?.[0],\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n await this.getXService().walletStrategy.disconnect();\n }\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/metamask.svg';\n }\n}\n","export const switchEthereumChain = async chainId => {\n const metamaskProvider = (window as any).ethereum as any;\n\n await Promise.race([\n metamaskProvider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId}` }],\n }),\n new Promise<void>(resolve =>\n metamaskProvider.on('change', ({ chain }: any) => {\n if (chain?.id === chainId) {\n resolve();\n }\n }),\n ),\n ]);\n};\n","import { XService } from '@/core/XService';\nimport { isNativeToken } from '@/utils';\nimport type { XToken } from '@sodax/types';\nimport { type Connection, PublicKey } from '@solana/web3.js';\nimport { getAccount, getAssociatedTokenAddressSync } from '@solana/spl-token';\nimport type { AnchorProvider } from '@coral-xyz/anchor';\nimport type { WalletContextState } from '@solana/wallet-adapter-react';\n\nexport class SolanaXService extends XService {\n private static instance: SolanaXService;\n\n public connection: Connection | undefined;\n public wallet: WalletContextState | undefined;\n public provider: AnchorProvider | undefined;\n\n private constructor() {\n super('SOLANA');\n }\n\n public static getInstance(): SolanaXService {\n if (!SolanaXService.instance) {\n SolanaXService.instance = new SolanaXService();\n }\n return SolanaXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const connection = this.connection;\n if (!connection) {\n throw new Error('Connection is not initialized');\n }\n\n try {\n if (isNativeToken(xToken)) {\n const newBalance = await connection.getBalance(new PublicKey(address));\n return BigInt(newBalance);\n }\n\n const tokenAccountPubkey = getAssociatedTokenAddressSync(new PublicKey(xToken.address), new PublicKey(address));\n const tokenAccount = await getAccount(connection, tokenAccountPubkey);\n return BigInt(tokenAccount.amount);\n } catch (e) {\n console.log('error', e);\n }\n\n return BigInt(0);\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { SolanaXService } from './SolanaXService';\n\nexport class SolanaXConnector extends XConnector {\n wallet: any;\n constructor(wallet: any) {\n super('SOLANA', wallet?.adapter.name, wallet?.adapter.name);\n this.wallet = wallet;\n }\n\n getXService(): SolanaXService {\n return SolanaXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this.wallet?.adapter.icon;\n }\n}\n","import {\n type FeeBumpTransaction,\n type Memo,\n type MemoType,\n type Operation,\n SorobanRpc,\n type Transaction,\n} from '@stellar/stellar-sdk';\n\nclass CustomSorobanServer extends SorobanRpc.Server {\n private readonly customHeaders: Record<string, string>;\n\n constructor(serverUrl: string, customHeaders: Record<string, string>) {\n super(serverUrl, {\n allowHttp: true,\n });\n this.customHeaders = customHeaders;\n }\n\n async simulateTransaction(\n tx: Transaction<Memo<MemoType>, Operation[]>,\n ): Promise<SorobanRpc.Api.SimulateTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'simulateTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error simulating TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n\n async sendTransaction(tx: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'sendTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error submitting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n\n async getTransaction(hash: string): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'getTransaction',\n params: { hash },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error getting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n}\n\nexport default CustomSorobanServer;\n","import {\n Address,\n Contract,\n type Memo,\n type MemoType,\n type Operation,\n TimeoutInfinite,\n type Transaction,\n type TransactionBuilder,\n scValToBigInt,\n xdr,\n} from '@stellar/stellar-sdk';\nimport type CustomSorobanServer from './CustomSorobanServer';\n\nexport const STELLAR_RLP_MSG_TYPE = { type: 'symbol' };\n\n// Can be used whenever you need an Address argument for a contract method\nexport const accountToScVal = (account: string) => new Address(account).toScVal();\n\nexport const simulateTx = async (\n tx: Transaction<Memo<MemoType>, Operation[]>,\n server: CustomSorobanServer,\n): Promise<any> => {\n const response = await server.simulateTransaction(tx);\n\n if (response !== undefined) {\n return response;\n }\n\n throw new Error('cannot simulate transaction');\n};\n\nexport const getTokenBalance = async (\n address: string,\n tokenId: string,\n txBuilder: TransactionBuilder,\n server: CustomSorobanServer,\n) => {\n const params = [accountToScVal(address)];\n const contract = new Contract(tokenId);\n const tx = txBuilder\n .addOperation(contract.call('balance', ...params))\n .setTimeout(TimeoutInfinite)\n .build();\n\n const result = await simulateTx(tx, server);\n\n return result.results ? scValToBigInt(xdr.ScVal.fromXDR(result.results[0].xdr, 'base64')) : 0n;\n};\n","import { XService } from '@/core/XService';\nimport { FREIGHTER_ID, StellarWalletsKit, WalletNetwork, allowAllModules } from '@creit.tech/stellar-wallets-kit';\nimport * as StellarSdk from '@stellar/stellar-sdk';\nimport CustomSorobanServer from './CustomSorobanServer';\nimport { getTokenBalance } from './utils';\nimport type { XToken } from '@sodax/types';\n\nexport class StellarXService extends XService {\n private static instance: StellarXService;\n\n public walletsKit: StellarWalletsKit;\n public server: StellarSdk.Horizon.Server;\n public sorobanServer: CustomSorobanServer;\n\n private constructor() {\n super('STELLAR');\n\n this.walletsKit = new StellarWalletsKit({\n network: WalletNetwork.PUBLIC,\n selectedWalletId: FREIGHTER_ID,\n modules: allowAllModules(),\n });\n\n this.server = new StellarSdk.Horizon.Server('https://horizon.stellar.org', { allowHttp: true });\n this.sorobanServer = new CustomSorobanServer('https://rpc.ankr.com/stellar_soroban', {});\n }\n\n public static getInstance(): StellarXService {\n if (!StellarXService.instance) {\n StellarXService.instance = new StellarXService();\n }\n return StellarXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const stellarAccount = await this.server.loadAccount(address);\n\n if (xToken.symbol === 'XLM') {\n const xlmBalance = stellarAccount.balances.find(balance => balance.asset_type === 'native');\n if (xlmBalance) {\n return BigInt(xlmBalance.balance.replace('.', ''));\n }\n } else {\n try {\n const txBuilder = new StellarSdk.TransactionBuilder(stellarAccount, {\n fee: StellarSdk.BASE_FEE,\n networkPassphrase: StellarSdk.Networks.PUBLIC,\n });\n\n const balance = await getTokenBalance(address, xToken.address, txBuilder, this.sorobanServer);\n return balance;\n } catch (e) {\n console.error(`Error while fetching token on Stellar: ${xToken.symbol}, Error: ${e}`);\n }\n }\n\n return BigInt(0);\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { StellarXService } from './StellarXService';\nimport type { StellarWalletType } from './useStellarXConnectors';\n\nexport class StellarWalletsKitXConnector extends XConnector {\n _wallet: StellarWalletType;\n\n constructor(wallet: StellarWalletType) {\n super('STELLAR', wallet.name, wallet.id);\n this._wallet = wallet;\n }\n\n getXService(): StellarXService {\n return StellarXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n const kit = this.getXService().walletsKit;\n\n if (!this._wallet) {\n return;\n }\n\n if (!this._wallet.isAvailable && this._wallet.url) {\n window.open(this._wallet.url, '_blank');\n return;\n }\n\n kit.setWallet(this._wallet.id);\n const { address } = await kit.getAddress();\n\n return {\n address: address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this._wallet.icon;\n }\n}\n","import { XService } from '@/core/XService';\nimport type { XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils';\n\nexport class SuiXService extends XService {\n private static instance: SuiXService;\n\n public suiClient: any; // TODO: define suiClient type\n public suiWallet: any; // TODO: define suiWallet type\n public suiAccount: any; // TODO: define suiAccount type\n\n private constructor() {\n super('SUI');\n }\n\n public static getInstance(): SuiXService {\n if (!SuiXService.instance) {\n SuiXService.instance = new SuiXService();\n }\n return SuiXService.instance;\n }\n\n // getBalance is not used because getBalances uses getAllBalances which returns all balances\n\n async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n\n try {\n const allBalances = await this.suiClient.getAllBalances({\n owner: address,\n });\n const tokenMap = xTokens.reduce((map, xToken) => {\n let coinType = isNativeToken(xToken) ? '0x2::sui::SUI' : xToken.address;\n\n // TODO: hard coded for getting legacy bnUSD balance\n if (\n coinType ===\n '0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR'\n ) {\n coinType =\n '0x3917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR';\n }\n\n const balance = allBalances.find(b => b.coinType === coinType);\n\n if (balance) map[xToken.address] = balance.totalBalance;\n return map;\n }, {});\n\n return tokenMap;\n } catch (e) {\n console.log('error', e);\n return {};\n }\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { SuiXService } from './SuiXService';\n\nexport class SuiXConnector extends XConnector {\n wallet: any;\n\n constructor(wallet: any) {\n // super('SUI', wallet.name, wallet.id);\n super('SUI', wallet?.name, wallet?.name);\n this.wallet = wallet;\n }\n\n getXService(): SuiXService {\n return SuiXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this.wallet?.icon;\n }\n}\n","import { AnchorProvider } from '@coral-xyz/anchor';\nimport { type AnchorWallet, useConnection, useWallet } from '@solana/wallet-adapter-react';\n\nexport function useAnchorProvider() {\n const { connection } = useConnection();\n const wallet = useWallet();\n\n return new AnchorProvider(connection, wallet as AnchorWallet, { commitment: 'confirmed' });\n}\n","'use client';\n\nimport type { ChainType } from '@sodax/types';\nimport type { XConfig } from './types';\nimport { useCurrentAccount, useCurrentWallet, useSuiClient } from '@mysten/dapp-kit';\nimport React, { useEffect } from 'react';\nimport { create } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\nimport { getXService } from '.';\nimport type { XService } from './core';\nimport type { XConnection } from './types';\nimport { EvmXService } from './xchains/evm';\nimport { InjectiveKelprXConnector, InjectiveMetamaskXConnector, InjectiveXService } from './xchains/injective';\nimport { SolanaXService } from './xchains/solana/SolanaXService';\nimport { StellarXService } from './xchains/stellar';\nimport { SuiXService } from './xchains/sui';\nimport { IconXService } from './xchains/icon';\nimport { IconHanaXConnector } from './xchains/icon/IconHanaXConnector';\nimport { useAnchorProvider } from './xchains/solana/hooks/useAnchorProvider';\nimport { useConnection, useWallet } from '@solana/wallet-adapter-react';\n\ntype XWagmiStore = {\n xServices: Partial<Record<ChainType, XService>>;\n xConnections: Partial<Record<ChainType, XConnection>>;\n\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => void;\n unsetXConnection: (xChainType: ChainType) => void;\n};\n\nexport const useXWagmiStore = create<XWagmiStore>()(\n persist(\n immer((set, get) => ({\n xServices: {},\n xConnections: {},\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => {\n set(state => {\n state.xConnections[xChainType] = xConnection;\n });\n },\n unsetXConnection: (xChainType: ChainType) => {\n set(state => {\n delete state.xConnections[xChainType];\n });\n },\n })),\n {\n name: 'xwagmi-store',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({ xConnections: state.xConnections }),\n\n // TODO: better way to handle rehydration of xConnections?\n onRehydrateStorage: state => {\n console.log('hydration starts');\n\n return (state, error) => {\n if (state?.xConnections) {\n console.log('rehydrating xConnections', state.xConnections);\n Object.entries(state.xConnections).forEach(([xChainType, xConnection]) => {\n const xConnector = getXService(xChainType as ChainType).getXConnectorById(xConnection.xConnectorId);\n xConnector?.connect();\n });\n }\n if (error) {\n console.log('an error happened during hydration', error);\n } else {\n console.log('hydration finished');\n }\n };\n },\n },\n ),\n);\n\nconst initXServices = (config: XConfig) => {\n const xServices = {};\n Object.keys(config).forEach(key => {\n const xChainType = key as ChainType;\n\n switch (xChainType) {\n case 'EVM':\n if (config[xChainType]) {\n xServices[xChainType] = EvmXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n xServices[xChainType].setConfig(config[xChainType]);\n }\n break;\n case 'INJECTIVE':\n xServices[xChainType] = InjectiveXService.getInstance();\n xServices[xChainType].setXConnectors([new InjectiveMetamaskXConnector(), new InjectiveKelprXConnector()]);\n break;\n case 'STELLAR':\n xServices[xChainType] = StellarXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'SUI':\n xServices[xChainType] = SuiXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'SOLANA':\n xServices[xChainType] = SolanaXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'ICON':\n xServices[xChainType] = IconXService.getInstance();\n xServices[xChainType].setXConnectors([new IconHanaXConnector()]);\n break;\n default:\n break;\n }\n });\n\n return xServices;\n};\n\nexport const initXWagmiStore = (config: XConfig) => {\n useXWagmiStore.setState({\n xServices: initXServices(config),\n });\n};\n\nexport const InitXWagmiStore = () => {\n // sui\n const suiClient = useSuiClient();\n useEffect(() => {\n if (suiClient) {\n SuiXService.getInstance().suiClient = suiClient;\n }\n }, [suiClient]);\n const { currentWallet: suiWallet } = useCurrentWallet();\n useEffect(() => {\n if (suiWallet) {\n SuiXService.getInstance().suiWallet = suiWallet;\n }\n }, [suiWallet]);\n const suiAccount = useCurrentAccount();\n useEffect(() => {\n if (suiAccount) {\n SuiXService.getInstance().suiAccount = suiAccount;\n }\n }, [suiAccount]);\n\n // solana\n const { connection: solanaConnection } = useConnection();\n const solanaWallet = useWallet();\n const solanaProvider = useAnchorProvider();\n useEffect(() => {\n if (solanaConnection) {\n SolanaXService.getInstance().connection = solanaConnection;\n }\n }, [solanaConnection]);\n useEffect(() => {\n if (solanaWallet) {\n SolanaXService.getInstance().wallet = solanaWallet;\n }\n }, [solanaWallet]);\n useEffect(() => {\n if (solanaProvider) {\n SolanaXService.getInstance().provider = solanaProvider;\n }\n }, [solanaProvider]);\n\n return <></>;\n};\n","import type { ChainType } from '@sodax/types';\nimport { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMemo } from 'react';\nimport { useAccount, useConnections } from 'wagmi';\nimport type { XConnection } from '../types';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\n/**\n * Hook for accessing connection details for a specific blockchain\n *\n * Retrieves the current connection state for the specified chain type,\n * including the connected account and connector ID.\n *\n * @param {ChainType} xChainType - The type of blockchain to get connection details for\n * @returns {XConnection | undefined} Connection details including account and connector ID, or undefined if not connected\n *\n * @example\n * ```ts\n * const connection = useXConnection('EVM');\n *\n * if (connection) {\n * console.log('Connected account:', connection.xAccount.address);\n * console.log('Using connector:', connection.xConnectorId);\n * }\n * ```\n */\nexport function useXConnection(xChainType: ChainType | undefined): XConnection | undefined {\n const xConnection = useXWagmiStore(state => (xChainType ? state.xConnections?.[xChainType] : undefined));\n\n const evmConnections = useConnections();\n const { address: evmAddress } = useAccount();\n const suiAccount = useCurrentAccount();\n const suiCurrentWallet = useCurrentWallet();\n const solanaWallet = useWallet();\n\n const xConnection2 = useMemo(() => {\n if (!xChainType) {\n return undefined;\n }\n\n switch (xChainType) {\n case 'EVM':\n return {\n xAccount: { address: evmAddress as string, xChainType },\n xConnectorId: evmConnections?.[0]?.connector.id,\n };\n\n case 'SUI':\n if (suiCurrentWallet.currentWallet && suiCurrentWallet.connectionStatus === 'connected') {\n return {\n xAccount: { address: suiAccount?.address, xChainType },\n xConnectorId: suiCurrentWallet.currentWallet.name,\n };\n }\n return undefined;\n\n case 'SOLANA':\n if (solanaWallet.connected) {\n return {\n xAccount: { address: solanaWallet.publicKey?.toString(), xChainType },\n xConnectorId: `${solanaWallet.wallet?.adapter.name}`,\n };\n }\n return undefined;\n default:\n return xConnection;\n }\n }, [xChainType, xConnection, evmAddress, suiAccount, evmConnections, suiCurrentWallet, solanaWallet]);\n\n return xConnection2;\n}\n","import { useMemo } from 'react';\n\nimport type { ChainId, ChainType } from '@sodax/types';\n\nimport type { XAccount } from '../types';\nimport { useXConnection } from './useXConnection';\nimport { getXChainType } from '../actions';\n\n/**\n * Hook to get the current connected account for a specific blockchain\n *\n * @param chainIdentifier - The blockchain identifier (either chain type like 'EVM' or chain ID like '0xa86a.avax')\n * @returns {XAccount} The current connected account, or undefined if no account is connected\n *\n * @example\n * ```ts\n * // Using ChainType (preferred)\n * const { address } = useXAccount('EVM');\n *\n * // Using ChainId\n * const { address } = useXAccount('0xa86a.avax');\n *\n * // Returns: { address: string | undefined, xChainType: ChainType | undefined }\n * ```\n */\nfunction isChainType(chainIdentifier: ChainType | ChainId): chainIdentifier is ChainType {\n return ['ICON', 'EVM', 'INJECTIVE', 'SUI', 'STELLAR', 'SOLANA'].includes(chainIdentifier);\n}\n\nexport function useXAccount(chainIdentifier?: ChainType | ChainId): XAccount {\n const resolvedChainType: ChainType | undefined = chainIdentifier\n ? isChainType(chainIdentifier)\n ? chainIdentifier\n : getXChainType(chainIdentifier as ChainId)\n : undefined;\n\n const xConnection = useXConnection(resolvedChainType);\n\n const xAccount = useMemo((): XAccount => {\n if (!resolvedChainType) {\n return {\n address: undefined,\n xChainType: undefined,\n };\n }\n\n return xConnection?.xAccount || { address: undefined, xChainType: resolvedChainType };\n }, [resolvedChainType, xConnection]);\n\n return xAccount;\n}\n","import { useMemo } from 'react';\n\nimport type { ChainType } from '@sodax/types';\nimport { useCurrentAccount } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useAccount } from 'wagmi';\n\nimport type { XAccount } from '../types';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\nexport function useXAccounts() {\n const xChainTypes = useXWagmiStore(state => Object.keys(state.xServices));\n const xConnections = useXWagmiStore(state => state.xConnections);\n const { address: evmAddress } = useAccount();\n const suiAccount = useCurrentAccount();\n const solanaWallet = useWallet();\n\n const xAccounts = useMemo(() => {\n const result: Partial<Record<ChainType, XAccount>> = {};\n for (const xChainType of xChainTypes) {\n const xConnection = xConnections[xChainType];\n\n if (xConnection?.xAccount) {\n result[xChainType] = xConnection.xAccount;\n } else {\n result[xChainType] = {\n address: undefined,\n xChainType,\n };\n }\n }\n\n if (evmAddress) {\n result['EVM'] = {\n address: evmAddress,\n xChainType: 'EVM',\n };\n }\n if (suiAccount) {\n result['SUI'] = {\n address: suiAccount.address,\n xChainType: 'SUI',\n };\n }\n if (solanaWallet.publicKey) {\n result['SOLANA'] = {\n address: solanaWallet.publicKey.toString(),\n xChainType: 'SOLANA',\n };\n }\n\n return result;\n }, [xChainTypes, xConnections, evmAddress, suiAccount, solanaWallet]);\n\n return xAccounts;\n}\n","import type { XAccount } from '@/types';\nimport { useConnectWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\nimport { useConnect } from 'wagmi';\nimport type { XConnector } from '../core/XConnector';\nimport { useXWagmiStore } from '../useXWagmiStore';\nimport type { EvmXConnector } from '../xchains/evm';\nimport type { SolanaXConnector } from '../xchains/solana';\nimport type { SuiXConnector } from '../xchains/sui';\n\n/**\n * Hook for connecting to various blockchain wallets across different chains\n *\n * Handles connection logic for EVM, SUI, Solana and other supported chains.\n * Sets up wallet connections and stores connection state in XWagmiStore.\n *\n * @param {void} - No parameters required\n * @returns {UseMutationResult<XAccount | undefined, Error, XConnector>} Mutation result containing:\n * - mutateAsync: Function to connect a wallet\n * - isPending: Boolean indicating if connection is in progress\n * - error: Any error that occurred\n * - data: Connected account data if successful\n *\n * @example\n * ```ts\n * const { mutateAsync: connect, isPending } = useXConnect();\n *\n * const handleConnect = async (connector: XConnector) => {\n * try {\n * await connect(connector);\n * } catch (err) {\n * console.error(err);\n * }\n * };\n * ```\n */\nexport function useXConnect(): UseMutationResult<XAccount | undefined, Error, XConnector> {\n const setXConnection = useXWagmiStore(state => state.setXConnection);\n\n const { connectAsync: evmConnectAsync } = useConnect();\n const { mutateAsync: suiConnectAsync } = useConnectWallet();\n\n // const solanaWallet = useWallet();\n const { select, connect, connected } = useWallet();\n\n return useMutation({\n mutationFn: async (xConnector: XConnector) => {\n const xChainType = xConnector.xChainType;\n let xAccount: XAccount | undefined;\n\n switch (xChainType) {\n case 'EVM':\n await evmConnectAsync({ connector: (xConnector as EvmXConnector).connector });\n break;\n case 'SUI':\n await suiConnectAsync({ wallet: (xConnector as SuiXConnector).wallet });\n break;\n case 'SOLANA': {\n const walletName = (xConnector as SolanaXConnector).wallet.adapter.name;\n\n select(walletName);\n\n const adapter = (xConnector as SolanaXConnector).wallet.adapter;\n\n if (!adapter) throw new Error('No adapter found for Solana wallet');\n\n if (walletName === 'MetaMask') {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error('Wallet connection timeout'));\n }, 30000);\n\n const handleConnect = () => {\n cleanup();\n resolve();\n };\n\n const handleError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n const cleanup = () => {\n clearTimeout(timeout);\n adapter.off('connect', handleConnect);\n adapter.off('error', handleError);\n };\n\n adapter.on('connect', handleConnect);\n adapter.on('error', handleError);\n\n connect().catch(err => {\n cleanup();\n reject(err);\n });\n });\n }\n\n break;\n }\n\n default:\n xAccount = await xConnector.connect();\n break;\n }\n\n if (xAccount) {\n setXConnection(xConnector.xChainType, {\n xAccount,\n xConnectorId: xConnector.id,\n });\n }\n\n return xAccount;\n },\n });\n}\n","import { useXService } from '@/hooks';\nimport { type UseQueryResult, useQuery } from '@tanstack/react-query';\n\nimport { StellarWalletsKitXConnector, type StellarXService } from '.';\n\nexport type StellarWalletType = {\n icon: string;\n id: string;\n isAvailable: boolean;\n name: string;\n type: string;\n url: string;\n};\n\nexport const useStellarXConnectors = (): UseQueryResult<StellarWalletsKitXConnector[] | undefined, Error | null> => {\n const xService = useXService('STELLAR') as StellarXService;\n\n return useQuery({\n queryKey: ['stellar-wallets', xService],\n queryFn: async () => {\n if (!xService) {\n return [];\n }\n\n const wallets: StellarWalletType[] = await xService.walletsKit.getSupportedWallets();\n\n return wallets.filter(wallet => wallet.isAvailable).map(wallet => new StellarWalletsKitXConnector(wallet));\n },\n });\n};\n","import type { ChainType } from '@sodax/types';\nimport type { XService } from '../core';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\nexport function useXService(xChainType: ChainType | undefined): XService | undefined {\n const xService = useXWagmiStore(state => (xChainType ? state.xServices[xChainType] : undefined));\n return xService;\n}\n","import type { ChainType } from '@sodax/types';\nimport { useWallets } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMemo } from 'react';\nimport { useConnectors } from 'wagmi';\nimport type { XConnector } from '../core';\nimport { EvmXConnector } from '../xchains/evm';\nimport { SolanaXConnector } from '../xchains/solana';\nimport { useStellarXConnectors } from '../xchains/stellar/useStellarXConnectors';\nimport { SuiXConnector } from '../xchains/sui';\nimport { useXService } from './useXService';\n\n/**\n * Hook to retrieve available wallet connectors for a specific blockchain type.\n *\n * This hook aggregates wallet connectors from different blockchain ecosystems:\n * - EVM: Uses wagmi connectors\n * - Sui: Uses Sui wallet adapters\n * - Stellar: Uses custom Stellar connectors\n * - Solana: Uses Solana wallet adapters (filtered to installed wallets only)\n *\n * @param xChainType - The blockchain type to get connectors for ('EVM' | 'SUI' | 'STELLAR' | 'SOLANA')\n * @returns An array of XConnector instances compatible with the specified chain type\n */\n\nexport function useXConnectors(xChainType: ChainType | undefined): XConnector[] {\n const xService = useXService(xChainType);\n const evmConnectors = useConnectors();\n const suiWallets = useWallets();\n const { data: stellarXConnectors } = useStellarXConnectors();\n\n const { wallets: solanaWallets } = useWallet();\n\n const xConnectors = useMemo((): XConnector[] => {\n if (!xChainType || !xService) {\n return [];\n }\n\n switch (xChainType) {\n case 'EVM':\n return evmConnectors.map(connector => new EvmXConnector(connector));\n case 'SUI':\n return suiWallets.map(wallet => new SuiXConnector(wallet));\n case 'STELLAR':\n return stellarXConnectors || [];\n case 'SOLANA':\n return solanaWallets\n .filter(wallet => wallet.readyState === 'Installed')\n .map(wallet => new SolanaXConnector(wallet));\n default:\n return xService.getXConnectors();\n }\n }, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets]);\n\n return xConnectors;\n}\n","import type { ChainType } from '@sodax/types';\nimport { useDisconnectWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useCallback } from 'react';\nimport { useDisconnect } from 'wagmi';\nimport { getXService } from '../actions';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\n/**\n * Hook for disconnecting from a specific blockchain wallet\n *\n * Handles disconnection logic for EVM, SUI, Solana and other supported chains.\n * Clears connection state from XWagmiStore.\n *\n * @param {void} - No parameters required\n * @returns {(xChainType: ChainType) => Promise<void>} Async function that disconnects from the specified chain\n *\n * @example\n * ```ts\n * const disconnect = useXDisconnect();\n *\n * const handleDisconnect = async (xChainType: ChainType) => {\n * await disconnect(xChainType);\n * };\n * ```\n */\nexport function useXDisconnect(): (xChainType: ChainType) => Promise<void> {\n // Get connection state and disconnect handler from store\n const xConnections = useXWagmiStore(state => state.xConnections);\n const unsetXConnection = useXWagmiStore(state => state.unsetXConnection);\n\n // Get chain-specific disconnect handlers\n const { disconnectAsync } = useDisconnect();\n const { mutateAsync: suiDisconnectAsync } = useDisconnectWallet();\n const solanaWallet = useWallet();\n\n return useCallback(\n async (xChainType: ChainType) => {\n // Handle disconnection based on chain type\n switch (xChainType) {\n case 'EVM':\n await disconnectAsync();\n break;\n case 'SUI':\n await suiDisconnectAsync();\n break;\n case 'SOLANA':\n await solanaWallet.disconnect();\n break;\n default: {\n // Handle other chain types\n const xService = getXService(xChainType);\n const xConnectorId = xConnections[xChainType]?.xConnectorId;\n const xConnector = xConnectorId ? xService.getXConnectorById(xConnectorId) : undefined;\n await xConnector?.disconnect();\n break;\n }\n }\n\n // Clear connection state from store\n unsetXConnection(xChainType);\n },\n [xConnections, unsetXConnection, disconnectAsync, suiDisconnectAsync, solanaWallet],\n );\n}\n","import { getXChainType } from '@/actions';\nimport { type UseQueryResult, keepPreviousData, useQuery } from '@tanstack/react-query';\nimport type { ChainId, XToken } from '@sodax/types';\nimport { useXService } from './useXService';\n\n/**\n * Hook to fetch token balances for multiple tokens on a specific chain\n *\n * @param params - Query parameters object\n * @param params.xChainId - Chain identifier (e.g. '0xa86a.avax', '0x1.base', '0x2.bsc', '0x89.polygon', '0x1.optimism')\n * @param params.xTokens - Array of token objects to fetch balances for.\n * @param params.address - Wallet address to fetch balances for. If undefined, returns empty object\n *\n * @returns UseQueryResult containing an object mapping token addresses to their balances as bigints.\n * The balances are denominated in the token's smallest unit (e.g. wei for ETH).\n * Returns empty object if wallet is not connected or service is unavailable.\n */\n/**\n * @example\n * ```tsx\n * // Example usage in a component\n * function TokenBalances({ tokens }: { tokens: XToken[] }) {\n * const { address } = useXAccount('EVM');\n * const { data: balances } = useXBalances({\n * xChainId: '0xa86a.avax',\n * xTokens: tokens,\n * address,\n * });\n *\n * return (\n * <div>\n * {tokens.map(token => (\n * <div key={token.address}>\n * {token.symbol}: {formatUnits(balances?.[token.address] || 0n, token.decimals)}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\n\nexport function useXBalances({\n xChainId,\n xTokens,\n address,\n}: { xChainId: ChainId; xTokens: XToken[]; address: string | undefined }): UseQueryResult<{\n [key: string]: bigint;\n}> {\n const xService = useXService(getXChainType(xChainId));\n return useQuery({\n queryKey: ['xBalances', xChainId, xTokens.map(x => x.symbol), address],\n queryFn: async () => {\n if (!xService) {\n return {};\n }\n\n const balances = await xService.getBalances(address, xTokens, xChainId);\n\n return balances;\n },\n enabled: !!xService,\n placeholderData: keepPreviousData,\n refetchInterval: 5_000,\n });\n}\n","import { getXChainType } from '@/actions';\nimport { useMemo } from 'react';\nimport { usePublicClient, useWalletClient } from 'wagmi';\nimport type { ChainId } from '@sodax/types';\nimport { getWagmiChainId } from '../utils';\nimport { useXAccount, useXService } from '..';\nimport type { SuiXService } from '../xchains/sui/SuiXService';\nimport { CHAIN_INFO, SupportedChainId } from '../xchains/icon/IconXService';\nimport type { InjectiveXService } from '../xchains/injective/InjectiveXService';\nimport { getNetworkEndpoints, Network } from '@injectivelabs/networks';\n\nexport function useWalletProviderOptions(xChainId: ChainId | undefined) {\n const xChainType = getXChainType(xChainId);\n\n const evmPublicClient = usePublicClient({\n chainId: xChainId ? getWagmiChainId(xChainId) : undefined,\n });\n const { data: evmWalletClient } = useWalletClient({\n chainId: xChainId ? getWagmiChainId(xChainId) : undefined,\n });\n\n const xService = useXService(getXChainType(xChainId));\n const xAccount = useXAccount(xChainId);\n\n return useMemo(() => {\n switch (xChainType) {\n case 'EVM': {\n return { walletClient: evmWalletClient, publicClient: evmPublicClient };\n }\n case 'SUI': {\n const suiXService = xService as SuiXService;\n return { client: suiXService.suiClient, wallet: suiXService.suiWallet, account: suiXService.suiAccount };\n }\n case 'ICON': {\n return { walletAddress: xAccount.address, rpcUrl: CHAIN_INFO[SupportedChainId.MAINNET].APIEndpoint };\n }\n case 'INJECTIVE': {\n const injectiveXService = xService as InjectiveXService;\n const endpoints = getNetworkEndpoints(Network.Mainnet);\n\n return {\n walletAddress: xAccount.address,\n msgBroadcaster: injectiveXService.msgBroadcaster,\n rpcUrl: endpoints.rpc,\n };\n }\n default:\n return undefined;\n }\n }, [xChainType, evmPublicClient, evmWalletClient, xService, xAccount]);\n}\n","import type { InjectiveXService } from '@/xchains/injective';\nimport { Wallet } from '@injectivelabs/wallet-base';\nimport React from 'react';\nimport { useEffect } from 'react';\nimport { useXService } from './useXService';\nimport type { EvmWalletStrategy } from '@injectivelabs/wallet-evm';\n\n/**\n * React hook that returns the current Ethereum chain ID when using MetaMask wallet for Injective.\n * Listens for chain changes and updates the state accordingly.\n *\n * @remarks\n * This hook only works with MetaMask wallet and requires the window.ethereum provider to be available.\n * For other wallets or when MetaMask is not available, it returns null.\n *\n * @returns The current Ethereum chain ID as a number, or null if not available/connected\n */\nexport default function useEthereumChainId(): number | null {\n const injectiveXService = useXService('INJECTIVE') as unknown as InjectiveXService;\n const [ethereumChainId, setEthereumChainId] = React.useState<number | null>(null);\n useEffect(() => {\n if (!injectiveXService?.walletStrategy?.getWallet()) return;\n const walletStrategy = injectiveXService.walletStrategy;\n if (walletStrategy.getWallet() !== Wallet.Metamask) return;\n\n const getEthereumChainId = async () => {\n const chainId = await walletStrategy.getEthereumChainId();\n setEthereumChainId(Number.parseInt(chainId));\n };\n getEthereumChainId();\n\n (walletStrategy.getStrategy() as EvmWalletStrategy).onChainIdChanged(getEthereumChainId);\n }, [injectiveXService?.walletStrategy]);\n\n return ethereumChainId;\n}\n","import { xChainMap } from '@/constants/xChains';\nimport { useCallback, useMemo } from 'react';\nimport { useAccount, useSwitchChain } from 'wagmi';\nimport type { ChainId } from '@sodax/types';\nimport { getXChainType } from '@/actions';\nimport type { InjectiveXService } from '@/xchains/injective';\nimport { useXService } from '@/hooks/useXService';\nimport useEthereumChainId from './useEthereumChainId';\nimport { mainnet } from 'viem/chains';\nimport { Wallet } from '@injectivelabs/wallet-base';\n\ninterface UseEvmSwitchChainReturn {\n isWrongChain: boolean;\n handleSwitchChain: () => void;\n}\n\n/**\n * Hook to handle EVM chain switching functionality\n *\n * @param expectedXChainId - The target chain ID to switch to (e.g. '0xa.optimism', '0x89.polygon')\n * @returns {Object} Object containing:\n * - isWrongChain: boolean indicating if current chain differs from expected chain\n * - handleSwitchChain: function to trigger chain switch to expected chain\n *\n * @example\n * ```tsx\n * function ChainSwitchButton({ targetChain }: { targetChain: ChainId }) {\n * const { isWrongChain, handleSwitchChain } = useEvmSwitchChain(targetChain);\n *\n * return (\n * <Button onClick={handleSwitchChain} disabled={!isWrongChain}>\n * Switch Network\n * </Button>\n * );\n * }\n * ```\n */\n\nexport const switchEthereumChain = async () => {\n const metamaskProvider = (window as any).ethereum as any;\n\n return await Promise.race([\n metamaskProvider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x1' }],\n }),\n new Promise<void>(resolve =>\n metamaskProvider.on('change', ({ chain }: { chain: { id: number } }) => {\n if (chain?.id === 1) {\n resolve();\n }\n }),\n ),\n ]);\n};\n\nexport const useEvmSwitchChain = (expectedXChainId: ChainId): UseEvmSwitchChainReturn => {\n const xChainType = getXChainType(expectedXChainId);\n const expectedChainId = xChainMap[expectedXChainId].id as number;\n\n const injectiveXService = useXService('INJECTIVE') as unknown as InjectiveXService;\n const ethereumChainId = useEthereumChainId();\n\n const { chainId } = useAccount();\n const isWrongChain = useMemo(() => {\n return (\n (xChainType === 'EVM' && chainId !== expectedChainId) ||\n (xChainType === 'INJECTIVE' &&\n injectiveXService &&\n injectiveXService.walletStrategy.getWallet() === Wallet.Metamask &&\n ethereumChainId !== mainnet.id)\n );\n }, [xChainType, chainId, expectedChainId, ethereumChainId, injectiveXService]);\n\n const { switchChain } = useSwitchChain();\n\n const handleSwitchChain = useCallback(() => {\n if (xChainType === 'INJECTIVE') {\n switchEthereumChain();\n } else {\n switchChain({ chainId: expectedChainId });\n }\n }, [switchChain, expectedChainId, xChainType]);\n\n return useMemo(\n () => ({\n isWrongChain,\n handleSwitchChain,\n }),\n [isWrongChain, handleSwitchChain],\n );\n};\n","import type { ChainId } from '@sodax/types';\nimport { useMemo } from 'react';\nimport {\n EvmWalletProvider,\n IconWalletProvider,\n SuiWalletProvider,\n InjectiveWalletProvider,\n StellarWalletProvider,\n SolanaWalletProvider,\n} from '@sodax/wallet-sdk-core';\nimport { getXChainType } from '../actions';\nimport type { InjectiveEoaAddress } from '@sodax/types';\nimport { usePublicClient, useWalletClient } from 'wagmi';\nimport { getWagmiChainId } from '../utils';\nimport { type SolanaXService, type StellarXService, useXAccount, useXService } from '..';\nimport type { SuiXService } from '../xchains/sui/SuiXService';\nimport { CHAIN_INFO, SupportedChainId } from '../xchains/icon/IconXService';\nimport type { InjectiveXService } from '../xchains/injective/InjectiveXService';\n\n/**\n * Hook to get the appropriate wallet provider based on the chain type.\n * Supports EVM, SUI, ICON and INJECTIVE chains.\n *\n * @param {ChainId | undefined} spokeChainId - The chain ID to get the wallet provider for. Can be any valid ChainId value.\n * @returns {EvmWalletProvider | SuiWalletProvider | IconWalletProvider | InjectiveWalletProvider | undefined}\n * The appropriate wallet provider instance for the given chain ID, or undefined if:\n * - No chain ID is provided\n * - Chain type is not supported\n * - Required wallet provider options are not available\n *\n * @example\n * ```tsx\n * // Get wallet provider for a specific chain\n * const walletProvider = useWalletProvider('sui');\n * ```\n */\nexport function useWalletProvider(\n spokeChainId: ChainId | undefined,\n):\n | EvmWalletProvider\n | SuiWalletProvider\n | IconWalletProvider\n | InjectiveWalletProvider\n | StellarWalletProvider\n | SolanaWalletProvider\n | undefined {\n const xChainType = getXChainType(spokeChainId);\n\n // EVM-specific hooks\n const evmPublicClient = usePublicClient({\n chainId: spokeChainId ? getWagmiChainId(spokeChainId) : undefined,\n });\n const { data: evmWalletClient } = useWalletClient({\n chainId: spokeChainId ? getWagmiChainId(spokeChainId) : undefined,\n });\n\n // Cross-chain hooks\n const xService = useXService(getXChainType(spokeChainId));\n const xAccount = useXAccount(spokeChainId);\n\n return useMemo(() => {\n switch (xChainType) {\n case 'EVM': {\n if (!evmWalletClient) {\n return undefined;\n }\n if (!evmPublicClient) {\n return undefined;\n }\n\n return new EvmWalletProvider({\n walletClient: evmWalletClient,\n publicClient: evmPublicClient,\n });\n }\n\n case 'SUI': {\n const suiXService = xService as SuiXService;\n const { client, wallet, account } = {\n client: suiXService.suiClient,\n wallet: suiXService.suiWallet,\n account: suiXService.suiAccount,\n };\n\n return new SuiWalletProvider({ client, wallet, account });\n }\n\n case 'ICON': {\n const { walletAddress, rpcUrl } = {\n walletAddress: xAccount.address,\n rpcUrl: CHAIN_INFO[SupportedChainId.MAINNET].APIEndpoint,\n };\n\n return new IconWalletProvider({\n walletAddress: walletAddress as `hx${string}` | undefined,\n rpcUrl: rpcUrl as `http${string}`,\n });\n }\n\n case 'INJECTIVE': {\n const injectiveXService = xService as InjectiveXService;\n if (!injectiveXService) {\n return undefined;\n // throw new Error('InjectiveXService is not initialized');\n }\n\n return new InjectiveWalletProvider({\n msgBroadcaster: injectiveXService.msgBroadcaster,\n });\n }\n\n case 'STELLAR': {\n const stellarXService = xService as StellarXService;\n\n return new StellarWalletProvider({\n type: 'BROWSER_EXTENSION',\n walletsKit: stellarXService.walletsKit,\n network: 'PUBLIC',\n });\n }\n\n case 'SOLANA': {\n const solanaXService = xService as SolanaXService;\n\n if (!solanaXService.wallet) {\n throw new Error('Wallet is not initialized');\n }\n\n if (!solanaXService.connection) {\n throw new Error('Connection is not initialized');\n }\n\n return new SolanaWalletProvider({\n wallet: solanaXService.wallet,\n connection: solanaXService.connection,\n });\n }\n\n default:\n return undefined;\n }\n }, [xChainType, evmPublicClient, evmWalletClient, xService, xAccount]);\n}\n","'use client';\n\n// biome-ignore lint/style/useImportType: <explanation>\nimport React from 'react';\nimport { useEffect, useMemo } from 'react';\n\n// sui\nimport { SuiClientProvider, WalletProvider as SuiWalletProvider } from '@mysten/dapp-kit';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\n// evm\nimport { WagmiProvider } from 'wagmi';\n\n// solana\nimport {\n ConnectionProvider as SolanaConnectionProvider,\n WalletProvider as SolanaWalletProvider,\n} from '@solana/wallet-adapter-react';\nimport { UnsafeBurnerWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport type { XConfig } from './types';\nimport { initXWagmiStore, InitXWagmiStore } from './useXWagmiStore';\n\nimport { getWagmiConfig } from './xchains/evm/EvmXService';\n\nexport const SodaxWalletProvider = ({ children, config }: { children: React.ReactNode; config: XConfig }) => {\n useEffect(() => {\n initXWagmiStore(config);\n }, [config]);\n\n const {\n EVM: { chains },\n SOLANA: { endpoint },\n } = config;\n\n const wallets = useMemo(() => [new UnsafeBurnerWalletAdapter()], []);\n\n const wagmiConfig = useMemo(() => {\n return getWagmiConfig(chains);\n }, [chains]);\n\n return (\n <WagmiProvider config={wagmiConfig}>\n <SuiClientProvider networks={{ mainnet: { url: getFullnodeUrl('mainnet') } }} defaultNetwork=\"mainnet\">\n <SuiWalletProvider autoConnect={true}>\n <SolanaConnectionProvider endpoint={endpoint}>\n <SolanaWalletProvider wallets={wallets} autoConnect>\n <InitXWagmiStore />\n {children}\n </SolanaWalletProvider>\n </SolanaConnectionProvider>\n </SuiWalletProvider>\n </SuiClientProvider>\n </WagmiProvider>\n );\n};\n","import type { ChainType } from '@sodax/types';\nimport type { EvmChainId } from '@/xchains/evm/EvmXService';\n\nexport type XAccount = {\n address: string | undefined;\n xChainType: ChainType | undefined;\n};\n\nexport type XConnection = {\n xAccount: XAccount;\n xConnectorId: string;\n};\n\nexport type CurrencyKey = string;\n\nexport enum WalletId {\n METAMASK = 'metamask',\n HANA = 'hana',\n PHANTOM = 'phantom',\n SUI = 'sui',\n KEPLR = 'keplr',\n}\n\nexport type EVMConfig = {\n chains: EvmChainId[];\n};\n\nexport type SuiConfig = {\n isMainnet: boolean;\n};\n\nexport type SolanaConfig = {\n endpoint: string;\n};\n\nexport type XConfig = {\n [key in ChainType]: key extends 'EVM'\n ? EVMConfig\n : key extends 'SUI'\n ? SuiConfig\n : key extends 'SOLANA'\n ? SolanaConfig\n : unknown;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/actions/getXChainType.ts","../src/actions/getXService.ts","../src/core/XService.ts","../src/core/XConnector.ts","../src/utils/index.ts","../src/xchains/evm/EvmXService.ts","../src/xchains/evm/EvmXConnector.ts","../src/xchains/icon/IconXService.ts","../src/xchains/icon/iconex/index.tsx","../src/xchains/icon/IconHanaXConnector.ts","../src/xchains/injective/InjectiveXService.ts","../src/xchains/injective/InjectiveKelprXConnector.ts","../src/xchains/injective/InjectiveMetamaskXConnector.ts","../src/xchains/injective/utils.ts","../src/xchains/solana/SolanaXService.ts","../src/xchains/solana/SolanaXConnector.ts","../src/xchains/stellar/CustomSorobanServer.ts","../src/xchains/stellar/utils.ts","../src/xchains/stellar/StellarXService.ts","../src/xchains/stellar/StellarWalletsKitXConnector.ts","../src/xchains/sui/SuiXService.ts","../src/xchains/sui/SuiXConnector.ts","../src/useXWagmiStore.ts","../src/hooks/useXConnection.ts","../src/hooks/useXAccount.ts","../src/hooks/useXAccounts.ts","../src/hooks/useXConnect.ts","../src/xchains/stellar/useStellarXConnectors.ts","../src/hooks/useXService.ts","../src/hooks/useXConnectors.ts","../src/hooks/useXDisconnect.ts","../src/hooks/useXBalances.ts","../src/hooks/useEthereumChainId.ts","../src/hooks/useEvmSwitchChain.ts","../src/hooks/useWalletProvider.ts","../src/hooks/useXSignMessage.ts","../src/xchains/solana/hooks/useAnchorProvider.tsx","../src/Hydrate.ts","../src/xchains/icon/actions.ts","../src/xchains/stellar/actions.ts","../src/SodaxWalletProvider.tsx","../src/types/index.ts"],"names":["address","baseChainInfo","InjectiveChainId","mainnet","Wallet","useMemo","useAccount","useCurrentAccount","useWallet","useQuery","React","switchEthereumChain","useCallback","useMutation","useEffect","useCurrentWallet","useConnection","SuiWalletProvider","SolanaConnectionProvider","SolanaWalletProvider","WalletId"],"mappings":"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","file":"index.mjs","sourcesContent":["import { baseChainInfo, type ChainId, type ChainType } from '@sodax/types';\n\nexport function getXChainType(xChainId: ChainId | undefined): ChainType | undefined {\n if (!xChainId) {\n return undefined;\n }\n return baseChainInfo[xChainId].type;\n}\n","import type { ChainType } from '@sodax/types';\n\nimport { IconXService, InjectiveXService, SolanaXService, StellarXService } from '..';\nimport { SuiXService } from '..';\nimport { EvmXService } from '..';\nimport type { XService } from '../core';\n\nexport function getXService(xChainType: ChainType): XService {\n switch (xChainType) {\n case 'EVM':\n return EvmXService.getInstance();\n case 'SUI':\n return SuiXService.getInstance();\n case 'SOLANA':\n return SolanaXService.getInstance();\n case 'ICON':\n return IconXService.getInstance();\n case 'INJECTIVE':\n return InjectiveXService.getInstance();\n case 'STELLAR':\n return StellarXService.getInstance();\n default:\n throw new Error(`Unsupported chain type: ${xChainType}`);\n }\n}\n","import type { ChainType, XToken } from '@sodax/types';\nimport type { XConnector } from './XConnector';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: XConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): XConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: XConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): XConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '../types';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n private readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n private readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n}\n","import { baseChainInfo, type ChainId, type XToken } from '@sodax/types';\n\nexport const isNativeToken = (xToken: XToken) => {\n const nativeAddresses = [\n 'cx0000000000000000000000000000000000000000',\n '0x0000000000000000000000000000000000000000',\n 'inj',\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n 'hx0000000000000000000000000000000000000000',\n '11111111111111111111111111111111', // solana\n 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA', // stellar,\n ];\n\n return nativeAddresses.includes(xToken.address);\n};\n\nexport const getWagmiChainId = (xChainId: ChainId): number => {\n return baseChainInfo[xChainId].chainId as number;\n};\n","import { XService } from '@/core/XService';\nimport type { RpcConfig, XToken } from '@sodax/types';\nimport { getWagmiChainId, isNativeToken } from '@/utils';\n\nimport { type Address, defineChain, erc20Abi } from 'viem';\nimport { getPublicClient } from 'wagmi/actions';\nimport { type Config, createConfig, http } from 'wagmi';\nimport {\n mainnet,\n avalanche,\n base,\n optimism,\n polygon,\n arbitrum,\n bsc,\n sonic,\n nibiru,\n lightlinkPhoenix,\n} from 'wagmi/chains';\n\n// HyperEVM chain is not supported by viem, so we need to define it manually\nexport const hyper = /*#__PURE__*/ defineChain({\n id: 999,\n name: 'HyperEVM',\n nativeCurrency: {\n decimals: 18,\n name: 'HYPE',\n symbol: 'HYPE',\n },\n rpcUrls: {\n default: { http: ['https://rpc.hyperliquid.xyz/evm'] },\n },\n blockExplorers: {\n default: {\n name: 'HyperEVMScan',\n url: 'https://hyperevmscan.io/',\n },\n },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 13051,\n },\n },\n});\n\nexport const createWagmiConfig = (config: RpcConfig) => {\n return createConfig({\n chains: [mainnet, avalanche, arbitrum, base, bsc, sonic, optimism, polygon, nibiru, hyper, lightlinkPhoenix],\n transports: {\n [mainnet.id]: http(config['mainnet']),\n [avalanche.id]: http(config['avalanche']),\n [arbitrum.id]: http(config['arbitrum']),\n [base.id]: http(config['base']),\n [bsc.id]: http(config['bsc']),\n [sonic.id]: http(config['sonic']),\n [optimism.id]: http(config['optimism']),\n [polygon.id]: http(config['polygon']),\n [nibiru.id]: http(config['nibiru']),\n [hyper.id]: http(config['hyper']),\n [lightlinkPhoenix.id]: http(config['lightlinkPhoenix']),\n },\n });\n};\n\n/**\n * Service class for handling EVM chain interactions.\n * Implements singleton pattern and provides methods for wallet/chain operations.\n */\n\nexport class EvmXService extends XService {\n private static instance: EvmXService;\n public wagmiConfig: Config | undefined;\n\n private constructor() {\n super('EVM');\n }\n\n getXConnectors() {\n return [];\n }\n\n public static getInstance(): EvmXService {\n if (!EvmXService.instance) {\n EvmXService.instance = new EvmXService();\n }\n return EvmXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return 0n;\n if (!this.wagmiConfig) return 0n;\n\n const chainId = getWagmiChainId(xToken.xChainId);\n\n if (isNativeToken(xToken)) {\n const balance = await getPublicClient(this.wagmiConfig, { chainId: chainId })?.getBalance({\n address: address as Address,\n });\n return balance || 0n;\n }\n\n throw new Error(`Unsupported token: ${xToken.symbol}`);\n }\n\n async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n if (!this.wagmiConfig) return {};\n\n const balancePromises = xTokens\n .filter(xToken => isNativeToken(xToken))\n .map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { symbol: xToken.symbol, address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n const tokenMap = balances.reduce((map, { address, balance }) => {\n if (balance) map[address] = balance;\n return map;\n }, {});\n\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n const xChainId = xTokens[0].xChainId;\n const result = await getPublicClient(this.wagmiConfig, { chainId: getWagmiChainId(xChainId) })?.multicall({\n contracts: nonNativeXTokens.map(token => ({\n abi: erc20Abi,\n address: token.address as `0x${string}`,\n functionName: 'balanceOf',\n args: [address],\n chainId: getWagmiChainId(xChainId),\n })),\n });\n\n return nonNativeXTokens\n .map((token, index) => ({\n symbol: token.symbol,\n address: token.address,\n balance: result?.[index]?.result?.toString() || '0',\n }))\n .reduce((acc, balance) => {\n acc[balance.address] = balance.balance;\n return acc;\n }, tokenMap);\n }\n}\n","import { XConnector } from '@/core/XConnector';\nimport type { XAccount } from '@/types';\nimport type { Connector } from 'wagmi';\n\nexport class EvmXConnector extends XConnector {\n connector: Connector;\n\n constructor(connector: Connector) {\n super('EVM', connector.name, connector.id);\n this.connector = connector;\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {\n return;\n }\n\n public get id() {\n return this.connector.id;\n }\n public get icon() {\n return this.connector.icon;\n }\n}\n","import { XService } from '@/core/XService';\nimport type { IconService } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nimport type { XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils';\n\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { IconService: IconServiceConstructor, Builder: IconBuilder, Converter: IconConverter } = IconSdk;\nexport interface CallData {\n target: string;\n method: string;\n params: string[];\n}\n\nexport enum SupportedChainId {\n MAINNET = 1,\n}\n\ninterface ChainInfo {\n readonly name: string;\n readonly node: string;\n readonly APIEndpoint: string;\n readonly debugAPIEndpoint: string;\n readonly chainId: number;\n readonly tracker: string;\n}\n\nexport const CHAIN_INFO: { readonly [chainId: number]: ChainInfo } = {\n [SupportedChainId.MAINNET]: {\n name: 'ICON Mainnet',\n node: 'https://ctz.solidwallet.io',\n APIEndpoint: 'https://ctz.solidwallet.io/api/v3',\n debugAPIEndpoint: 'https://api.icon.community/api/v3d',\n chainId: 1,\n tracker: 'https://tracker.icon.community',\n },\n};\n\nexport class IconXService extends XService {\n private static instance: IconXService;\n\n public iconService: IconService;\n\n private constructor() {\n super('ICON');\n this.iconService = new IconServiceConstructor(\n new IconServiceConstructor.HttpProvider(CHAIN_INFO[SupportedChainId.MAINNET].APIEndpoint),\n );\n }\n\n public static getInstance(): IconXService {\n if (!IconXService.instance) {\n IconXService.instance = new IconXService();\n }\n return IconXService.instance;\n }\n\n private async getAggregateData(requireSuccess: boolean, calls: CallData[]) {\n const rawTx = new IconBuilder.CallBuilder()\n // muticall address on mainnet\n .to('cxa4aa9185e23558cff990f494c1fd2845f6cbf741')\n .method('tryAggregate')\n .params({ requireSuccess: IconConverter.toHex(requireSuccess ? 1 : 0), calls })\n .build();\n\n try {\n const result = await this.iconService.call(rawTx).execute();\n const aggs = result['returnData'];\n\n const data = aggs.map(agg => {\n if (agg['success'] === '0x0') {\n return null;\n }\n return agg['returnData'];\n });\n\n return data;\n } catch (err) {\n console.error(err);\n return Array(calls.length).fill(null);\n }\n }\n\n async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n\n const balances = {};\n\n const nativeXToken = xTokens.find(xToken => isNativeToken(xToken));\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n\n if (nativeXToken) {\n const balance = await this.iconService.getBalance(address).execute();\n balances[nativeXToken.address] = BigInt(balance.toFixed());\n }\n\n const cds: CallData[] = nonNativeXTokens.map(token => {\n return {\n target: token.address,\n method: 'balanceOf',\n params: [address],\n };\n });\n\n const data: string[] = await this.getAggregateData(\n false,\n cds.filter(cd => cd.target.startsWith('cx')),\n );\n\n return nonNativeXTokens.reduce((agg, token, idx) => {\n const balance = data[idx];\n balances[token.address] = BigInt(balance);\n\n return agg;\n }, balances);\n }\n}\n","const ICONEX_RELAY_RESPONSE = 'ICONEX_RELAY_RESPONSE';\nconst ICONEX_RELAY_REQUEST = 'ICONEX_RELAY_REQUEST';\n\nexport enum ICONexRequestEventType {\n REQUEST_HAS_ACCOUNT = 'REQUEST_HAS_ACCOUNT',\n REQUEST_HAS_ADDRESS = 'REQUEST_HAS_ADDRESS',\n REQUEST_ADDRESS = 'REQUEST_ADDRESS',\n REQUEST_JSON = 'REQUEST_JSON',\n REQUEST_SIGNING = 'REQUEST_SIGNING',\n}\n\nexport enum ICONexResponseEventType {\n RESPONSE_HAS_ACCOUNT = 'RESPONSE_HAS_ACCOUNT',\n RESPONSE_HAS_ADDRESS = 'RESPONSE_HAS_ADDRESS',\n RESPONSE_ADDRESS = 'RESPONSE_ADDRESS',\n RESPONSE_JSON = 'RESPONSE_JSON',\n RESPONSE_SIGNING = 'RESPONSE_SIGNING',\n}\n\nexport interface ICONexRequestEvent {\n type: ICONexRequestEventType;\n payload?: any;\n}\n\nexport interface ICONexResponseEvent {\n type: ICONexResponseEventType;\n payload?: any;\n}\n\nexport type ICONexEvent = ICONexRequestEvent | ICONexResponseEvent;\n\nexport const request = (event: ICONexRequestEvent): Promise<ICONexResponseEvent> => {\n return new Promise((resolve, reject) => {\n const handler = evt => {\n window.removeEventListener(ICONEX_RELAY_RESPONSE, handler);\n resolve(evt.detail);\n };\n\n window.addEventListener(ICONEX_RELAY_RESPONSE, handler);\n window.dispatchEvent(\n new CustomEvent(ICONEX_RELAY_REQUEST, {\n detail: event,\n }),\n );\n });\n};\n","import type { XAccount } from '@/types';\nimport { ICONexRequestEventType, ICONexResponseEventType, request } from './iconex';\n\nimport { XConnector } from '@/core/XConnector';\n\nexport class IconHanaXConnector extends XConnector {\n constructor() {\n super('ICON', 'Hana Wallet', 'hana');\n }\n\n async connect(): Promise<XAccount | undefined> {\n const { hanaWallet } = window as any;\n if (window && !hanaWallet && !hanaWallet?.isAvailable) {\n window.open('https://chromewebstore.google.com/detail/hana-wallet/jfdlamikmbghhapbgfoogdffldioobgl', '_blank');\n return;\n }\n\n const detail = await request({\n type: ICONexRequestEventType.REQUEST_ADDRESS,\n });\n\n if (detail?.type === ICONexResponseEventType.RESPONSE_ADDRESS) {\n return {\n address: detail?.payload,\n xChainType: this.xChainType,\n };\n }\n\n return undefined;\n }\n\n async disconnect(): Promise<void> {\n console.log('HanaIconXConnector disconnected');\n }\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg';\n }\n}\n","import { XService } from '@/core/XService';\nimport { Network, getNetworkEndpoints } from '@injectivelabs/networks';\nimport { ChainGrpcWasmApi, IndexerGrpcAccountPortfolioApi } from '@injectivelabs/sdk-ts';\nimport { ChainId as InjectiveChainId } from '@injectivelabs/ts-types';\nimport { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport type { XToken } from '@sodax/types';\nimport { mainnet } from 'wagmi/chains';\nimport { WalletStrategy } from '@injectivelabs/wallet-strategy';\n\nexport class InjectiveXService extends XService {\n private static instance: InjectiveXService;\n\n public walletStrategy: WalletStrategy;\n public indexerGrpcAccountPortfolioApi: IndexerGrpcAccountPortfolioApi;\n public chainGrpcWasmApi: ChainGrpcWasmApi;\n public msgBroadcaster: MsgBroadcaster;\n\n private constructor() {\n super('INJECTIVE');\n\n const endpoints = getNetworkEndpoints(Network.Mainnet);\n\n this.walletStrategy = new WalletStrategy({\n chainId: InjectiveChainId.Mainnet,\n strategies: {},\n evmOptions: {\n evmChainId: mainnet.id,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n },\n });\n\n this.indexerGrpcAccountPortfolioApi = new IndexerGrpcAccountPortfolioApi(endpoints.indexer);\n this.chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc);\n this.msgBroadcaster = new MsgBroadcaster({\n walletStrategy: this.walletStrategy,\n network: Network.Mainnet,\n endpoints,\n });\n }\n\n public static getInstance(): InjectiveXService {\n if (!InjectiveXService.instance) {\n InjectiveXService.instance = new InjectiveXService();\n }\n return InjectiveXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken) {\n if (!address) return 0n;\n\n const portfolio = await this.indexerGrpcAccountPortfolioApi.fetchAccountPortfolioBalances(address);\n\n const xTokenAddress = xToken.address;\n\n const balance = portfolio.bankBalancesList.find(_balance => _balance.denom === xTokenAddress);\n if (balance) {\n return BigInt(balance.amount);\n }\n\n return 0n;\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { Wallet } from '@injectivelabs/wallet-base';\nimport { isCosmosWalletInstalled } from '@injectivelabs/wallet-cosmos';\nimport { InjectiveXService } from './InjectiveXService';\n\nexport class InjectiveKelprXConnector extends XConnector {\n constructor() {\n super('INJECTIVE', 'Keplr', Wallet.Keplr);\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!isCosmosWalletInstalled(Wallet.Keplr)) {\n window.open('https://chrome.google.com/webstore/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap?hl=en', '_blank');\n return;\n }\n\n this.getXService().walletStrategy.setWallet(Wallet.Keplr);\n const addresses = await this.getXService().walletStrategy.getAddresses();\n\n return {\n address: addresses?.[0],\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/keplr.svg';\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { getInjectiveAddress } from '@injectivelabs/sdk-ts';\nimport { isEvmBrowserWallet, Wallet } from '@injectivelabs/wallet-base';\nimport { InjectiveXService } from './InjectiveXService';\n\nexport class InjectiveMetamaskXConnector extends XConnector {\n constructor() {\n super('INJECTIVE', 'MetaMask', Wallet.Metamask);\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!isEvmBrowserWallet(Wallet.Metamask)) {\n window.open('https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en', '_blank');\n return;\n }\n\n this.getXService().walletStrategy.setWallet(Wallet.Metamask);\n const addresses = await this.getXService().walletStrategy.getAddresses();\n const injectiveAddresses = addresses.map(getInjectiveAddress);\n\n return {\n address: injectiveAddresses?.[0],\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n await this.getXService().walletStrategy.disconnect();\n }\n\n public get icon() {\n return 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/metamask.svg';\n }\n}\n","export const switchEthereumChain = async chainId => {\n const metamaskProvider = (window as any).ethereum as any;\n\n await Promise.race([\n metamaskProvider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId}` }],\n }),\n new Promise<void>(resolve =>\n metamaskProvider.on('change', ({ chain }: any) => {\n if (chain?.id === chainId) {\n resolve();\n }\n }),\n ),\n ]);\n};\n","import { XService } from '@/core/XService';\nimport { isNativeToken } from '@/utils';\nimport type { XToken } from '@sodax/types';\nimport { type Connection, PublicKey } from '@solana/web3.js';\nimport { getAccount, getAssociatedTokenAddressSync } from '@solana/spl-token';\nimport type { AnchorProvider } from '@coral-xyz/anchor';\nimport type { WalletContextState } from '@solana/wallet-adapter-react';\n\nexport class SolanaXService extends XService {\n private static instance: SolanaXService;\n\n public connection: Connection | undefined;\n public wallet: WalletContextState | undefined;\n public provider: AnchorProvider | undefined;\n\n private constructor() {\n super('SOLANA');\n }\n\n public static getInstance(): SolanaXService {\n if (!SolanaXService.instance) {\n SolanaXService.instance = new SolanaXService();\n }\n return SolanaXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const connection = this.connection;\n if (!connection) {\n throw new Error('Connection is not initialized');\n }\n\n try {\n if (isNativeToken(xToken)) {\n const newBalance = await connection.getBalance(new PublicKey(address));\n return BigInt(newBalance);\n }\n\n const tokenAccountPubkey = getAssociatedTokenAddressSync(new PublicKey(xToken.address), new PublicKey(address));\n const tokenAccount = await getAccount(connection, tokenAccountPubkey);\n return BigInt(tokenAccount.amount);\n } catch (e) {\n console.log('error', e);\n }\n\n return BigInt(0);\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { SolanaXService } from './SolanaXService';\n\nexport class SolanaXConnector extends XConnector {\n wallet: any;\n constructor(wallet: any) {\n super('SOLANA', wallet?.adapter.name, wallet?.adapter.name);\n this.wallet = wallet;\n }\n\n getXService(): SolanaXService {\n return SolanaXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this.wallet?.adapter.icon;\n }\n}\n","import {\n type FeeBumpTransaction,\n type Memo,\n type MemoType,\n type Operation,\n SorobanRpc,\n type Transaction,\n} from '@stellar/stellar-sdk';\n\nclass CustomSorobanServer extends SorobanRpc.Server {\n private readonly customHeaders: Record<string, string>;\n\n constructor(serverUrl: string, customHeaders: Record<string, string>) {\n super(serverUrl, {\n allowHttp: true,\n });\n this.customHeaders = customHeaders;\n }\n\n async simulateTransaction(\n tx: Transaction<Memo<MemoType>, Operation[]>,\n ): Promise<SorobanRpc.Api.SimulateTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'simulateTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error simulating TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n\n async sendTransaction(tx: Transaction | FeeBumpTransaction): Promise<SorobanRpc.Api.SendTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'sendTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error submitting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n\n async getTransaction(hash: string): Promise<SorobanRpc.Api.GetTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'getTransaction',\n params: { hash },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error getting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n}\n\nexport default CustomSorobanServer;\n","import {\n Address,\n Contract,\n type Memo,\n type MemoType,\n type Operation,\n TimeoutInfinite,\n type Transaction,\n type TransactionBuilder,\n scValToBigInt,\n xdr,\n} from '@stellar/stellar-sdk';\nimport type CustomSorobanServer from './CustomSorobanServer';\n\nexport const STELLAR_RLP_MSG_TYPE = { type: 'symbol' };\n\n// Can be used whenever you need an Address argument for a contract method\nexport const accountToScVal = (account: string) => new Address(account).toScVal();\n\nexport const simulateTx = async (\n tx: Transaction<Memo<MemoType>, Operation[]>,\n server: CustomSorobanServer,\n): Promise<any> => {\n const response = await server.simulateTransaction(tx);\n\n if (response !== undefined) {\n return response;\n }\n\n throw new Error('cannot simulate transaction');\n};\n\nexport const getTokenBalance = async (\n address: string,\n tokenId: string,\n txBuilder: TransactionBuilder,\n server: CustomSorobanServer,\n) => {\n const params = [accountToScVal(address)];\n const contract = new Contract(tokenId);\n const tx = txBuilder\n .addOperation(contract.call('balance', ...params))\n .setTimeout(TimeoutInfinite)\n .build();\n\n const result = await simulateTx(tx, server);\n\n return result.results ? scValToBigInt(xdr.ScVal.fromXDR(result.results[0].xdr, 'base64')) : 0n;\n};\n","import { XService } from '@/core/XService';\nimport { StellarWalletsKit, WalletNetwork, allowAllModules } from '@creit.tech/stellar-wallets-kit';\nimport * as StellarSdk from '@stellar/stellar-sdk';\nimport CustomSorobanServer from './CustomSorobanServer';\nimport { getTokenBalance } from './utils';\nimport type { XToken } from '@sodax/types';\n\nexport class StellarXService extends XService {\n private static instance: StellarXService;\n\n public walletsKit: StellarWalletsKit;\n public server: StellarSdk.Horizon.Server;\n public sorobanServer: CustomSorobanServer;\n\n private constructor() {\n super('STELLAR');\n\n this.walletsKit = new StellarWalletsKit({\n network: WalletNetwork.PUBLIC,\n modules: allowAllModules(),\n });\n\n this.server = new StellarSdk.Horizon.Server('https://horizon.stellar.org', { allowHttp: true });\n this.sorobanServer = new CustomSorobanServer('https://rpc.ankr.com/stellar_soroban', {});\n }\n\n public static getInstance(): StellarXService {\n if (!StellarXService.instance) {\n StellarXService.instance = new StellarXService();\n }\n return StellarXService.instance;\n }\n\n async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const stellarAccount = await this.server.loadAccount(address);\n\n if (xToken.symbol === 'XLM') {\n const xlmBalance = stellarAccount.balances.find(balance => balance.asset_type === 'native');\n if (xlmBalance) {\n return BigInt(xlmBalance.balance.replace('.', ''));\n }\n } else {\n try {\n const txBuilder = new StellarSdk.TransactionBuilder(stellarAccount, {\n fee: StellarSdk.BASE_FEE,\n networkPassphrase: StellarSdk.Networks.PUBLIC,\n });\n\n const balance = await getTokenBalance(address, xToken.address, txBuilder, this.sorobanServer);\n return balance;\n } catch (e) {\n console.error(`Error while fetching token on Stellar: ${xToken.symbol}, Error: ${e}`);\n }\n }\n\n return BigInt(0);\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { StellarXService } from './StellarXService';\nimport type { StellarWalletType } from './useStellarXConnectors';\n\nexport class StellarWalletsKitXConnector extends XConnector {\n _wallet: StellarWalletType;\n\n constructor(wallet: StellarWalletType) {\n super('STELLAR', wallet.name, wallet.id);\n this._wallet = wallet;\n }\n\n getXService(): StellarXService {\n return StellarXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n const kit = this.getXService().walletsKit;\n\n if (!this._wallet) {\n return;\n }\n\n if (!this._wallet.isAvailable && this._wallet.url) {\n window.open(this._wallet.url, '_blank');\n return;\n }\n\n kit.setWallet(this._wallet.id);\n const { address } = await kit.getAddress();\n\n return {\n address: address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this._wallet.icon;\n }\n}\n","import { XService } from '@/core/XService';\nimport type { XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils';\n\nexport class SuiXService extends XService {\n private static instance: SuiXService;\n\n public suiClient: any; // TODO: define suiClient type\n public suiWallet: any; // TODO: define suiWallet type\n public suiAccount: any; // TODO: define suiAccount type\n\n private constructor() {\n super('SUI');\n }\n\n public static getInstance(): SuiXService {\n if (!SuiXService.instance) {\n SuiXService.instance = new SuiXService();\n }\n return SuiXService.instance;\n }\n\n // getBalance is not used because getBalances uses getAllBalances which returns all balances\n\n async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n\n try {\n const allBalances = await this.suiClient.getAllBalances({\n owner: address,\n });\n const tokenMap = xTokens.reduce((map, xToken) => {\n let coinType = isNativeToken(xToken) ? '0x2::sui::SUI' : xToken.address;\n\n // TODO: hard coded for getting legacy bnUSD balance\n if (\n coinType ===\n '0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR'\n ) {\n coinType =\n '0x3917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR';\n }\n\n const balance = allBalances.find(b => b.coinType === coinType);\n\n if (balance) map[xToken.address] = balance.totalBalance;\n return map;\n }, {});\n\n return tokenMap;\n } catch (e) {\n console.log('error', e);\n return {};\n }\n }\n}\n","import type { XAccount } from '@/types';\n\nimport { XConnector } from '@/core';\nimport { SuiXService } from './SuiXService';\n\nexport class SuiXConnector extends XConnector {\n wallet: any;\n\n constructor(wallet: any) {\n // super('SUI', wallet.name, wallet.id);\n super('SUI', wallet?.name, wallet?.name);\n this.wallet = wallet;\n }\n\n getXService(): SuiXService {\n return SuiXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n return;\n }\n\n async disconnect(): Promise<void> {}\n\n public get icon() {\n return this.wallet?.icon;\n }\n}\n","'use client';\n\nimport type { ChainType } from '@sodax/types';\nimport { create } from 'zustand';\nimport { createJSONStorage, persist, devtools } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\nimport type { XService } from './core';\nimport type { XConnection } from './types';\nimport { EvmXService } from './xchains/evm';\nimport { InjectiveKelprXConnector, InjectiveMetamaskXConnector, InjectiveXService } from './xchains/injective';\nimport { SolanaXService } from './xchains/solana/SolanaXService';\nimport { StellarXService } from './xchains/stellar';\nimport { SuiXService } from './xchains/sui';\nimport { IconXService } from './xchains/icon';\nimport { IconHanaXConnector } from './xchains/icon/IconHanaXConnector';\n\ntype XWagmiStore = {\n xServices: Partial<Record<ChainType, XService>>;\n xConnections: Partial<Record<ChainType, XConnection>>;\n\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => void;\n unsetXConnection: (xChainType: ChainType) => void;\n};\n\nconst initXServices = () => {\n const xServices = {};\n ['EVM', 'INJECTIVE', 'STELLAR', 'SUI', 'SOLANA', 'ICON'].forEach(key => {\n const xChainType = key as ChainType;\n\n switch (xChainType) {\n // EVM, SUI, Solana wallet connectors are supported by their own sdks. wagmi, @mysten/dapp-kit, @solana/wallet-adapter-react.\n case 'EVM':\n xServices[xChainType] = EvmXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'SUI':\n xServices[xChainType] = SuiXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'SOLANA':\n xServices[xChainType] = SolanaXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n\n // Injective, Stellar, Icon wallet connectors are supported by sodax wallet-sdk-react sdk.\n case 'INJECTIVE':\n xServices[xChainType] = InjectiveXService.getInstance();\n xServices[xChainType].setXConnectors([new InjectiveMetamaskXConnector(), new InjectiveKelprXConnector()]);\n break;\n case 'STELLAR':\n xServices[xChainType] = StellarXService.getInstance();\n xServices[xChainType].setXConnectors([]);\n break;\n case 'ICON':\n xServices[xChainType] = IconXService.getInstance();\n xServices[xChainType].setXConnectors([new IconHanaXConnector()]);\n break;\n default:\n break;\n }\n });\n\n return xServices;\n};\n\nexport const useXWagmiStore = create<XWagmiStore>()(\n devtools(\n persist(\n immer((set, get) => ({\n xServices: initXServices(),\n xConnections: {},\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => {\n set(state => {\n state.xConnections[xChainType] = xConnection;\n });\n },\n unsetXConnection: (xChainType: ChainType) => {\n set(state => {\n delete state.xConnections[xChainType];\n });\n },\n })),\n {\n name: 'xwagmi-store',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({ xConnections: state.xConnections }),\n },\n ),\n { name: 'xwagmi-store' },\n ),\n);\n","import type { ChainType } from '@sodax/types';\nimport { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMemo } from 'react';\nimport { useAccount, useConnections } from 'wagmi';\nimport type { XConnection } from '../types';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\n/**\n * Hook for accessing connection details for a specific blockchain\n *\n * Retrieves the current connection state for the specified chain type,\n * including the connected account and connector ID.\n *\n * @param {ChainType} xChainType - The type of blockchain to get connection details for\n * @returns {XConnection | undefined} Connection details including account and connector ID, or undefined if not connected\n *\n * @example\n * ```ts\n * const connection = useXConnection('EVM');\n *\n * if (connection) {\n * console.log('Connected account:', connection.xAccount.address);\n * console.log('Using connector:', connection.xConnectorId);\n * }\n * ```\n */\nexport function useXConnection(xChainType: ChainType | undefined): XConnection | undefined {\n const xConnection = useXWagmiStore(state => (xChainType ? state.xConnections?.[xChainType] : undefined));\n\n const evmConnections = useConnections();\n const { address: evmAddress } = useAccount();\n const suiAccount = useCurrentAccount();\n const suiCurrentWallet = useCurrentWallet();\n const solanaWallet = useWallet();\n\n const xConnection2 = useMemo(() => {\n if (!xChainType) {\n return undefined;\n }\n\n switch (xChainType) {\n case 'EVM':\n return {\n xAccount: { address: evmAddress as string, xChainType },\n xConnectorId: evmConnections?.[0]?.connector.id,\n };\n\n case 'SUI':\n if (suiCurrentWallet.currentWallet && suiCurrentWallet.connectionStatus === 'connected') {\n return {\n xAccount: { address: suiAccount?.address, xChainType },\n xConnectorId: suiCurrentWallet.currentWallet.name,\n };\n }\n return undefined;\n\n case 'SOLANA':\n if (solanaWallet.connected) {\n return {\n xAccount: { address: solanaWallet.publicKey?.toString(), xChainType },\n xConnectorId: `${solanaWallet.wallet?.adapter.name}`,\n };\n }\n return undefined;\n default:\n return xConnection;\n }\n }, [xChainType, xConnection, evmAddress, suiAccount, evmConnections, suiCurrentWallet, solanaWallet]);\n\n return xConnection2;\n}\n","import { useMemo } from 'react';\n\nimport type { ChainId, ChainType } from '@sodax/types';\n\nimport type { XAccount } from '../types';\nimport { useXConnection } from './useXConnection';\nimport { getXChainType } from '../actions';\n\n/**\n * Hook to get the current connected account for a specific blockchain\n *\n * @param chainIdentifier - The blockchain identifier (either chain type like 'EVM' or chain ID like '0xa86a.avax')\n * @returns {XAccount} The current connected account, or undefined if no account is connected\n *\n * @example\n * ```ts\n * // Using ChainType (preferred)\n * const { address } = useXAccount('EVM');\n *\n * // Using ChainId\n * const { address } = useXAccount('0xa86a.avax');\n *\n * // Returns: { address: string | undefined, xChainType: ChainType | undefined }\n * ```\n */\nfunction isChainType(chainIdentifier: ChainType | ChainId): chainIdentifier is ChainType {\n return ['ICON', 'EVM', 'INJECTIVE', 'SUI', 'STELLAR', 'SOLANA'].includes(chainIdentifier);\n}\n\nexport function useXAccount(chainIdentifier?: ChainType | ChainId): XAccount {\n const resolvedChainType: ChainType | undefined = chainIdentifier\n ? isChainType(chainIdentifier)\n ? chainIdentifier\n : getXChainType(chainIdentifier as ChainId)\n : undefined;\n\n const xConnection = useXConnection(resolvedChainType);\n\n const xAccount = useMemo((): XAccount => {\n if (!resolvedChainType) {\n return {\n address: undefined,\n xChainType: undefined,\n };\n }\n\n return xConnection?.xAccount || { address: undefined, xChainType: resolvedChainType };\n }, [resolvedChainType, xConnection]);\n\n return xAccount;\n}\n","import { useMemo } from 'react';\n\nimport type { ChainType } from '@sodax/types';\nimport { useCurrentAccount } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useAccount } from 'wagmi';\n\nimport type { XAccount } from '../types';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\nexport function useXAccounts() {\n const xChainTypes = useXWagmiStore(state => Object.keys(state.xServices));\n const xConnections = useXWagmiStore(state => state.xConnections);\n const { address: evmAddress } = useAccount();\n const suiAccount = useCurrentAccount();\n const solanaWallet = useWallet();\n\n const xAccounts = useMemo(() => {\n const result: Partial<Record<ChainType, XAccount>> = {};\n for (const xChainType of xChainTypes) {\n const xConnection = xConnections[xChainType];\n\n if (xConnection?.xAccount) {\n result[xChainType] = xConnection.xAccount;\n } else {\n result[xChainType] = {\n address: undefined,\n xChainType,\n };\n }\n }\n\n if (evmAddress) {\n result['EVM'] = {\n address: evmAddress,\n xChainType: 'EVM',\n };\n }\n if (suiAccount) {\n result['SUI'] = {\n address: suiAccount.address,\n xChainType: 'SUI',\n };\n }\n if (solanaWallet.publicKey) {\n result['SOLANA'] = {\n address: solanaWallet.publicKey.toString(),\n xChainType: 'SOLANA',\n };\n }\n\n return result;\n }, [xChainTypes, xConnections, evmAddress, suiAccount, solanaWallet]);\n\n return xAccounts;\n}\n","import type { XAccount } from '@/types';\nimport { useConnectWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\nimport { useConnect } from 'wagmi';\nimport type { XConnector } from '../core/XConnector';\nimport { useXWagmiStore } from '../useXWagmiStore';\nimport type { EvmXConnector } from '../xchains/evm';\nimport type { SolanaXConnector } from '../xchains/solana';\nimport type { SuiXConnector } from '../xchains/sui';\n\n/**\n * Hook for connecting to various blockchain wallets across different chains\n *\n * Handles connection logic for EVM, SUI, Solana and other supported chains.\n * Sets up wallet connections and stores connection state in XWagmiStore.\n *\n * @param {void} - No parameters required\n * @returns {UseMutationResult<XAccount | undefined, Error, XConnector>} Mutation result containing:\n * - mutateAsync: Function to connect a wallet\n * - isPending: Boolean indicating if connection is in progress\n * - error: Any error that occurred\n * - data: Connected account data if successful\n *\n * @example\n * ```ts\n * const { mutateAsync: connect, isPending } = useXConnect();\n *\n * const handleConnect = async (connector: XConnector) => {\n * try {\n * await connect(connector);\n * } catch (err) {\n * console.error(err);\n * }\n * };\n * ```\n */\nexport function useXConnect(): UseMutationResult<XAccount | undefined, Error, XConnector> {\n const setXConnection = useXWagmiStore(state => state.setXConnection);\n\n const { connectAsync: evmConnectAsync } = useConnect();\n const { mutateAsync: suiConnectAsync } = useConnectWallet();\n\n const { select, connect } = useWallet();\n\n return useMutation({\n mutationFn: async (xConnector: XConnector) => {\n const xChainType = xConnector.xChainType;\n let xAccount: XAccount | undefined;\n\n switch (xChainType) {\n case 'EVM':\n await evmConnectAsync({ connector: (xConnector as EvmXConnector).connector });\n break;\n case 'SUI':\n await suiConnectAsync({ wallet: (xConnector as SuiXConnector).wallet });\n break;\n case 'SOLANA': {\n const walletName = (xConnector as SolanaXConnector).wallet.adapter.name;\n\n select(walletName);\n\n const adapter = (xConnector as SolanaXConnector).wallet.adapter;\n\n if (!adapter) throw new Error('No adapter found for Solana wallet');\n\n if (walletName === 'MetaMask') {\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n cleanup();\n reject(new Error('Wallet connection timeout'));\n }, 30000);\n\n const handleConnect = () => {\n cleanup();\n resolve();\n };\n\n const handleError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n const cleanup = () => {\n clearTimeout(timeout);\n adapter.off('connect', handleConnect);\n adapter.off('error', handleError);\n };\n\n adapter.on('connect', handleConnect);\n adapter.on('error', handleError);\n\n connect().catch(err => {\n cleanup();\n reject(err);\n });\n });\n }\n\n break;\n }\n\n default:\n xAccount = await xConnector.connect();\n break;\n }\n\n if (xAccount) {\n setXConnection(xConnector.xChainType, {\n xAccount,\n xConnectorId: xConnector.id,\n });\n }\n\n return xAccount;\n },\n });\n}\n","import { useXService } from '@/hooks';\nimport { type UseQueryResult, useQuery } from '@tanstack/react-query';\n\nimport { StellarWalletsKitXConnector, type StellarXService } from '.';\n\nexport type StellarWalletType = {\n icon: string;\n id: string;\n isAvailable: boolean;\n name: string;\n type: string;\n url: string;\n};\n\nexport const useStellarXConnectors = (): UseQueryResult<StellarWalletsKitXConnector[] | undefined, Error | null> => {\n const xService = useXService('STELLAR') as StellarXService;\n\n return useQuery({\n queryKey: ['stellar-wallets', xService],\n queryFn: async () => {\n if (!xService) {\n return [];\n }\n\n const wallets: StellarWalletType[] = await xService.walletsKit.getSupportedWallets();\n\n return wallets.filter(wallet => wallet.isAvailable).map(wallet => new StellarWalletsKitXConnector(wallet));\n },\n });\n};\n","import type { ChainType } from '@sodax/types';\nimport type { XService } from '../core';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\nexport function useXService(xChainType: ChainType | undefined): XService | undefined {\n const xService = useXWagmiStore(state => (xChainType ? state.xServices[xChainType] : undefined));\n return xService;\n}\n","import type { ChainType } from '@sodax/types';\nimport { useWallets } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useMemo } from 'react';\nimport { useConnectors } from 'wagmi';\nimport type { XConnector } from '../core';\nimport { EvmXConnector } from '../xchains/evm';\nimport { SolanaXConnector } from '../xchains/solana';\nimport { useStellarXConnectors } from '../xchains/stellar/useStellarXConnectors';\nimport { SuiXConnector } from '../xchains/sui';\nimport { useXService } from './useXService';\n\n/**\n * Hook to retrieve available wallet connectors for a specific blockchain type.\n *\n * This hook aggregates wallet connectors from different blockchain ecosystems:\n * - EVM: Uses wagmi connectors\n * - Sui: Uses Sui wallet adapters\n * - Stellar: Uses custom Stellar connectors\n * - Solana: Uses Solana wallet adapters (filtered to installed wallets only)\n *\n * @param xChainType - The blockchain type to get connectors for ('EVM' | 'SUI' | 'STELLAR' | 'SOLANA')\n * @returns An array of XConnector instances compatible with the specified chain type\n */\n\nexport function useXConnectors(xChainType: ChainType | undefined): XConnector[] {\n const xService = useXService(xChainType);\n const evmConnectors = useConnectors();\n const suiWallets = useWallets();\n const { data: stellarXConnectors } = useStellarXConnectors();\n\n const { wallets: solanaWallets } = useWallet();\n\n const xConnectors = useMemo((): XConnector[] => {\n if (!xChainType || !xService) {\n return [];\n }\n\n switch (xChainType) {\n case 'EVM':\n return evmConnectors.map(connector => new EvmXConnector(connector));\n case 'SUI':\n return suiWallets.map(wallet => new SuiXConnector(wallet));\n case 'STELLAR':\n return stellarXConnectors || [];\n case 'SOLANA':\n return solanaWallets\n .filter(wallet => wallet.readyState === 'Installed')\n .map(wallet => new SolanaXConnector(wallet));\n default:\n return xService.getXConnectors();\n }\n }, [xService, xChainType, evmConnectors, suiWallets, stellarXConnectors, solanaWallets]);\n\n return xConnectors;\n}\n","import type { ChainType } from '@sodax/types';\nimport { useDisconnectWallet } from '@mysten/dapp-kit';\nimport { useWallet } from '@solana/wallet-adapter-react';\nimport { useCallback } from 'react';\nimport { useDisconnect } from 'wagmi';\nimport { getXService } from '../actions';\nimport { useXWagmiStore } from '../useXWagmiStore';\n\n/**\n * Hook for disconnecting from a specific blockchain wallet\n *\n * Handles disconnection logic for EVM, SUI, Solana and other supported chains.\n * Clears connection state from XWagmiStore.\n *\n * @param {void} - No parameters required\n * @returns {(xChainType: ChainType) => Promise<void>} Async function that disconnects from the specified chain\n *\n * @example\n * ```ts\n * const disconnect = useXDisconnect();\n *\n * const handleDisconnect = async (xChainType: ChainType) => {\n * await disconnect(xChainType);\n * };\n * ```\n */\nexport function useXDisconnect(): (xChainType: ChainType) => Promise<void> {\n // Get connection state and disconnect handler from store\n const xConnections = useXWagmiStore(state => state.xConnections);\n const unsetXConnection = useXWagmiStore(state => state.unsetXConnection);\n\n // Get chain-specific disconnect handlers\n const { disconnectAsync } = useDisconnect();\n const { mutateAsync: suiDisconnectAsync } = useDisconnectWallet();\n const solanaWallet = useWallet();\n\n return useCallback(\n async (xChainType: ChainType) => {\n // Handle disconnection based on chain type\n switch (xChainType) {\n case 'EVM':\n await disconnectAsync();\n break;\n case 'SUI':\n await suiDisconnectAsync();\n break;\n case 'SOLANA':\n await solanaWallet.disconnect();\n break;\n default: {\n // Handle other chain types\n const xService = getXService(xChainType);\n const xConnectorId = xConnections[xChainType]?.xConnectorId;\n const xConnector = xConnectorId ? xService.getXConnectorById(xConnectorId) : undefined;\n await xConnector?.disconnect();\n break;\n }\n }\n\n // Clear connection state from store\n unsetXConnection(xChainType);\n },\n [xConnections, unsetXConnection, disconnectAsync, suiDisconnectAsync, solanaWallet],\n );\n}\n","import { getXChainType } from '@/actions';\nimport { type UseQueryResult, keepPreviousData, useQuery } from '@tanstack/react-query';\nimport type { ChainId, XToken } from '@sodax/types';\nimport { useXService } from './useXService';\n\n/**\n * Hook to fetch token balances for multiple tokens on a specific chain\n *\n * @param params - Query parameters object\n * @param params.xChainId - Chain identifier (e.g. '0xa86a.avax', '0x1.base', '0x2.bsc', '0x89.polygon', '0x1.optimism')\n * @param params.xTokens - Array of token objects to fetch balances for.\n * @param params.address - Wallet address to fetch balances for. If undefined, returns empty object\n *\n * @returns UseQueryResult containing an object mapping token addresses to their balances as bigints.\n * The balances are denominated in the token's smallest unit (e.g. wei for ETH).\n * Returns empty object if wallet is not connected or service is unavailable.\n */\n/**\n * @example\n * ```tsx\n * // Example usage in a component\n * function TokenBalances({ tokens }: { tokens: XToken[] }) {\n * const { address } = useXAccount('EVM');\n * const { data: balances } = useXBalances({\n * xChainId: '0xa86a.avax',\n * xTokens: tokens,\n * address,\n * });\n *\n * return (\n * <div>\n * {tokens.map(token => (\n * <div key={token.address}>\n * {token.symbol}: {formatUnits(balances?.[token.address] || 0n, token.decimals)}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\n\nexport function useXBalances({\n xChainId,\n xTokens,\n address,\n}: { xChainId: ChainId; xTokens: XToken[]; address: string | undefined }): UseQueryResult<{\n [key: string]: bigint;\n}> {\n const xService = useXService(getXChainType(xChainId));\n return useQuery({\n queryKey: ['xBalances', xChainId, xTokens.map(x => x.symbol), address],\n queryFn: async () => {\n if (!xService) {\n return {};\n }\n\n const balances = await xService.getBalances(address, xTokens);\n\n return balances;\n },\n enabled: !!xService,\n placeholderData: keepPreviousData,\n refetchInterval: 5_000,\n });\n}\n","import type { InjectiveXService } from '@/xchains/injective';\nimport { Wallet } from '@injectivelabs/wallet-base';\nimport React from 'react';\nimport { useEffect } from 'react';\nimport { useXService } from './useXService';\nimport type { EvmWalletStrategy } from '@injectivelabs/wallet-evm';\n\n/**\n * React hook that returns the current Ethereum chain ID when using MetaMask wallet for Injective.\n * Listens for chain changes and updates the state accordingly.\n *\n * @remarks\n * This hook only works with MetaMask wallet and requires the window.ethereum provider to be available.\n * For other wallets or when MetaMask is not available, it returns null.\n *\n * @returns The current Ethereum chain ID as a number, or null if not available/connected\n */\nexport default function useEthereumChainId(): number | null {\n const injectiveXService = useXService('INJECTIVE') as unknown as InjectiveXService;\n const [ethereumChainId, setEthereumChainId] = React.useState<number | null>(null);\n useEffect(() => {\n if (!injectiveXService?.walletStrategy?.getWallet()) return;\n const walletStrategy = injectiveXService.walletStrategy;\n if (walletStrategy.getWallet() !== Wallet.Metamask) return;\n\n const getEthereumChainId = async () => {\n const chainId = await walletStrategy.getEthereumChainId();\n setEthereumChainId(Number.parseInt(chainId));\n };\n getEthereumChainId();\n\n (walletStrategy.getStrategy() as EvmWalletStrategy).onChainIdChanged(getEthereumChainId);\n }, [injectiveXService?.walletStrategy]);\n\n return ethereumChainId;\n}\n","import { useCallback, useMemo } from 'react';\nimport { useAccount, useSwitchChain } from 'wagmi';\nimport { baseChainInfo, type ChainId } from '@sodax/types';\nimport { getXChainType } from '@/actions';\nimport type { InjectiveXService } from '@/xchains/injective';\nimport { useXService } from '@/hooks/useXService';\nimport useEthereumChainId from './useEthereumChainId';\nimport { mainnet } from 'viem/chains';\nimport { Wallet } from '@injectivelabs/wallet-base';\n\ninterface UseEvmSwitchChainReturn {\n isWrongChain: boolean;\n handleSwitchChain: () => void;\n}\n\n/**\n * Hook to handle EVM chain switching functionality\n *\n * @param expectedXChainId - The target chain ID to switch to (e.g. '0xa.optimism', '0x89.polygon')\n * @returns {Object} Object containing:\n * - isWrongChain: boolean indicating if current chain differs from expected chain\n * - handleSwitchChain: function to trigger chain switch to expected chain\n *\n * @example\n * ```tsx\n * function ChainSwitchButton({ targetChain }: { targetChain: ChainId }) {\n * const { isWrongChain, handleSwitchChain } = useEvmSwitchChain(targetChain);\n *\n * return (\n * <Button onClick={handleSwitchChain} disabled={!isWrongChain}>\n * Switch Network\n * </Button>\n * );\n * }\n * ```\n */\n\nexport const switchEthereumChain = async () => {\n const metamaskProvider = (window as any).ethereum as any;\n\n return await Promise.race([\n metamaskProvider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: '0x1' }],\n }),\n new Promise<void>(resolve =>\n metamaskProvider.on('change', ({ chain }: { chain: { id: number } }) => {\n if (chain?.id === 1) {\n resolve();\n }\n }),\n ),\n ]);\n};\n\nexport const useEvmSwitchChain = (expectedXChainId: ChainId): UseEvmSwitchChainReturn => {\n const xChainType = getXChainType(expectedXChainId);\n const expectedChainId = baseChainInfo[expectedXChainId].chainId as number;\n\n const injectiveXService = useXService('INJECTIVE') as unknown as InjectiveXService;\n const ethereumChainId = useEthereumChainId();\n\n const { chainId } = useAccount();\n const isWrongChain = useMemo(() => {\n return (\n (xChainType === 'EVM' && chainId !== expectedChainId) ||\n (xChainType === 'INJECTIVE' &&\n injectiveXService &&\n injectiveXService.walletStrategy.getWallet() === Wallet.Metamask &&\n ethereumChainId !== mainnet.id)\n );\n }, [xChainType, chainId, expectedChainId, ethereumChainId, injectiveXService]);\n\n const { switchChain } = useSwitchChain();\n\n const handleSwitchChain = useCallback(() => {\n if (xChainType === 'INJECTIVE') {\n switchEthereumChain();\n } else {\n switchChain({ chainId: expectedChainId });\n }\n }, [switchChain, expectedChainId, xChainType]);\n\n return useMemo(\n () => ({\n isWrongChain,\n handleSwitchChain,\n }),\n [isWrongChain, handleSwitchChain],\n );\n};\n","import type {\n ChainId,\n IEvmWalletProvider,\n IIconWalletProvider,\n IInjectiveWalletProvider,\n ISolanaWalletProvider,\n IStellarWalletProvider,\n ISuiWalletProvider,\n} from '@sodax/types';\nimport { useMemo } from 'react';\nimport {\n EvmWalletProvider,\n IconWalletProvider,\n SuiWalletProvider,\n InjectiveWalletProvider,\n StellarWalletProvider,\n SolanaWalletProvider,\n} from '@sodax/wallet-sdk-core';\nimport { getXChainType } from '../actions';\nimport { usePublicClient, useWalletClient } from 'wagmi';\nimport { type SolanaXService, type StellarXService, useXAccount, useXService } from '..';\nimport type { SuiXService } from '../xchains/sui/SuiXService';\nimport { CHAIN_INFO, SupportedChainId } from '../xchains/icon/IconXService';\nimport type { InjectiveXService } from '../xchains/injective/InjectiveXService';\n\n/**\n * Hook to get the appropriate wallet provider based on the chain type.\n * Supports EVM, SUI, ICON and INJECTIVE chains.\n *\n * @param {ChainId | undefined} spokeChainId - The chain ID to get the wallet provider for. Can be any valid ChainId value.\n * @returns {EvmWalletProvider | SuiWalletProvider | IconWalletProvider | InjectiveWalletProvider | undefined}\n * The appropriate wallet provider instance for the given chain ID, or undefined if:\n * - No chain ID is provided\n * - Chain type is not supported\n * - Required wallet provider options are not available\n *\n * @example\n * ```tsx\n * // Get wallet provider for a specific chain\n * const walletProvider = useWalletProvider('sui');\n * ```\n */\nexport function useWalletProvider(\n spokeChainId: ChainId | undefined,\n):\n | IEvmWalletProvider\n | ISuiWalletProvider\n | IIconWalletProvider\n | IInjectiveWalletProvider\n | IStellarWalletProvider\n | ISolanaWalletProvider\n | undefined {\n const xChainType = getXChainType(spokeChainId);\n // EVM-specific hooks\n const evmPublicClient = usePublicClient();\n\n const { data: evmWalletClient } = useWalletClient();\n\n // Cross-chain hooks\n const xService = useXService(getXChainType(spokeChainId));\n const xAccount = useXAccount(spokeChainId);\n\n return useMemo(() => {\n switch (xChainType) {\n case 'EVM': {\n if (!evmWalletClient) {\n return undefined;\n }\n if (!evmPublicClient) {\n return undefined;\n }\n\n return new EvmWalletProvider({\n walletClient: evmWalletClient,\n publicClient: evmPublicClient,\n });\n }\n\n case 'SUI': {\n const suiXService = xService as SuiXService;\n const { client, wallet, account } = {\n client: suiXService.suiClient,\n wallet: suiXService.suiWallet,\n account: suiXService.suiAccount,\n };\n\n return new SuiWalletProvider({ client, wallet, account });\n }\n\n case 'ICON': {\n const { walletAddress, rpcUrl } = {\n walletAddress: xAccount.address,\n rpcUrl: CHAIN_INFO[SupportedChainId.MAINNET].APIEndpoint,\n };\n\n return new IconWalletProvider({\n walletAddress: walletAddress as `hx${string}` | undefined,\n rpcUrl: rpcUrl as `http${string}`,\n });\n }\n\n case 'INJECTIVE': {\n const injectiveXService = xService as InjectiveXService;\n if (!injectiveXService) {\n return undefined;\n // throw new Error('InjectiveXService is not initialized');\n }\n\n return new InjectiveWalletProvider({\n msgBroadcaster: injectiveXService.msgBroadcaster,\n });\n }\n\n case 'STELLAR': {\n const stellarXService = xService as StellarXService;\n if (!stellarXService.walletsKit) {\n return undefined;\n }\n\n return new StellarWalletProvider({\n type: 'BROWSER_EXTENSION',\n walletsKit: stellarXService.walletsKit,\n network: 'PUBLIC',\n });\n }\n\n case 'SOLANA': {\n const solanaXService = xService as SolanaXService;\n\n if (!solanaXService.wallet) {\n return undefined;\n }\n\n if (!solanaXService.connection) {\n return undefined;\n }\n\n return new SolanaWalletProvider({\n wallet: solanaXService.wallet,\n connection: solanaXService.connection,\n });\n }\n\n default:\n return undefined;\n }\n }, [xChainType, evmPublicClient, evmWalletClient, xService, xAccount]);\n}\n","import { useWallet } from '@solana/wallet-adapter-react';\nimport { useMutation, type UseMutationResult } from '@tanstack/react-query';\nimport type { ChainType } from '@sodax/types';\nimport { useSignMessage } from 'wagmi';\nimport { useSignPersonalMessage } from '@mysten/dapp-kit';\nimport { StellarXService } from '@/xchains/stellar';\nimport { InjectiveXService } from '@/xchains/injective';\nimport { useXAccount } from './useXAccount';\nimport { getEthereumAddress } from '@injectivelabs/sdk-ts';\nimport { Wallet } from '@injectivelabs/wallet-base';\n\ntype SignMessageReturnType = `0x${string}` | Uint8Array | string | undefined;\n\nexport function useXSignMessage(): UseMutationResult<\n SignMessageReturnType,\n Error,\n { xChainType: ChainType; message: string },\n unknown\n> {\n const { signMessage } = useWallet();\n const { signMessageAsync: evmSignMessage } = useSignMessage();\n\n const { mutateAsync: signPersonalMessage } = useSignPersonalMessage();\n\n const { address: injectiveAddress } = useXAccount('INJECTIVE');\n\n return useMutation({\n mutationFn: async ({ xChainType, message }: { xChainType: ChainType; message: string }) => {\n let signature: SignMessageReturnType;\n\n switch (xChainType) {\n case 'EVM': {\n signature = await evmSignMessage({ message });\n break;\n }\n case 'SUI': {\n const res = await signPersonalMessage({ message: new Uint8Array(new TextEncoder().encode(message)) });\n signature = res.signature;\n break;\n }\n case 'SOLANA': {\n if (!signMessage) {\n throw new Error('Solana wallet not connected');\n }\n signature = await signMessage(new TextEncoder().encode(message));\n break;\n }\n\n case 'STELLAR': {\n const res = await StellarXService.getInstance().walletsKit.signMessage(message);\n signature = res.signedMessage;\n break;\n }\n\n case 'INJECTIVE': {\n if (!injectiveAddress) {\n throw new Error('Injective address not found');\n }\n\n const ethereumAddress = getEthereumAddress(injectiveAddress);\n const walletStrategy = InjectiveXService.getInstance().walletStrategy;\n const res = await walletStrategy.signArbitrary(\n walletStrategy.getWallet() === Wallet.Metamask ? ethereumAddress : injectiveAddress,\n message,\n );\n\n if (!res) {\n throw new Error('Injective signature not found');\n }\n signature = res;\n break;\n }\n\n default:\n console.warn('Unsupported chain type');\n break;\n }\n\n return signature;\n },\n });\n}\n","import { AnchorProvider } from '@coral-xyz/anchor';\nimport { type AnchorWallet, useConnection, useWallet } from '@solana/wallet-adapter-react';\n\nexport function useAnchorProvider() {\n const { connection } = useConnection();\n const wallet = useWallet();\n\n return new AnchorProvider(connection, wallet as AnchorWallet, { commitment: 'confirmed' });\n}\n","'use client';\n\nimport { useCurrentAccount, useCurrentWallet, useSuiClient } from '@mysten/dapp-kit';\nimport { useEffect } from 'react';\nimport { EvmXService } from './xchains/evm';\nimport { SolanaXService } from './xchains/solana/SolanaXService';\nimport { SuiXService } from './xchains/sui';\nimport { useAnchorProvider } from './xchains/solana/hooks/useAnchorProvider';\nimport { useConnection, useWallet } from '@solana/wallet-adapter-react';\nimport { useConfig } from 'wagmi';\n\nexport const Hydrate = () => {\n // sui\n const suiClient = useSuiClient();\n useEffect(() => {\n if (suiClient) {\n SuiXService.getInstance().suiClient = suiClient;\n }\n }, [suiClient]);\n const { currentWallet: suiWallet } = useCurrentWallet();\n useEffect(() => {\n if (suiWallet) {\n SuiXService.getInstance().suiWallet = suiWallet;\n }\n }, [suiWallet]);\n const suiAccount = useCurrentAccount();\n useEffect(() => {\n if (suiAccount) {\n SuiXService.getInstance().suiAccount = suiAccount;\n }\n }, [suiAccount]);\n\n // solana\n const { connection: solanaConnection } = useConnection();\n const solanaWallet = useWallet();\n const solanaProvider = useAnchorProvider();\n useEffect(() => {\n if (solanaConnection) {\n SolanaXService.getInstance().connection = solanaConnection;\n }\n }, [solanaConnection]);\n useEffect(() => {\n if (solanaWallet) {\n SolanaXService.getInstance().wallet = solanaWallet;\n }\n }, [solanaWallet]);\n useEffect(() => {\n if (solanaProvider) {\n SolanaXService.getInstance().provider = solanaProvider;\n }\n }, [solanaProvider]);\n\n // evm\n const wagmiConfig = useConfig();\n useEffect(() => {\n if (wagmiConfig) {\n EvmXService.getInstance().wagmiConfig = wagmiConfig;\n }\n }, [wagmiConfig]);\n\n return null;\n};\n","import { useXWagmiStore } from '@/useXWagmiStore';\nimport { ICONexRequestEventType, ICONexResponseEventType, request } from './iconex';\n\nexport const reconnectIcon = async () => {\n const iconConnection = useXWagmiStore.getState().xConnections.ICON;\n if (!iconConnection) return;\n\n const recentXConnectorId = iconConnection.xConnectorId;\n\n const detail = await request({\n type: ICONexRequestEventType.REQUEST_ADDRESS,\n });\n\n if (detail?.type === ICONexResponseEventType.RESPONSE_ADDRESS) {\n useXWagmiStore.setState({\n xConnections: {\n ...useXWagmiStore.getState().xConnections,\n ICON: {\n xAccount: {\n address: detail?.payload,\n xChainType: 'ICON',\n },\n xConnectorId: recentXConnectorId,\n },\n },\n });\n }\n};\n","import { useXWagmiStore } from '@/useXWagmiStore';\nimport { StellarXService } from './StellarXService';\n\nexport const reconnectStellar = async () => {\n const stellarConnection = useXWagmiStore.getState().xConnections.STELLAR;\n if (!stellarConnection) return;\n\n const recentXConnectorId = stellarConnection.xConnectorId;\n const stellarWalletKit = StellarXService.getInstance().walletsKit;\n stellarWalletKit.setWallet(recentXConnectorId);\n const { address } = await stellarWalletKit.getAddress();\n useXWagmiStore.setState({\n xConnections: {\n ...useXWagmiStore.getState().xConnections,\n STELLAR: {\n xAccount: {\n address,\n xChainType: 'STELLAR',\n },\n xConnectorId: recentXConnectorId,\n },\n },\n });\n};\n","'use client';\n\n// biome-ignore lint/style/useImportType: <explanation>\nimport React, { useMemo } from 'react';\n\n// sui\nimport { SuiClientProvider, WalletProvider as SuiWalletProvider } from '@mysten/dapp-kit';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\n// evm\nimport { WagmiProvider } from 'wagmi';\n\n// solana\nimport {\n ConnectionProvider as SolanaConnectionProvider,\n WalletProvider as SolanaWalletProvider,\n} from '@solana/wallet-adapter-react';\nimport { UnsafeBurnerWalletAdapter } from '@solana/wallet-adapter-wallets';\n\nimport type { RpcConfig } from '@sodax/types';\n\nimport { Hydrate } from './Hydrate';\nimport { createWagmiConfig } from './xchains/evm/EvmXService';\nimport { reconnectIcon } from './xchains/icon/actions';\n// import { reconnectInjective } from './xchains/injective/actions';\nimport { reconnectStellar } from './xchains/stellar/actions';\n\nexport const SodaxWalletProvider = ({ children, rpcConfig }: { children: React.ReactNode; rpcConfig: RpcConfig }) => {\n const wagmiConfig = useMemo(() => {\n return createWagmiConfig(rpcConfig);\n }, [rpcConfig]);\n\n const wallets = useMemo(() => [new UnsafeBurnerWalletAdapter()], []);\n\n return (\n <WagmiProvider config={wagmiConfig} reconnectOnMount={true}>\n <SuiClientProvider networks={{ mainnet: { url: getFullnodeUrl('mainnet') } }} defaultNetwork=\"mainnet\">\n <SuiWalletProvider autoConnect={true}>\n <SolanaConnectionProvider endpoint={rpcConfig['solana'] ?? ''}>\n <SolanaWalletProvider wallets={wallets} autoConnect>\n <Hydrate />\n {children}\n </SolanaWalletProvider>\n </SolanaConnectionProvider>\n </SuiWalletProvider>\n </SuiClientProvider>\n </WagmiProvider>\n );\n};\n\nreconnectIcon();\n// reconnectInjective();\nreconnectStellar();\n","import type { ChainType } from '@sodax/types';\n\nexport type XAccount = {\n address: string | undefined;\n xChainType: ChainType | undefined;\n};\n\nexport type XConnection = {\n xAccount: XAccount;\n xConnectorId: string;\n};\n\nexport type CurrencyKey = string;\n\nexport enum WalletId {\n METAMASK = 'metamask',\n HANA = 'hana',\n PHANTOM = 'phantom',\n SUI = 'sui',\n KEPLR = 'keplr',\n}\n"]}
|