Nexus SDK Setup
Install dependency
-
Install the SDK package:
-
npm install @avail-project/nexus-core
-
or pnpm add @avail-project/nexus-core
-
or yarn add @avail-project/nexus-core
Obtain an EIP-1193 provider
-
Use any wallet connection stack to get a provider.
-
Ensure the provider has a request method.
-
Use a browser fallback only when appropriate:
-
const provider = (window as any).ethereum
Construct the SDK instance
-
Create new NexusSDK({ network, debug, siweChain }) .
-
Provide network :
-
'mainnet' or 'testnet' to use default endpoints.
-
NetworkConfig to use custom endpoints.
-
Provide debug?: boolean to enable verbose SDK logging.
-
Provide siweChain?: number to set the SIWE chain id (if you use SIWE).
Initialize once
-
Create a single instance and reuse it.
-
Store the instance in a module singleton or a React ref.
-
Guard with sdk.isInitialized() to avoid re-init.
Minimal example
import { NexusSDK, type EthereumProvider } from '@avail-project/nexus-core';
const sdk = new NexusSDK({ network: 'mainnet' });
export async function initNexus(provider: EthereumProvider) { if (sdk.isInitialized()) return sdk; if (!provider || typeof provider.request !== 'function') { throw new Error('Invalid EIP-1193 provider'); } await sdk.initialize(provider); return sdk; }
Initialize when a wallet kit is already integrated (FamilyKit / wagmi-based)
-
If your kit exposes a wagmi connector, derive an EIP-1193 provider from it.
-
Use the same pattern as Nexus Elements: prefer connector.getProvider() on desktop and a walletClient.request wrapper on mobile.
-
Example (adapt to your hooks and UI state):
import { NexusSDK, type EthereumProvider } from '@avail-project/nexus-core'; import { useAccount, useConnectorClient } from 'wagmi';
const sdk = new NexusSDK({ network: 'mainnet', debug: false });
async function initFromWalletKit(isMobile: boolean) { const { connector } = useAccount(); const { data: walletClient } = useConnectorClient();
const mobileProvider = walletClient && ({ request: (args: unknown) => walletClient.request(args as never), } as EthereumProvider);
const desktopProvider = await connector?.getProvider(); const effectiveProvider = isMobile ? mobileProvider : desktopProvider;
if (!effectiveProvider || typeof effectiveProvider.request !== 'function') { throw new Error('Invalid EIP-1193 provider from wallet kit'); }
if (!sdk.isInitialized()) { await sdk.initialize(effectiveProvider); }
return sdk; }
Handle disconnect / teardown
-
On wallet disconnect, call await sdk.deinit() .
-
Clear state (balances, hook refs, cached intents).
Use provider-only mode (optional)
-
If you need balances before full init, call:
-
await sdk.setEVMProvider(provider)
-
Check sdk.hasEvmProvider to confirm.
Handle SSR / client-only execution
- Initialize in client-only code (useEffect or dynamic import) to avoid SSR issues.
Handle account changes
-
If provider supports events, re-fetch balances on accountsChanged .
-
If provider lacks .on /.removeListener , call:
-
sdk.triggerAccountChange() after the wallet address changes.
Handle init errors
-
Wrap sdk.initialize in try/catch.
-
If SDK_INIT_STATE_NOT_EXPECTED , call await sdk.deinit() and retry.
-
If WALLET_NOT_CONNECTED or CONNECT_ACCOUNT_FAILED , prompt user to reconnect.