nexus-elements-nexus-provider
SKILL.md
Nexus Elements - NexusProvider
Install and wire provider
- Install:
npx shadcn@latest add @nexus-elements/nexus-provider
- Ensure dependencies exist:
@avail-project/nexus-corewagmi
Wrap your app
"use client";
import NexusProvider from "@/components/nexus/NexusProvider";
export function AppNexusProvider({ children }: { children: React.ReactNode }) {
return (
<NexusProvider config={{ network: "mainnet", debug: false }}>
{children}
</NexusProvider>
);
}
Initialize SDK on wallet connect
- Resolve an EIP-1193 provider from your wallet stack.
- Call
handleInit(provider)after wallet status becomes connected. - Pass only providers with
request().
"use client";
import { useEffect } from "react";
import { useAccount, useConnectorClient } from "wagmi";
import type { EthereumProvider } from "@avail-project/nexus-core";
import { useNexus } from "@/components/nexus/NexusProvider";
export function InitNexusOnConnect() {
const { status, connector } = useAccount();
const { data: walletClient } = useConnectorClient();
const { handleInit } = useNexus();
useEffect(() => {
if (status !== "connected") return;
void (async () => {
const mobileProvider = walletClient
? ({ request: (args: unknown) => walletClient.request(args as never) } as EthereumProvider)
: undefined;
const desktopProvider = await connector?.getProvider();
const provider = mobileProvider ?? (desktopProvider as EthereumProvider | undefined);
if (!provider || typeof provider.request !== "function") return;
await handleInit(provider);
})();
}, [status, connector, walletClient, handleInit]);
return null;
}
Understand provider lifecycle (current implementation)
handleInit(provider):- guard: skips if already initialized or loading.
- validate provider shape.
- call
initializeNexus(provider). - call setup preload (
supported chains/tokens, bridge balances, Coinbase rates). - attach hooks (
intent,allowance,swapIntent).
initializeNexus(provider):- calls
sdk.initialize(provider)once. - sets
nexusSDKstate.
- calls
deinitializeNexus():- calls
sdk.deinit(). - clears balances, rates, supported chains/tokens, and hook refs.
- calls
- Auto-disconnect behavior:
- provider uses
useAccountEffectfrom wagmi to deinit on disconnect.
- provider uses
SDK functions NexusProvider relies on
- Init/lifecycle:
sdk.initialize(provider)sdk.deinit()sdk.isInitialized()
- Metadata and balances:
sdk.utils.getSupportedChains(...)sdk.utils.getSwapSupportedChainsAndTokens()sdk.getBalancesForBridge()sdk.getBalancesForSwap()sdk.utils.getCoinbaseRates()
- Hook wiring:
sdk.setOnIntentHook(...)sdk.setOnAllowanceHook(...)sdk.setOnSwapIntentHook(...)
Understand hook contract
- Any active hook payload includes
allow()anddeny(). - If a widget sets hook-driven confirmation UI, always call one of them.
- Not calling
allow()/deny()leaves a flow pending.
useNexus() API surface
- Core:
nexusSDK,loading,network
- Lifecycle:
handleInit,initializeNexus,deinitializeNexus,attachEventHooks
- Hook refs:
intent,allowance,swapIntent
- Data:
bridgableBalance,swapBalance,exchangeRatesupportedChainsAndTokens,swapSupportedChainsAndTokens
- Helpers:
fetchBridgableBalance,fetchSwapBalance,getFiatValue(amount, token)
E2E validation
- Connect wallet and assert
nexusSDKbecomes non-null. - Assert supported chains/tokens are populated.
- Assert bridge and swap balances are fetched.
- Trigger a widget flow and confirm corresponding hook ref is populated.
- Disconnect wallet and confirm state clears.
Troubleshoot
Invalid EIP-1193 provider:- use
connector.getProvider()or a wallet client wrapper exposingrequest().
- use
- Init succeeds but widgets fail:
- ensure
handleInitruns before mounting interactive flows.
- ensure
- Missing fiat values:
- check
exchangeRate; fallback is token amount *1if rate missing.
- check
Weekly Installs
19
Repository
availproject/ne…elementsFirst Seen
Feb 4, 2026
Security Audits
Installed on
opencode18
cursor18
gemini-cli17
claude-code17
codex17
github-copilot16