diff --git a/signers/signer-solana/src/index.ts b/signers/signer-solana/src/index.ts index 43729efd24..b33d0700fb 100644 --- a/signers/signer-solana/src/index.ts +++ b/signers/signer-solana/src/index.ts @@ -7,5 +7,8 @@ export { getSolanaRpcNodes, simulateTransaction, } from './utils/index.js'; -export type { SolanaWeb3Signer } from './utils/index.js'; +export type { + SolanaWeb3Signer, + SolanaExternalProvider, +} from './utils/index.js'; export { setSolanaSignerConfig } from './config.js'; diff --git a/wallets/core/src/namespaces/solana/actions.ts b/wallets/core/src/namespaces/solana/actions.ts index 6fb01bb49b..714f53fd8a 100644 --- a/wallets/core/src/namespaces/solana/actions.ts +++ b/wallets/core/src/namespaces/solana/actions.ts @@ -37,3 +37,21 @@ export function connect( ); }; } +export function canEagerConnect(instance: () => ProviderAPI) { + return async () => { + const solanaInstance = instance(); + + if (!solanaInstance) { + throw new Error( + 'Trying to eagerly connect to your Solana wallet, but seems its instance is not available.' + ); + } + + try { + const result = await solanaInstance.connect({ onlyIfTrusted: true }); + return !!result; + } catch { + return false; + } + }; +} diff --git a/wallets/provider-all/src/index.ts b/wallets/provider-all/src/index.ts index 5c204062d3..22b326fec6 100644 --- a/wallets/provider-all/src/index.ts +++ b/wallets/provider-all/src/index.ts @@ -20,7 +20,7 @@ import * as leapCosmos from '@rango-dev/provider-leap-cosmos'; import { versions as ledger } from '@rango-dev/provider-ledger'; import * as mathwallet from '@rango-dev/provider-math-wallet'; import { versions as metamask } from '@rango-dev/provider-metamask'; -import * as okx from '@rango-dev/provider-okx'; +import { versions as okx } from '@rango-dev/provider-okx'; import { versions as phantom } from '@rango-dev/provider-phantom'; import { versions as rabby } from '@rango-dev/provider-rabby'; import * as ready from '@rango-dev/provider-ready'; @@ -117,7 +117,7 @@ export const allProviders = ( lazyProvider(legacyProviderImportsToVersionsInterface(cosmostation)), lazyProvider(legacyProviderImportsToVersionsInterface(exodus)), lazyProvider(legacyProviderImportsToVersionsInterface(mathwallet)), - lazyProvider(legacyProviderImportsToVersionsInterface(okx)), + okx, lazyProvider(legacyProviderImportsToVersionsInterface(tokenpocket)), lazyProvider(legacyProviderImportsToVersionsInterface(tomo)), lazyProvider(legacyProviderImportsToVersionsInterface(halo)), diff --git a/wallets/provider-okx/package.json b/wallets/provider-okx/package.json index 81fa34d6c6..159fd91f18 100644 --- a/wallets/provider-okx/package.json +++ b/wallets/provider-okx/package.json @@ -3,18 +3,18 @@ "version": "0.52.0", "license": "MIT", "type": "module", - "source": "./src/index.ts", - "main": "./dist/index.js", + "source": "./src/mod.ts", + "main": "./dist/mod.js", "exports": { - ".": "./dist/index.js" + ".": "./dist/mod.js" }, - "typings": "dist/index.d.ts", + "typings": "dist/mod.d.ts", "files": [ "dist", "src" ], "scripts": { - "build": "node ../../scripts/build/command.mjs --path wallets/provider-okx", + "build": "node ../../scripts/build/command.mjs --path wallets/provider-okx --inputs src/mod.ts", "ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json", "clean": "rimraf dist", "format": "prettier --write '{.,src}/**/*.{ts,tsx}'", @@ -30,4 +30,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/wallets/provider-okx/readme.md b/wallets/provider-okx/readme.md index f0190d7a6b..69a25aa453 100644 --- a/wallets/provider-okx/readme.md +++ b/wallets/provider-okx/readme.md @@ -1 +1,61 @@ -# @rango-dev/provider-okx +# OKX Wallet +OKX Wallet integration for hub. +[Homepage](https://www.okx.com/web3) | [Docs](https://www.okx.com/web3/build/docs) + +More about implementation status can be found [here](../readme.md). + +## Implementation notes/limitations + +### Group + +#### ✅ Solana +- Fully supported in this integration. +- No known limitations. + +--- + +#### ⚠️ EVM +Supported networks : +- Ethereum +- BSC +- Polygon +- Fantom +- Arbitrum +- Optimism +- Cronos +- Boba +- Gnosis +- Moonbeam +- Moonriver +- Harmony +- Avalanche C-Chain + + +#### 🚧 Cosmos +The wallet supports Cosmos, but it is **not implemented** in the current integration. + + +#### 🚧 TON +The wallet supports TON, but it is **not implemented** in the current integration. + + +#### 🚧 Sui +The wallet supports Sui, but it is **not implemented** in the current integration. + + +#### 🚧 UTXO Chains +The wallet supports UTXO-based networks, but they are **not implemented** in the current integration. + +### Feature + +#### ⚠️ Disconnect +After a dApp is disconnected, it **cannot reconnect automatically** unless the user also manually disconnects from the wallet itself. + +#### ⚠️ Switch Account +Switching accounts from the wallet interface **is not reflected in the dApp**. +The previously connected account remains active until the user performs a **full disconnect and reconnect**. + + +--- + +More wallet information can be found in [readme.md](../readme.md). diff --git a/wallets/provider-okx/src/constants.ts b/wallets/provider-okx/src/constants.ts new file mode 100644 index 0000000000..dc8590be62 --- /dev/null +++ b/wallets/provider-okx/src/constants.ts @@ -0,0 +1,68 @@ +import { type ProviderMetadata } from '@rango-dev/wallets-core'; +import { LegacyNetworks } from '@rango-dev/wallets-core/legacy'; +import { type BlockchainMeta, solanaBlockchain } from 'rango-types'; + +import getSigners from './signer.js'; +import { getInstanceOrThrow } from './utils.js'; + +export const WALLET_ID = 'okx'; +export const OKX_WALLET_SUPPORTED_CHAINS = [ + LegacyNetworks.ETHEREUM, + LegacyNetworks.BSC, + LegacyNetworks.POLYGON, + LegacyNetworks.FANTOM, + LegacyNetworks.ARBITRUM, + LegacyNetworks.OPTIMISM, + LegacyNetworks.CRONOS, + LegacyNetworks.BOBA, + LegacyNetworks.GNOSIS, + LegacyNetworks.MOONBEAM, + LegacyNetworks.MOONRIVER, + LegacyNetworks.HARMONY, + LegacyNetworks.AVAX_CCHAIN, +]; + +export const metadata: ProviderMetadata = { + name: 'OKX', + icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/okx/icon.svg', + extensions: { + chrome: + 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge', + brave: + 'https://chrome.google.com/webstore/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge', + firefox: 'https://addons.mozilla.org/en-US/firefox/addon/okexwallet', + homepage: 'https://www.okx.com/web3', + }, + properties: [ + { + name: 'namespaces', + value: { + selection: 'multiple', + data: [ + { + label: 'EVM', + value: 'EVM', + id: 'ETH', + getSupportedChains: (allBlockchains: BlockchainMeta[]) => + allBlockchains.filter((blockchainMeta) => + OKX_WALLET_SUPPORTED_CHAINS.includes( + blockchainMeta.name as LegacyNetworks + ) + ), + }, + { + label: 'Solana', + value: 'Solana', + id: 'SOLANA', + getSupportedChains: (allBlockchains: BlockchainMeta[]) => + solanaBlockchain(allBlockchains), + }, + ], + }, + }, + { + name: 'signers', + value: { getSigners: async () => getSigners(getInstanceOrThrow()) }, + }, + ], +}; diff --git a/wallets/provider-okx/src/helpers.ts b/wallets/provider-okx/src/helpers.ts deleted file mode 100644 index 02b1583ae1..0000000000 --- a/wallets/provider-okx/src/helpers.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { ProviderConnectResult } from '@rango-dev/wallets-shared'; - -import { Networks } from '@rango-dev/wallets-shared'; - -export function okx_instance() { - const { okxwallet } = window; - if (!okxwallet) { - return null; - } - const instances = new Map(); - if (okxwallet) { - instances.set(Networks.ETHEREUM, okxwallet); - } - if (okxwallet.solana) { - instances.set(Networks.SOLANA, okxwallet.solana); - } - - return instances; -} - -export async function getSolanaAccounts( - instance: any -): Promise { - const solanaInstance = await instance.get(Networks.SOLANA); - const results: ProviderConnectResult[] = []; - - if (solanaInstance) { - const solanaResponse = await solanaInstance.connect(); - const account = solanaResponse.publicKey.toString(); - - results.push({ - accounts: account ? [account] : [], - chainId: Networks.SOLANA, - }); - } - - return results; -} - -export const OKX_WALLET_SUPPORTED_CHAINS = [ - Networks.ETHEREUM, - Networks.BSC, - Networks.SOLANA, - Networks.POLYGON, - Networks.FANTOM, - Networks.ARBITRUM, - Networks.OPTIMISM, - Networks.CRONOS, - Networks.BOBA, - Networks.GNOSIS, - Networks.MOONBEAM, - Networks.MOONRIVER, - Networks.HARMONY, - Networks.AVAX_CCHAIN, -]; diff --git a/wallets/provider-okx/src/index.ts b/wallets/provider-okx/src/legacy/index.ts similarity index 68% rename from wallets/provider-okx/src/index.ts rename to wallets/provider-okx/src/legacy/index.ts index 1d76309381..28f572a504 100644 --- a/wallets/provider-okx/src/index.ts +++ b/wallets/provider-okx/src/legacy/index.ts @@ -1,3 +1,4 @@ +import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy'; import type { CanEagerConnect, CanSwitchNetwork, @@ -14,18 +15,16 @@ import { canSwitchNetworkToEvm, chooseInstance, getEvmAccounts, + getSolanaAccounts, Networks, switchNetworkForEvm, WalletTypes, } from '@rango-dev/wallets-shared'; import { isEvmBlockchain } from 'rango-types'; -import { - getSolanaAccounts, - okx_instance, - OKX_WALLET_SUPPORTED_CHAINS, -} from './helpers.js'; -import signer from './signer.js'; +import { OKX_WALLET_SUPPORTED_CHAINS } from '../constants.js'; +import signer from '../signer.js'; +import { okx } from '../utils.js'; const WALLET = WalletTypes.OKX; @@ -34,20 +33,22 @@ export const config = { defaultNetwork: Networks.ETHEREUM, }; -export const getInstance = okx_instance; +export const getInstance = okx; export const connect: Connect = async ({ instance, meta }) => { - let results: ProviderConnectResult[] = []; + const results: ProviderConnectResult[] = []; - const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM); + const evmInstance = chooseInstance(instance, meta, Networks.ETHEREUM); - if (evm_instance) { - const evm = await getEvmAccounts(evm_instance); - results.push(evm); + if (evmInstance) { + const evmResults = await getEvmAccounts(evmInstance); + results.push(evmResults); } const solanaResults = await getSolanaAccounts(instance); - results = [...results, ...solanaResults]; + results.push( + ...(Array.isArray(solanaResults) ? solanaResults : [solanaResults]) + ); return results; }; @@ -60,8 +61,14 @@ export const subscribe: Subscribe = ({ instance, updateAccounts, meta }) => { .find((blockchain) => blockchain.name === Networks.ETHEREUM)?.chainId; updateAccounts(addresses, eth_chainId); - const [{ accounts, chainId }] = await getSolanaAccounts(instance); - updateAccounts(accounts, chainId); + const solanaResults = await getSolanaAccounts(instance); + const resultsArray = Array.isArray(solanaResults) + ? solanaResults + : [solanaResults]; + + resultsArray.forEach(({ chainId, accounts }) => { + updateAccounts(accounts, chainId); + }); }; ethInstance?.on?.('accountsChanged', handleEvmAccountsChanged); @@ -84,7 +91,10 @@ export const switchNetwork: SwitchNetwork = async (options) => { export const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm; -export const getSigners: (provider: any) => Promise = signer; +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type Provider = any; +export const getSigners: (provider: Provider) => Promise = + signer; export const canEagerConnect: CanEagerConnect = async ({ instance, meta }) => { const evm_instance = chooseInstance(instance, meta, Networks.ETHEREUM); @@ -112,3 +122,16 @@ export const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = ( OKX_WALLET_SUPPORTED_CHAINS.includes(blockchainMeta.name as Networks) ), }); +const buildLegacyProvider: () => LegacyProviderInterface = () => ({ + config, + getInstance, + connect, + subscribe, + switchNetwork, + canSwitchNetworkTo, + getSigners, + getWalletInfo, + canEagerConnect, +}); + +export { buildLegacyProvider }; diff --git a/wallets/provider-okx/src/mod.ts b/wallets/provider-okx/src/mod.ts new file mode 100644 index 0000000000..d7cbd1745a --- /dev/null +++ b/wallets/provider-okx/src/mod.ts @@ -0,0 +1,12 @@ +import { defineVersions } from '@rango-dev/wallets-core/utils'; + +import { buildLegacyProvider } from './legacy/index.js'; +import { buildProvider } from './provider.js'; + +const versions = () => + defineVersions() + .version('0.0.0', buildLegacyProvider()) + .version('1.0.0', buildProvider()) + .build(); + +export { versions }; diff --git a/wallets/provider-okx/src/namespaces/evm.ts b/wallets/provider-okx/src/namespaces/evm.ts new file mode 100644 index 0000000000..d5f4e00e97 --- /dev/null +++ b/wallets/provider-okx/src/namespaces/evm.ts @@ -0,0 +1,50 @@ +import type { EvmActions } from '@rango-dev/wallets-core/namespaces/evm'; + +import { NamespaceBuilder } from '@rango-dev/wallets-core'; +import { + builders as commonBuilders, + standardizeAndThrowError, +} from '@rango-dev/wallets-core/namespaces/common'; +import { + actions, + builders, + hooks, +} from '@rango-dev/wallets-core/namespaces/evm'; + +import { WALLET_ID } from '../constants.js'; +import { evmOKX } from '../utils.js'; + +const [changeAccountSubscriber, changeAccountCleanup] = + hooks.changeAccountSubscriber(evmOKX); + +const connect = builders + .connect() + .action(actions.connect(evmOKX)) + .before(changeAccountSubscriber) + .or(changeAccountCleanup) + .or(standardizeAndThrowError) + .build(); + +const disconnect = commonBuilders + .disconnect() + .after(changeAccountCleanup) + .build(); + +const canSwitchNetwork = builders + .canSwitchNetwork() + .action(actions.canSwitchNetwork()) + .build(); + +const canEagerConnect = builders + .canEagerConnect() + .action(actions.canEagerConnect(evmOKX)) + .build(); + +const evm = new NamespaceBuilder('EVM', WALLET_ID) + .action(connect) + .action(disconnect) + .action(canEagerConnect) + .action(canSwitchNetwork) + .build(); + +export { evm }; diff --git a/wallets/provider-okx/src/namespaces/solana.ts b/wallets/provider-okx/src/namespaces/solana.ts new file mode 100644 index 0000000000..7d2a819050 --- /dev/null +++ b/wallets/provider-okx/src/namespaces/solana.ts @@ -0,0 +1,45 @@ +import type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana'; + +import { ActionBuilder, NamespaceBuilder } from '@rango-dev/wallets-core'; +import { + builders as commonBuilders, + standardizeAndThrowError, +} from '@rango-dev/wallets-core/namespaces/common'; +import { + actions, + builders, + hooks, +} from '@rango-dev/wallets-core/namespaces/solana'; + +import { WALLET_ID } from '../constants.js'; +import { solanaOKX } from '../utils.js'; + +const [changeAccountSubscriber, changeAccountCleanup] = + hooks.changeAccountSubscriber(solanaOKX); + +const connect = builders + .connect() + .action(actions.connect(solanaOKX)) + .before(changeAccountSubscriber) + .or(changeAccountCleanup) + .or(standardizeAndThrowError) + .build(); + +const disconnect = commonBuilders + .disconnect() + .after(changeAccountCleanup) + .build(); + +const canEagerConnect = new ActionBuilder( + 'canEagerConnect' +) + .action(actions.canEagerConnect(solanaOKX)) + .build(); + +const solana = new NamespaceBuilder('Solana', WALLET_ID) + .action(connect) + .action(disconnect) + .action(canEagerConnect) + .build(); + +export { solana }; diff --git a/wallets/provider-okx/src/provider.ts b/wallets/provider-okx/src/provider.ts new file mode 100644 index 0000000000..6138135b33 --- /dev/null +++ b/wallets/provider-okx/src/provider.ts @@ -0,0 +1,23 @@ +import { ProviderBuilder } from '@rango-dev/wallets-core'; + +import { metadata, WALLET_ID } from './constants.js'; +import { evm } from './namespaces/evm.js'; +import { solana } from './namespaces/solana.js'; +import { okx as okxInstance } from './utils.js'; + +const buildProvider = () => + new ProviderBuilder(WALLET_ID) + .init(function (context) { + const [, setState] = context.state(); + + if (okxInstance()) { + setState('installed', true); + console.debug('[okx] instance detected.', context); + } + }) + .config('metadata', metadata) + .add('solana', solana) + .add('evm', evm) + .build(); + +export { buildProvider }; diff --git a/wallets/provider-okx/src/signer.ts b/wallets/provider-okx/src/signer.ts index 9a3a10906d..f9b97f8cb8 100644 --- a/wallets/provider-okx/src/signer.ts +++ b/wallets/provider-okx/src/signer.ts @@ -1,4 +1,4 @@ -import type { LegacyNetworkProviderMap } from '@rango-dev/wallets-core/legacy'; +import type { Provider } from './types.js'; import type { SignerFactory } from 'rango-types'; import { @@ -8,10 +8,10 @@ import { } from '@rango-dev/wallets-shared'; import { DefaultSignerFactory, TransactionType as TxType } from 'rango-types'; -import { CustomSolanaSigner } from './solana-signer.js'; +import { OKXSolanaSigner } from './signers/solana.js'; export default async function getSigners( - provider: LegacyNetworkProviderMap + provider: Provider ): Promise { const ethProvider = getNetworkInstance(provider, Networks.ETHEREUM); const solProvider = getNetworkInstance(provider, Networks.SOLANA); @@ -20,6 +20,6 @@ export default async function getSigners( async () => await import('@rango-dev/signer-evm') ); signers.registerSigner(TxType.EVM, new DefaultEvmSigner(ethProvider)); - signers.registerSigner(TxType.SOLANA, new CustomSolanaSigner(solProvider)); + signers.registerSigner(TxType.SOLANA, new OKXSolanaSigner(solProvider)); return signers; } diff --git a/wallets/provider-okx/src/solana-signer.ts b/wallets/provider-okx/src/signers/solana.ts similarity index 68% rename from wallets/provider-okx/src/solana-signer.ts rename to wallets/provider-okx/src/signers/solana.ts index 53d18f589b..8f57f75076 100644 --- a/wallets/provider-okx/src/solana-signer.ts +++ b/wallets/provider-okx/src/signers/solana.ts @@ -1,10 +1,10 @@ -import { DefaultSolanaSigner } from '@rango-dev/signer-solana'; +import { + DefaultSolanaSigner, + type SolanaExternalProvider, +} from '@rango-dev/signer-solana'; import { SignerError, SignerErrorCode } from 'rango-types'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type SolanaExternalProvider = any; - -export class CustomSolanaSigner extends DefaultSolanaSigner { +export class OKXSolanaSigner extends DefaultSolanaSigner { constructor(provider: SolanaExternalProvider) { super(provider); } diff --git a/wallets/provider-okx/src/types.ts b/wallets/provider-okx/src/types.ts new file mode 100644 index 0000000000..b928dc07ab --- /dev/null +++ b/wallets/provider-okx/src/types.ts @@ -0,0 +1,12 @@ +import type { LegacyNetworks } from '@rango-dev/wallets-core/legacy'; +import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm'; +import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana'; + +export type ProviderObject = { + [LegacyNetworks.ETHEREUM]: EvmProviderApi; + [LegacyNetworks.SOLANA]: SolanaProviderApi; +}; +export type Provider = Map< + keyof ProviderObject, + ProviderObject[keyof ProviderObject] +>; diff --git a/wallets/provider-okx/src/utils.ts b/wallets/provider-okx/src/utils.ts new file mode 100644 index 0000000000..699438a291 --- /dev/null +++ b/wallets/provider-okx/src/utils.ts @@ -0,0 +1,58 @@ +import type { Provider } from './types.js'; +import type { ProviderAPI as EvmProviderApi } from '@rango-dev/wallets-core/namespaces/evm'; +import type { ProviderAPI as SolanaProviderApi } from '@rango-dev/wallets-core/namespaces/solana'; + +import { LegacyNetworks } from '@rango-dev/wallets-core/legacy'; + +export function okx(): Provider | null { + const { okxwallet } = window; + if (!okxwallet) { + return null; + } + const instances: Provider = new Map(); + if (okxwallet) { + instances.set(LegacyNetworks.ETHEREUM, okxwallet); + } + if (okxwallet.solana) { + instances.set(LegacyNetworks.SOLANA, okxwallet.solana); + } + + return instances; +} + +export function getInstanceOrThrow(): Provider { + const instances = okx(); + + if (!instances) { + throw new Error('OKX Wallet is not injected. Please check your wallet.'); + } + + return instances; +} + +export function evmOKX(): EvmProviderApi { + const instances = okx(); + + const evmInstance = instances?.get(LegacyNetworks.ETHEREUM); + + if (!evmInstance) { + throw new Error( + 'OKX Wallet not injected or EVM not enabled. Please check your wallet.' + ); + } + + return evmInstance as EvmProviderApi; +} + +export function solanaOKX(): SolanaProviderApi { + const instance = okx(); + const solanaInstance = instance?.get(LegacyNetworks.SOLANA); + + if (!solanaInstance) { + throw new Error( + 'OKX Wallet not injected or Solana not enabled. Please check your wallet.' + ); + } + + return solanaInstance as SolanaProviderApi; +} diff --git a/wallets/provider-phantom/src/namespaces/solana.ts b/wallets/provider-phantom/src/namespaces/solana.ts index f2cab06a68..bade5cf44e 100644 --- a/wallets/provider-phantom/src/namespaces/solana.ts +++ b/wallets/provider-phantom/src/namespaces/solana.ts @@ -7,6 +7,7 @@ import { standardizeAndThrowError, } from '@rango-dev/wallets-core/namespaces/common'; import { + actions, builders, CAIP_NAMESPACE, CAIP_SOLANA_CHAIN_ID, @@ -64,27 +65,10 @@ const disconnect = commonBuilders .after(changeAccountCleanup) .build(); -export const canEagerConnectAction = async () => { - const solanaInstance = solanaPhantom(); - - if (!solanaInstance) { - throw new Error( - 'Trying to eagerly connect to your Solana wallet, but seems its instance is not available.' - ); - } - - try { - const result = await solanaInstance.connect({ onlyIfTrusted: true }); - return !!result; - } catch { - return false; - } -}; - const canEagerConnect = new ActionBuilder( 'canEagerConnect' ) - .action(canEagerConnectAction) + .action(actions.canEagerConnect(solanaPhantom)) .build(); const solana = new NamespaceBuilder('Solana', WALLET_ID) diff --git a/wallets/provider-phantom/src/namespaces/sui.ts b/wallets/provider-phantom/src/namespaces/sui.ts index 1a00e51604..e008a5bf45 100644 --- a/wallets/provider-phantom/src/namespaces/sui.ts +++ b/wallets/provider-phantom/src/namespaces/sui.ts @@ -6,11 +6,11 @@ import { builders as commonBuilders, standardizeAndThrowError, } from '@rango-dev/wallets-core/namespaces/common'; +import { actions as solanaActions } from '@rango-dev/wallets-core/namespaces/solana'; import { builders, hooks } from '@rango-dev/wallets-core/namespaces/sui'; import { WALLET_ID, WALLET_NAME_IN_WALLET_STANDARD } from '../constants.js'; - -import { canEagerConnectAction as solanaCanEagerConnectAction } from './solana.js'; +import { solanaPhantom } from '../utils.js'; const [changeAccountSubscriber, changeAccountCleanup] = hooks.changeAccountSubscriber({ @@ -39,7 +39,7 @@ const disconnect = commonBuilders const canEagerConnect = new ActionBuilder( 'canEagerConnect' ) - .action(solanaCanEagerConnectAction) + .action(solanaActions.canEagerConnect(solanaPhantom)) .build(); const sui = new NamespaceBuilder('Sui', WALLET_ID) diff --git a/wallets/provider-phantom/src/namespaces/utxo.ts b/wallets/provider-phantom/src/namespaces/utxo.ts index 0215cb342d..548d8334ec 100644 --- a/wallets/provider-phantom/src/namespaces/utxo.ts +++ b/wallets/provider-phantom/src/namespaces/utxo.ts @@ -1,4 +1,3 @@ -import type { SolanaActions } from '@rango-dev/wallets-core/namespaces/solana'; import type { ProviderAPI, UtxoActions, @@ -15,6 +14,10 @@ import { standardizeAndThrowError, } from '@rango-dev/wallets-core/namespaces/common'; import { builders as commonBuilders } from '@rango-dev/wallets-core/namespaces/common'; +import { + actions as solanaActions, + type SolanaActions, +} from '@rango-dev/wallets-core/namespaces/solana'; import { builders, CAIP_BITCOIN_CHAIN_ID, @@ -27,9 +30,7 @@ import { } from '@rango-dev/wallets-shared'; import { WALLET_ID } from '../constants.js'; -import { bitcoinPhantom } from '../utils.js'; - -import { canEagerConnectAction as solanaCanEagerConnectAction } from './solana.js'; +import { bitcoinPhantom, solanaPhantom } from '../utils.js'; // eslint-disable-next-line @typescript-eslint/no-explicit-any type AnyFunction = (...args: any[]) => any; @@ -158,7 +159,7 @@ const disconnect = commonBuilders const canEagerConnect = new ActionBuilder( 'canEagerConnect' ) - .action(solanaCanEagerConnectAction) + .action(solanaActions.canEagerConnect(solanaPhantom)) .build(); const utxo = new NamespaceBuilder('UTXO', WALLET_ID) diff --git a/wallets/readme.md b/wallets/readme.md index c251940275..12e63b7130 100644 --- a/wallets/readme.md +++ b/wallets/readme.md @@ -137,6 +137,7 @@ For better user experience, wallet provider tries to connect to a wallet only wh | [Ledger](provider-ledger/readme.md) | ⚠️ | ❌ | ✅ | ❌ | ❌ | ❌ | | [MetaMask](provider-metamask/readme.md) | ✅ | ❌ | 🚧 | ❌ | ❌ | ❌ | | [Phantom](provider-phantom/readme.md) | ⚠️ | ⚠️ | ✅ | ❌ | ❌ | ✅ | +| [OKX](provider-okx/readme.md) | ⚠️ | 🚧 | ✅ | 🚧 | 🚧 | 🚧 | | [Rabby](provider-rabby/readme.md) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | [Slush](provider-slush/readme.md) | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | | [SafePal](provider-safepal/readme.md) | ✅ | 🚧 | ✅ | ❌ | ❌ | ❌ | @@ -147,9 +148,10 @@ For better user experience, wallet provider tries to connect to a wallet only wh | Wallet | Switch Account | Switch Network | Auto Connect | Interface | Cross Browser | | ------------ | -------------- | -------------- | ------------ | ------------------------- | ------------- | -| CoinBase | ⚠️ | ✅ | ✅ | Injected | ❌ | +| CoinBase | ⚠️ | ✅ | ✅ | Injected | ❌ | | Ledger | ❌ | ❌ | ❌ | Transport | ✅ | | MetaMask | ✅ | ✅ | ✅ | Injected | ✅ | +| OKX | ⚠️ | ✅ | ✅ | Injected | ✅ | | Phantom | ✅ | ✅ | ⚠️ | Wallet Standard, Injected | ✅ | | Rabby | ✅ | ✅ | ✅ | Injected | ✅ | | Slush | ❌ | ❌ | ✅ | Wallet Standard | ❌ | @@ -176,7 +178,6 @@ For better user experience, wallet provider tries to connect to a wallet only wh | Ledger | Ethereum,Solana | - | ✗ | https://www.ledger.com/ | | Math Wallet | BTC,EVM,Solana,Aptos,Tron,Polkadot,Cosmos | BTC,Aptos,Tron,Polkadot,Cosmos | ✓ | https://mathwallet.org/en-us/ | | Metamask | EVM | - | ✓ | - | -| OKX | EVM,Solana,Cosmos | Cosmos | ✓ | https://www.okx.com/web3 | | Ready | Starknet | - | ✓ | https://www.ready.co/ | | Safe | EVM | - | ✓ | https://safe.global/ | | Solflare | Solana | - | ✗ | https://solflare.com |