From 2ed95940099b77dc67196f054a943fd93955b84c Mon Sep 17 00:00:00 2001 From: HoangVD2 <102846781+HoangVD2@users.noreply.github.com> Date: Tue, 12 Mar 2024 22:18:59 +0700 Subject: [PATCH] Revert "docs: create content for Libraries Integration (#9)" (#11) This reverts commit 103c55dee292ffe27cb39253acc8ebecf9f54cc3. --- .vitepress/config.ts | 10 +- developers/blocknative-xdefi-integration.md | 27 -- developers/cosmoskit-xdefi-integration.md | 43 --- developers/introduction.md | 6 +- developers/libraries-integration.md | 10 - developers/rainbowkit-xdefi-integration.md | 122 ------- .../solana-adapter-xdefi-integration.md | 344 ------------------ 7 files changed, 8 insertions(+), 554 deletions(-) delete mode 100644 developers/cosmoskit-xdefi-integration.md delete mode 100644 developers/libraries-integration.md delete mode 100644 developers/rainbowkit-xdefi-integration.md delete mode 100644 developers/solana-adapter-xdefi-integration.md diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 7aa2fe90f..ea001f0b0 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -422,7 +422,7 @@ function sidebarHome() { collapsed: true, items: [ { - text: "XDEFI Wallet Integration", + text: "XDEFI Wallet integration", link: "/developers/xdefi-wallet-integration", collapsed: true, items: [ @@ -499,7 +499,7 @@ function sidebarHome() { ], }, { - text: "Blockchains Integration", + text: "Blockhains Integration", link: "/developers/blockchains-integration", collapsed: true, items: [ @@ -566,7 +566,7 @@ function sidebarHome() { ], }, { - text: "Libraries Integration", + text: "Libraries integration", link: "/developers/libraries-integration", collapsed: true, items: [ @@ -576,11 +576,11 @@ function sidebarHome() { link: "/developers/blocknative-xdefi-integration", }, { - text: "CosmosKit", + text: "Cosmos Kit", link: "/developers/cosmoskit-xdefi-integration", }, { - text: "RainbowKit", + text: "Rainbowkit", link: "/developers/rainbowkit-xdefi-integration", }, { diff --git a/developers/blocknative-xdefi-integration.md b/developers/blocknative-xdefi-integration.md index aff3d4c20..ff74bfea2 100644 --- a/developers/blocknative-xdefi-integration.md +++ b/developers/blocknative-xdefi-integration.md @@ -1,28 +1 @@ # BlockNative XDEFI Integration - -First, your app need to install the core Onboard library, the injected wallets module and optionally ethers js to support browser extension and mobile wallets: - -```bash -yarn add @web3-onboard/core @web3-onboard/injected-wallets ethers -``` - -Then initialize in your app: - -```javascript -import Onboard from "@web3-onboard/core"; -import xdefiWalletModule from "@web3-onboard/xdefi"; - -// initialize the module with options -const xdefiWalletSdk = xdefiWalletModule(); - -const onboard = Onboard({ - // ... other Onboard options - wallets: [ - xdefiWalletSdk(), - //... other wallets - ], -}); - -const connectedWallets = await onboard.connectWallet(); -console.log(connectedWallets); -``` diff --git a/developers/cosmoskit-xdefi-integration.md b/developers/cosmoskit-xdefi-integration.md deleted file mode 100644 index a07d6a250..000000000 --- a/developers/cosmoskit-xdefi-integration.md +++ /dev/null @@ -1,43 +0,0 @@ -# CosmosKit XDEFI Integration - -First, your app need to install 2 packages for the XDEFI: - -- `@cosmos-kit/xdefi` -- `@cosmos-kit/xdefi-extension` - -`@cosmos-kit/xdefi` export all available xdefi wallets (currently only extension available), while if you only want to add a particular one, choose `@cosmos-kit/xdefi-extension` - -> Note: all these packages export `wallets` and it's an array of `MainWalletBase` - -Take `@cosmos-kit/xdefi` for example - -### add `@cosmos-kit/xdefi` - -```bash -yarn add @cosmos-kit/xdefi -``` - -### import the wallets - -```javascript -import { wallets as xdefi } from "@cosmos-kit/xdefi"; -``` - -### add to your provider - -```javascript -function MyCosmosApp({ Component, pageProps }: AppProps) { - return ( - - - - ); -} - -export default MyCosmosApp; -``` diff --git a/developers/introduction.md b/developers/introduction.md index 466097a56..ba6541860 100644 --- a/developers/introduction.md +++ b/developers/introduction.md @@ -53,7 +53,7 @@ XDEFI Wallet is also integrated in a large panel of libraries to make it accessi You can acces the list from here: -- [BlockNative](./blocknative-xdefi-integration) -- [CosmosKit](./cosmoskit-xdefi-integration) -- [RainbowKit](./rainbowkit-xdefi-integration) +- [BlockNative](./blocknative-xdefi-integration +- [Cosmos Kit](./cosmoskit-xdefi-integration) +- [Rainbowkit](./rainbowkit-xdefi-integration) - [Solana Adapter](./solana-adapter-xdefi-integration) diff --git a/developers/libraries-integration.md b/developers/libraries-integration.md deleted file mode 100644 index 728ba9263..000000000 --- a/developers/libraries-integration.md +++ /dev/null @@ -1,10 +0,0 @@ -# Libraries Integration - -XDEFI Wallet is also integrated in a large panel of libraries to make it accessible to any developer's needs. - -You can access the list from here: - -- [BlockNative](./blocknative-xdefi-integration) -- [CosmosKit](./cosmoskit-xdefi-integration) -- [RainbowKit](./rainbowkit-xdefi-integration) -- [Solana Adapter](./solana-adapter-xdefi-integration) diff --git a/developers/rainbowkit-xdefi-integration.md b/developers/rainbowkit-xdefi-integration.md deleted file mode 100644 index 15f9fb89a..000000000 --- a/developers/rainbowkit-xdefi-integration.md +++ /dev/null @@ -1,122 +0,0 @@ -# RainbowKit XDEFI Integration - -You can import individual wallets from `'@rainbow-me/rainbowkit/wallets'` along with the `connectorsForWallets` function to build your own list of wallets with their necessary connectors. This way you have full control over which wallets to display, and in which order. - -For example, you can choose to only show Rainbow along with generic fallback wallets. - -```javascript -import { connectorsForWallets } from "@rainbow-me/rainbowkit"; -import { - rainbowWallet, - walletConnectWallet, -} from "@rainbow-me/rainbowkit/wallets"; - -const connectors = connectorsForWallets( - [ - { - groupName: "Recommended", - wallets: [rainbowWallet, walletConnectWallet], - }, - ], - { - appName: "My RainbowKit App", - projectId: "YOUR_PROJECT_ID", - }, -); -``` - -You can then pass your connectors to Wagmi's `createConfig`. - -```javascript -import { connectorsForWallets } from '@rainbow-me/rainbowkit'; -import { createConfig } from 'wagmi'; - -const connectors = connectorsForWallets(/* ... */); - -const config = createConfig({ - connectors, - {/* Wagmi config */} -}); - -const queryClient = new QueryClient(); - -const App = () => ( - - - - {/* Your App */} - - - -); -``` - -### Built-in XDEFI Wallets - -First, you need to install the `@rainbow-me/rainbowkit/wallets` package and then import the dApp: - -```javascript -import { xdefiWallet } from "@rainbow-me/rainbowkit/wallets"; -``` - -### Examples - -Here are examples: Show Rainbow, MetaMask, Coinbase and XDEFI along with generic fallback wallets. - -```javascript -import { connectorsForWallets } from '@rainbow-me/rainbowkit'; -import { - rainbowWallet, - xdefiWallet - metaMaskWallet, - coinbaseWallet, - walletConnectWallet, -} from '@rainbow-me/rainbowkit/wallets'; - -const connectors = connectorsForWallets( - [ - { - groupName: 'Suggested', - wallets: [ - rainbowWallet, - xdefiWallet, - metaMaskWallet, - coinbaseWallet, - walletConnectWallet, - ], - }, - ], - { appName: 'RainbowKit App', projectId: 'YOUR_PROJECT_ID' }, -); -``` - -> Reminder: The order of the wallets array defines the order in which wallets will be displayed in the UI. - -You also can use the `groupName` key to name different wallet groups. This is useful if you want to communicate to your users which wallets you recommend, as well as other possible wallets. - -Recommend Rainbow and MetaMask, but also offer Coinbase along with generic fallback wallets. - -```javascript -import { connectorsForWallets } from "@rainbow-me/rainbowkit"; -import { - rainbowWallet, - xdefiWallet, - metaMaskWallet, - coinbaseWallet, - walletConnectWallet, -} from "@rainbow-me/rainbowkit/wallets"; - -const connectors = connectorsForWallets( - [ - { - groupName: "Recommended", - wallets: [rainbowWallet, metaMaskWallet], - }, - { - groupName: "Others", - wallets: [xdefiWallet, coinbaseWallet, walletConnectWallet], - }, - ], - { appName: "RainbowKit App", projectId: "YOUR_PROJECT_ID" }, -); -``` diff --git a/developers/solana-adapter-xdefi-integration.md b/developers/solana-adapter-xdefi-integration.md deleted file mode 100644 index 52acccd48..000000000 --- a/developers/solana-adapter-xdefi-integration.md +++ /dev/null @@ -1,344 +0,0 @@ -# Solana Adapter XDEFI Integration - -First, your app need to install dependencies for Solana Adapter and XDEFI. These imports include event emitters, error types, transaction-related types, and the PublicKey class. - -- `@solana/wallet-adapter-base` -- `@solana/web3.js` - -Then import dependencies and declare the `XDEFIWallet` and `XDEFIWalletWindow` interfaces: - -```typescript -import type { EventEmitter, WalletName } from "@solana/wallet-adapter-base"; -import { - BaseMessageSignerWalletAdapter, - scopePollingDetectionStrategy, - WalletAccountError, - WalletConnectionError, - WalletDisconnectedError, - WalletDisconnectionError, - WalletNotConnectedError, - WalletNotReadyError, - WalletPublicKeyError, - WalletReadyState, - WalletSignMessageError, - WalletSignTransactionError, -} from "@solana/wallet-adapter-base"; -import type { - SendOptions, - Transaction, - TransactionSignature, -} from "@solana/web3.js"; -import { PublicKey } from "@solana/web3.js"; - -interface XDEFIWalletEvents { - connect(...args: unknown[]): unknown; - disconnect(...args: unknown[]): unknown; -} - -interface XDEFIWallet extends EventEmitter { - isXDEFI?: boolean; - publicKey?: { toBytes(): Uint8Array }; - isConnected: boolean; - signTransaction(transaction: Transaction): Promise; - signAllTransactions(transactions: Transaction[]): Promise; - signAndSendTransaction( - transaction: Transaction, - options?: SendOptions, - ): Promise<{ signature: TransactionSignature }>; - signMessage(message: Uint8Array): Promise<{ signature: Uint8Array }>; - connect(): Promise; - disconnect(): Promise; -} - -interface XDEFIWalletWindow extends Window { - xfi?: { - solana?: XDEFIWallet; - }; -} -``` - -Next, constructor a new class that extends `BaseMessageSignerWalletAdapter` and implements the `XDEFIWallet` interface: - -```typescript -declare const window: XDEFIWalletWindow; - -export interface XDEFIWalletAdapterConfig {} - -export const XDEFIWalletName = "XDEFI" as WalletName<"XDEFI">; - -export class XDEFIWalletAdapter extends BaseMessageSignerWalletAdapter { - name = XDEFIWalletName; - url = "https://xdefi.io"; - icon = - "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjI2MjggMTMuNDAxM0MxMi40MjI4IDE0LjUzMDcgOS45NTk5NyAxNS4xMTI0IDcuNDY1NjkgMTQuOTg4MUM1LjM2ODU1IDE0Ljg4NjUgMy42NDg1NSAxNC4xNDExIDIuNjA4NTUgMTIuOTE1N0MxLjY5NDI2IDExLjgyMDEgMS4zMzk5OCAxMC4zNzQ1IDEuNTc5OTggOC43MTE0M0MxLjY2MTMyIDguMTU4NzQgMS44MjgwMiA3LjYyMTY2IDIuMDc0MjYgNy4xMTg5NkwyLjEwODU1IDcuMDQ4MzdDMi45NzE4IDUuNDA1OTUgNC4yNTI5MyA0LjAxMzk3IDUuODI1ODQgMy4wMDk0MkM3LjM5ODc1IDIuMDA0ODYgOS4yMDkyNCAxLjQyMjM2IDExLjA3OTEgMS4zMTkyNEMxMi45NDkgMS4yMTYxMSAxNC44MTM4IDEuNTk1OTIgMTYuNDkwMSAyLjQyMTI4QzE4LjE2NjMgMy4yNDY2NSAxOS41OTYyIDQuNDg5MTIgMjAuNjM5IDYuMDI2NDFDMjEuNjgxOSA3LjU2MzcxIDIyLjMwMTcgOS4zNDI4NSAyMi40Mzc0IDExLjE4ODdDMjIuNTczMiAxMy4wMzQ2IDIyLjIyMDMgMTQuODgzNiAyMS40MTM0IDE2LjU1MzhDMjAuNjA2NSAxOC4yMjQgMTkuMzczNSAxOS42NTc3IDE3LjgzNTYgMjAuNzE0QzE2LjI5NzggMjEuNzcwMiAxNC41MDgxIDIyLjQxMjYgMTIuNjQyOCAyMi41Nzc4TDEyLjc1NzEgMjMuODczOEMxNC44NTE0IDIzLjY4OTQgMTYuODYxIDIyLjk2OTEgMTguNTg3OCAyMS43ODM3QzIwLjMxNDcgMjAuNTk4NCAyMS42OTkzIDE4Ljk4ODkgMjIuNjA1MiAxNy4xMTM4QzIzLjUxMTEgMTUuMjM4NyAyMy45MDcxIDEzLjE2MjcgMjMuNzU0MiAxMS4wOTA0QzIzLjYwMTIgOS4wMTgwOCAyMi45MDQ2IDcuMDIwODggMjEuNzMyOSA1LjI5NTU1QzIwLjU2MTMgMy41NzAyMiAxOC45NTUgMi4xNzYzIDE3LjA3MjQgMS4yNTExMUMxNS4xODk4IDAuMzI1OTA5IDEzLjA5NTcgLTAuMDk4NjQxMSAxMC45OTY1IDAuMDE5Mjc4N0M4Ljg5NzMzIDAuMTM3MTk4IDYuODY1NDQgMC43OTM1MiA1LjEwMTAyIDEuOTIzNTlDMy4zMzY2IDMuMDUzNjUgMS45MDA1MyA0LjYxODQ4IDAuOTM0MjY0IDYuNDYzOUwwLjg4ODU0OCA2LjU1NzA3QzAuNTgzMDgzIDcuMTgwOSAwLjM3Njg0NyA3Ljg0NzU2IDAuMjc3MTIgOC41MzM1NEMtMC4wMDg1OTQ1IDEwLjU2MDggMC40MzQyNiAxMi4zNjUxIDEuNTkxNCAxMy43NTQyQzIuODU3MTIgMTUuMjczMyA0LjkxNzEyIDE2LjE3NjggNy4zODg1NSAxNi4yOTU0QzEwLjM5NzEgMTYuNDQ1MSAxMy4zODg1IDE1LjYzNDcgMTUuNTExNCAxNC4xNDM5TDE0LjI2MjggMTMuNDAxM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNi43OCAxNC44NzUxQzE1LjU4MjkgMTUuOTAyOSAxMi44IDE3Ljc2NjQgOC4xODI4NiAxOC4wMjA1QzMuMDE0MjkgMTguMzAyOSAwLjg2MDAwMSAxNi42NDI3IDAuODQwMDAxIDE2LjYyNTdMMC40MjI4NTYgMTcuMTMzOUwwLjg0Mjg1NiAxNi42MzQyTDAgMTcuNjMzN0MwLjA5MTQyODYgMTcuNzA5OSAyLjE1NzE0IDE5LjM1ODkgNy4wMDg1NyAxOS4zNTg5QzcuNDA1NzEgMTkuMzU4OSA3LjgyMjg2IDE5LjM1ODkgOC4yNTcxNCAxOS4zMjVDMTMuODM3MSAxOS4wMTcyIDE2LjkwMjkgMTYuNjExNiAxNy45NzE0IDE1LjU4MzhMMTYuNzggMTQuODc1MVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOS4wMiAxNi4yMTkyQzE4LjMxMjEgMTcuMTM4NyAxNy40NDA4IDE3LjkyMzMgMTYuNDQ4NiAxOC41MzQ1QzEyLjk1MTUgMjAuNzY1IDguNTAyODkgMjEuMDUzIDUuMzg4NiAyMC44OTc4TDUuMzIyODkgMjIuMTk5NEM1Ljg0NTc1IDIyLjIyNDggNi4zNDg2MSAyMi4yMzYxIDYuODM3MTggMjIuMjM2MUMxNS42MiAyMi4yMzYxIDE5LjE2ODYgMTguMjgzMiAyMC4xNiAxNi44NzE0TDE5LjAxNzIgMTYuMjA3OSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4LjY4NTcgMTEuMjkyMkMxOS4yNjggMTEuMjkyMiAxOS43NCAxMC44MjU3IDE5Ljc0IDEwLjI1MDNDMTkuNzQgOS42NzQ4OSAxOS4yNjggOS4yMDg0MiAxOC42ODU3IDkuMjA4NDJDMTguMTAzNCA5LjIwODQyIDE3LjYzMTQgOS42NzQ4OSAxNy42MzE0IDEwLjI1MDNDMTcuNjMxNCAxMC44MjU3IDE4LjEwMzQgMTEuMjkyMiAxOC42ODU3IDExLjI5MjJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"; - readonly supportedTransactionVersions = null; - - private _connecting: boolean; - private _wallet: XDEFIWallet | null; - private _publicKey: PublicKey | null; - private _readyState: WalletReadyState = - typeof window === "undefined" || typeof document === "undefined" - ? WalletReadyState.Unsupported - : WalletReadyState.NotDetected; - - constructor(config: XDEFIWalletAdapterConfig = {}) { - super(); - this._connecting = false; - this._wallet = null; - this._publicKey = null; - - if (this._readyState !== WalletReadyState.Unsupported) { - scopePollingDetectionStrategy(() => { - if (window.xfi?.solana?.isXDEFI) { - this._readyState = WalletReadyState.Installed; - this.emit("readyStateChange", this._readyState); - return true; - } - return false; - }); - } - } - // Define the `connect`, `disconnect`, `signTransaction`, `signAllTransactions`, `signAndSendTransaction`, and `signMessage` methods like other wallet adapters. -} -``` - -Be sure to handle the `connect` and `disconnect` methods to update the `publicKey` and `isConnected` properties of the wallet adapter. - -### Example - -Here is an example of a Solana Adapter for XDEFI integration: - -```typescript -import type { EventEmitter, WalletName } from "@solana/wallet-adapter-base"; -import { - BaseMessageSignerWalletAdapter, - scopePollingDetectionStrategy, - WalletAccountError, - WalletConnectionError, - WalletDisconnectedError, - WalletDisconnectionError, - WalletNotConnectedError, - WalletNotReadyError, - WalletPublicKeyError, - WalletReadyState, - WalletSignMessageError, - WalletSignTransactionError, -} from "@solana/wallet-adapter-base"; -import type { - SendOptions, - Transaction, - TransactionSignature, -} from "@solana/web3.js"; -import { PublicKey } from "@solana/web3.js"; - -interface XDEFIWalletEvents { - connect(...args: unknown[]): unknown; - disconnect(...args: unknown[]): unknown; -} - -interface XDEFIWallet extends EventEmitter { - isXDEFI?: boolean; - publicKey?: { toBytes(): Uint8Array }; - isConnected: boolean; - signTransaction(transaction: Transaction): Promise; - signAllTransactions(transactions: Transaction[]): Promise; - signAndSendTransaction( - transaction: Transaction, - options?: SendOptions, - ): Promise<{ signature: TransactionSignature }>; - signMessage(message: Uint8Array): Promise<{ signature: Uint8Array }>; - connect(): Promise; - disconnect(): Promise; -} - -interface XDEFIWalletWindow extends Window { - xfi?: { - solana?: XDEFIWallet; - }; -} - -declare const window: XDEFIWalletWindow; - -export interface XDEFIWalletAdapterConfig {} - -export const XDEFIWalletName = "XDEFI" as WalletName<"XDEFI">; - -export class XDEFIWalletAdapter extends BaseMessageSignerWalletAdapter { - name = XDEFIWalletName; - url = "https://xdefi.io"; - icon = - "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0LjI2MjggMTMuNDAxM0MxMi40MjI4IDE0LjUzMDcgOS45NTk5NyAxNS4xMTI0IDcuNDY1NjkgMTQuOTg4MUM1LjM2ODU1IDE0Ljg4NjUgMy42NDg1NSAxNC4xNDExIDIuNjA4NTUgMTIuOTE1N0MxLjY5NDI2IDExLjgyMDEgMS4zMzk5OCAxMC4zNzQ1IDEuNTc5OTggOC43MTE0M0MxLjY2MTMyIDguMTU4NzQgMS44MjgwMiA3LjYyMTY2IDIuMDc0MjYgNy4xMTg5NkwyLjEwODU1IDcuMDQ4MzdDMi45NzE4IDUuNDA1OTUgNC4yNTI5MyA0LjAxMzk3IDUuODI1ODQgMy4wMDk0MkM3LjM5ODc1IDIuMDA0ODYgOS4yMDkyNCAxLjQyMjM2IDExLjA3OTEgMS4zMTkyNEMxMi45NDkgMS4yMTYxMSAxNC44MTM4IDEuNTk1OTIgMTYuNDkwMSAyLjQyMTI4QzE4LjE2NjMgMy4yNDY2NSAxOS41OTYyIDQuNDg5MTIgMjAuNjM5IDYuMDI2NDFDMjEuNjgxOSA3LjU2MzcxIDIyLjMwMTcgOS4zNDI4NSAyMi40Mzc0IDExLjE4ODdDMjIuNTczMiAxMy4wMzQ2IDIyLjIyMDMgMTQuODgzNiAyMS40MTM0IDE2LjU1MzhDMjAuNjA2NSAxOC4yMjQgMTkuMzczNSAxOS42NTc3IDE3LjgzNTYgMjAuNzE0QzE2LjI5NzggMjEuNzcwMiAxNC41MDgxIDIyLjQxMjYgMTIuNjQyOCAyMi41Nzc4TDEyLjc1NzEgMjMuODczOEMxNC44NTE0IDIzLjY4OTQgMTYuODYxIDIyLjk2OTEgMTguNTg3OCAyMS43ODM3QzIwLjMxNDcgMjAuNTk4NCAyMS42OTkzIDE4Ljk4ODkgMjIuNjA1MiAxNy4xMTM4QzIzLjUxMTEgMTUuMjM4NyAyMy45MDcxIDEzLjE2MjcgMjMuNzU0MiAxMS4wOTA0QzIzLjYwMTIgOS4wMTgwOCAyMi45MDQ2IDcuMDIwODggMjEuNzMyOSA1LjI5NTU1QzIwLjU2MTMgMy41NzAyMiAxOC45NTUgMi4xNzYzIDE3LjA3MjQgMS4yNTExMUMxNS4xODk4IDAuMzI1OTA5IDEzLjA5NTcgLTAuMDk4NjQxMSAxMC45OTY1IDAuMDE5Mjc4N0M4Ljg5NzMzIDAuMTM3MTk4IDYuODY1NDQgMC43OTM1MiA1LjEwMTAyIDEuOTIzNTlDMy4zMzY2IDMuMDUzNjUgMS45MDA1MyA0LjYxODQ4IDAuOTM0MjY0IDYuNDYzOUwwLjg4ODU0OCA2LjU1NzA3QzAuNTgzMDgzIDcuMTgwOSAwLjM3Njg0NyA3Ljg0NzU2IDAuMjc3MTIgOC41MzM1NEMtMC4wMDg1OTQ1IDEwLjU2MDggMC40MzQyNiAxMi4zNjUxIDEuNTkxNCAxMy43NTQyQzIuODU3MTIgMTUuMjczMyA0LjkxNzEyIDE2LjE3NjggNy4zODg1NSAxNi4yOTU0QzEwLjM5NzEgMTYuNDQ1MSAxMy4zODg1IDE1LjYzNDcgMTUuNTExNCAxNC4xNDM5TDE0LjI2MjggMTMuNDAxM1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNi43OCAxNC44NzUxQzE1LjU4MjkgMTUuOTAyOSAxMi44IDE3Ljc2NjQgOC4xODI4NiAxOC4wMjA1QzMuMDE0MjkgMTguMzAyOSAwLjg2MDAwMSAxNi42NDI3IDAuODQwMDAxIDE2LjYyNTdMMC40MjI4NTYgMTcuMTMzOUwwLjg0Mjg1NiAxNi42MzQyTDAgMTcuNjMzN0MwLjA5MTQyODYgMTcuNzA5OSAyLjE1NzE0IDE5LjM1ODkgNy4wMDg1NyAxOS4zNTg5QzcuNDA1NzEgMTkuMzU4OSA3LjgyMjg2IDE5LjM1ODkgOC4yNTcxNCAxOS4zMjVDMTMuODM3MSAxOS4wMTcyIDE2LjkwMjkgMTYuNjExNiAxNy45NzE0IDE1LjU4MzhMMTYuNzggMTQuODc1MVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xOS4wMiAxNi4yMTkyQzE4LjMxMjEgMTcuMTM4NyAxNy40NDA4IDE3LjkyMzMgMTYuNDQ4NiAxOC41MzQ1QzEyLjk1MTUgMjAuNzY1IDguNTAyODkgMjEuMDUzIDUuMzg4NiAyMC44OTc4TDUuMzIyODkgMjIuMTk5NEM1Ljg0NTc1IDIyLjIyNDggNi4zNDg2MSAyMi4yMzYxIDYuODM3MTggMjIuMjM2MUMxNS42MiAyMi4yMzYxIDE5LjE2ODYgMTguMjgzMiAyMC4xNiAxNi44NzE0TDE5LjAxNzIgMTYuMjA3OSIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE4LjY4NTcgMTEuMjkyMkMxOS4yNjggMTEuMjkyMiAxOS43NCAxMC44MjU3IDE5Ljc0IDEwLjI1MDNDMTkuNzQgOS42NzQ4OSAxOS4yNjggOS4yMDg0MiAxOC42ODU3IDkuMjA4NDJDMTguMTAzNCA5LjIwODQyIDE3LjYzMTQgOS42NzQ4OSAxNy42MzE0IDEwLjI1MDNDMTcuNjMxNCAxMC44MjU3IDE4LjEwMzQgMTEuMjkyMiAxOC42ODU3IDExLjI5MjJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K"; - readonly supportedTransactionVersions = null; - - private _connecting: boolean; - private _wallet: XDEFIWallet | null; - private _publicKey: PublicKey | null; - private _readyState: WalletReadyState = - typeof window === "undefined" || typeof document === "undefined" - ? WalletReadyState.Unsupported - : WalletReadyState.NotDetected; - - constructor(config: XDEFIWalletAdapterConfig = {}) { - super(); - this._connecting = false; - this._wallet = null; - this._publicKey = null; - - if (this._readyState !== WalletReadyState.Unsupported) { - scopePollingDetectionStrategy(() => { - if (window.xfi?.solana?.isXDEFI) { - this._readyState = WalletReadyState.Installed; - this.emit("readyStateChange", this._readyState); - return true; - } - return false; - }); - } - } - - get publicKey() { - return this._publicKey; - } - - get connecting() { - return this._connecting; - } - - get connected() { - return !!this._wallet?.isConnected; - } - - get readyState() { - return this._readyState; - } - - async connect(): Promise { - try { - if (this.connected || this.connecting) return; - if (this._readyState !== WalletReadyState.Installed) - throw new WalletNotReadyError(); - - this._connecting = true; - - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const wallet = window.xfi!.solana!; - - if (!wallet.isConnected) { - try { - await wallet.connect(); - } catch (error: any) { - throw new WalletConnectionError(error?.message, error); - } - } - - if (!wallet.publicKey) throw new WalletAccountError(); - - let publicKey: PublicKey; - try { - publicKey = new PublicKey(wallet.publicKey.toBytes()); - } catch (error: any) { - throw new WalletPublicKeyError(error?.message, error); - } - - wallet.on("disconnect", this._disconnected); - - this._wallet = wallet; - this._publicKey = publicKey; - - this.emit("connect", publicKey); - } catch (error: any) { - this.emit("error", error); - throw error; - } finally { - this._connecting = false; - } - } - - async disconnect(): Promise { - const wallet = this._wallet; - if (wallet) { - wallet.off("disconnect", this._disconnected); - - this._wallet = null; - this._publicKey = null; - - try { - await wallet.disconnect(); - } catch (error: any) { - this.emit("error", new WalletDisconnectionError(error?.message, error)); - } - } - - this.emit("disconnect"); - } - - async signTransaction(transaction: T): Promise { - try { - const wallet = this._wallet; - if (!wallet) throw new WalletNotConnectedError(); - - try { - return ( - ((await wallet.signTransaction(transaction)) as T) || transaction - ); - } catch (error: any) { - throw new WalletSignTransactionError(error?.message, error); - } - } catch (error: any) { - this.emit("error", error); - throw error; - } - } - - async signAllTransactions( - transactions: T[], - ): Promise { - try { - const wallet = this._wallet; - if (!wallet) throw new WalletNotConnectedError(); - - try { - return ( - ((await wallet.signAllTransactions(transactions)) as T[]) || - transactions - ); - } catch (error: any) { - throw new WalletSignTransactionError(error?.message, error); - } - } catch (error: any) { - this.emit("error", error); - throw error; - } - } - - async signMessage(message: Uint8Array): Promise { - try { - const wallet = this._wallet; - if (!wallet) throw new WalletNotConnectedError(); - - try { - const { signature } = await wallet.signMessage(message); - return signature; - } catch (error: any) { - throw new WalletSignMessageError(error?.message, error); - } - } catch (error: any) { - this.emit("error", error); - throw error; - } - } - - private _disconnected = () => { - const wallet = this._wallet; - if (wallet) { - wallet.off("disconnect", this._disconnected); - - this._wallet = null; - this._publicKey = null; - - this.emit("error", new WalletDisconnectedError()); - this.emit("disconnect"); - } - }; -} -```