nexus-sdk-hooks-events

Set up hooks once after SDK init

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "nexus-sdk-hooks-events" with this command: npx skills add availproject/nexus-elements/availproject-nexus-elements-nexus-sdk-hooks-events

Hooks and Events

Set up hooks once after SDK init

  • Call sdk.setOnIntentHook(callback) .

  • Call sdk.setOnAllowanceHook(callback) .

  • Call sdk.setOnSwapIntentHook(callback) .

  • If a hook is not set, the SDK auto-approves and continues.

  • If a hook is set, always call allow(...) or deny() or the flow will stall.

  • Optionally auto-deny after a timeout to avoid hanging UX.

Handle intent hook (bridge / bridgeAndTransfer / bridgeAndExecute)

Signature

sdk.setOnIntentHook((data) => { // data: OnIntentHookData });

OnIntentHookData

  • allow(): void — continue the flow

  • deny(): void — reject the flow

  • intent: ReadableIntent — readable intent info for UI

  • refresh(selectedSources?: number[]): Promise<ReadableIntent> — refresh the intent

How to use

  • Store data in a ref so UI can call allow() /deny() later.

  • Call refresh() on an interval (e.g., every 15s) if you show intent details.

  • If the user closes the modal or cancels, call deny() and clear the ref.

Handle allowance hook (approval control)

Signature

sdk.setOnAllowanceHook((data) => { // data: OnAllowanceHookData });

OnAllowanceHookData

  • allow(decisions): void

  • decisions must match the number of sources

  • each entry can be 'min' , 'max' , bigint , or numeric string

  • deny(): void

  • sources: AllowanceHookSources

  • includes chain/token info and current vs required allowance

How to use

  • Present each source to the user (chain + token + required allowance).

  • Build the decisions array in the same order as sources .

  • Call allow(decisions) to continue, or deny() to cancel.

  • Ensure decisions.length === sources.length or the SDK will reject with INVALID_VALUES_ALLOWANCE_HOOK .

Handle swap intent hook (swap flows)

Signature

sdk.setOnSwapIntentHook((data) => { // data: OnSwapIntentHookData });

OnSwapIntentHookData

  • allow(): void

  • deny(): void

  • intent: SwapIntent

  • refresh(): Promise<SwapIntent>

How to use

  • Store data and show a UI summary.

  • Call allow() to proceed or deny() to cancel.

Stream events for progress UI

Attach listeners

  • All main operations accept { onEvent } in options.

Event names and payloads

  • NEXUS_EVENTS.STEPS_LIST → BridgeStepType[]

  • NEXUS_EVENTS.STEP_COMPLETE → BridgeStepType

  • NEXUS_EVENTS.SWAP_STEP_COMPLETE → SwapStepType

Typical usage

  • Use STEPS_LIST to seed step trackers.

  • Use STEP_COMPLETE and SWAP_STEP_COMPLETE to update progress and explorer links.

Handle errors and cancellation

  • If an operation throws, clear intent/allowance refs to avoid stale state.

  • On user cancel, call deny() for the active hook and reset UI state.

  • If a hook is set but no allow() /deny() is called, the intent remains pending.

Expand error-handling patterns

Normalize errors

  • The SDK throws NexusError for known failures.

  • Import from SDK:

  • import { NexusError, ERROR_CODES } from '@avail-project/nexus-core'

Map common error codes to UX responses

  • USER_DENIED_INTENT / USER_DENIED_ALLOWANCE / USER_DENIED_INTENT_SIGNATURE :

  • Treat as user cancel; show a neutral message and reset UI.

  • INVALID_VALUES_ALLOWANCE_HOOK :

  • Fix decisions length/type and resubmit.

  • SDK_NOT_INITIALIZED / WALLET_NOT_CONNECTED / CONNECT_ACCOUNT_FAILED :

  • Prompt user to reconnect; re-run sdk.initialize(...) .

  • INVALID_INPUT / INVALID_ADDRESS_LENGTH :

  • Validate inputs; block submission until fixed.

  • INSUFFICIENT_BALANCE / NO_BALANCE_FOR_ADDRESS :

  • Prompt user to reduce amount or fund source chain.

  • TOKEN_NOT_SUPPORTED / CHAIN_NOT_FOUND :

  • Block submission and update selectors.

  • QUOTE_FAILED / SWAP_FAILED / RATES_CHANGED_BEYOND_TOLERANCE / SLIPPAGE_EXCEEDED_ALLOWANCE :

  • Re-run quote or suggest a smaller amount.

  • RFF_FEE_EXPIRED :

  • Re-simulate and re-submit the transaction.

  • TRANSACTION_TIMEOUT / LIQUIDITY_TIMEOUT :

  • Show “pending” state and allow retry or check intent history.

  • TRANSACTION_REVERTED :

  • Display failure with explorer link if available.

  • COSMOS_ERROR / INTERNAL_ERROR :

  • Show a generic error and log err.data?.details for support.

Use a helper pattern

import { NexusError, ERROR_CODES } from '@avail-project/nexus-core';

export function getReadableNexusError(err: unknown): string { if (err instanceof NexusError) { switch (err.code) { case ERROR_CODES.USER_DENIED_INTENT: case ERROR_CODES.USER_DENIED_ALLOWANCE: case ERROR_CODES.USER_DENIED_INTENT_SIGNATURE: return 'Transaction cancelled by user'; case ERROR_CODES.INSUFFICIENT_BALANCE: return 'Insufficient balance'; case ERROR_CODES.SLIPPAGE_EXCEEDED_ALLOWANCE: case ERROR_CODES.RATES_CHANGED_BEYOND_TOLERANCE: return 'Price changed too much. Please try again.'; case ERROR_CODES.TRANSACTION_TIMEOUT: return 'Transaction timed out. Please retry.'; default: return err.message; } } if (err instanceof Error) return err.message; return 'Unknown error'; }

Clean up on error

  • Clear intent/allowance refs and reset progress state:

  • intentRef.current = null; allowanceRef.current = null; swapIntentRef.current = null;

  • reset step UI and pending flags

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

nexus-sdk-balances-metadata-utils

No summary provided by upstream source.

Repository SourceNeeds Review
General

nexus-sdk-setup

No summary provided by upstream source.

Repository SourceNeeds Review
General

nexus-sdk-integration

No summary provided by upstream source.

Repository SourceNeeds Review
General

nexus-sdk-bridge-flows

No summary provided by upstream source.

Repository SourceNeeds Review