Skip to main content
Pass an events object to subscribe to widget lifecycle events. Every callback receives { event, state } where state is a snapshot of the full widget state and event is a discriminated union of named sub-events.
All callbacks are optional. Subscribe only to what you need.

Callback summary


onConnectWallet

Fires when a wallet connects to the widget, and on the click that initiates connection. Sub-events:
  • ConnectWallet:click — Connect Wallet button clicked. Params: {}.
  • ConnectWallet:connect — A wallet actually connected (explicit click, eager auto-reconnect, or embedded provider).
ConnectWallet:connect params:
ConnectWallet:click carries no params. Check event.name before reading connect-specific fields.

onConnectWalletClick

Fires when the Connect Wallet button is clicked. Same payload type as onConnectWallet, but only emits ConnectWallet:click.

onAllowToken

Token approval (approve) or signed-permit (permit1 / permit2) lifecycle. Sub-events:
  • AllowToken:request — Approval or permit initiated.
  • AllowToken:sent — Transaction signed and broadcast.
  • AllowToken:confirmed — Transaction confirmed on-chain, or permit signed.
  • AllowToken:failed — Transaction failed or permit rejected.
Common params:

onWrapETH

Fires during ETH → WETH wrapping. Used as a pre-step for Delta Swaps that start from native ETH. Sub-events: WrapETH:click, WrapETH:request, WrapETH:sent, WrapETH:confirmed, WrapETH:failed. Params: ethAmountWei, wethAddress, chainId, tradeMode, txHash (if sent+), txReceipt (if confirmed/failed), error (if failed).

onSwap

The most common callback. Fires for both Delta and Market Swap lifecycles. Sub-events:
  • Swap:click — Confirmation drawer opened.
  • Swap:request — Swap initiated.
  • Swap:sent — Tx signed and broadcast (market), or Delta order submitted.
  • Swap:confirmed — Tx confirmed (market), or Delta order filled.
  • Swap:failed — Tx failed or Delta order failed.
  • Swap:cancelled — User replaced / cancelled the pending tx, or the Delta order was cancelled.
Params common to all sub-events: Sub-event-specific: txHash, callsId, order (Delta), txReceipt, callsReceipt, error, cancelTxDetails.

onTwapOrder

TWAP (Time-Weighted Average Price) order lifecycle. TWAP splits a large trade into smaller slices executed over a duration. Sub-events: TwapOrder:click, TwapOrder:request, TwapOrder:sent, TwapOrder:confirmed, TwapOrder:failed. Params: Delta or bridge price, order (if sent+), error (if failed), plus form-state fields (tokenFrom, tokenTo, sendAmount, receiveAmount, receiverAddress, srcChainId, destChainId, connectedAccount, side).

onLimitOrder

Delta limit-order lifecycle. Sub-events: LimitOrder:click, LimitOrder:request, LimitOrder:sent, LimitOrder:confirmed (rare; orders typically fill later), LimitOrder:failed. Params: Delta price, order, error (if failed), plus form-state fields including limitPrice and orderDeadline.

onOTCOrder

OTC (Over-The-Counter) order lifecycle. Similar to limit orders but for OTC trades. Sub-events: OTCOrder:click, OTCOrder:request, OTCOrder:sent, OTCOrder:confirmed (rare), OTCOrder:failed. Params: OTC price, order (if not failed), error (if failed), plus form-state fields including otcPrice and orderDeadline.

onCancelTx

Fires when the user replaces a pending swap tx with a “cancel” tx (same nonce, zero value) to drop it. Sub-events: CancelTx:request, CancelTx:sent, CancelTx:confirmed, CancelTx:failed. Params:

onCancelOrder

Fires when the user cancels a Delta or OTC order. Sub-events:
  • CancelOrder:request — Cancel initiated (tx or typed-data signing).
  • CancelOrder:sentTx — Cancel tx signed and broadcast. Fires for OTC orders and for ETH Delta orders cancelled via withdrawAndCancel. Non-ETH Delta orders skip this stage (they cancel via signed typed-data).
  • CancelOrder:confirmed — Cancel tx mined, or typed-data posted.
  • CancelOrder:failed — Cancel failed.
Params:

onFillOTCOrder

Fires when the user fills an existing OTC order (acts as the taker). Sub-events: FillOTCOrder:request, FillOTCOrder:sent, FillOTCOrder:confirmed, FillOTCOrder:failed. Params: orderHash, orderType: "OTC", orderSubType, txHash (if sent+), callsId (if sendCalls), txReceipt (if confirmed), callsReceipt, error (if failed).

onSettingsChange

Fires when the user changes widget settings. Sub-events:
  • Settings:switchSwapMode — Switched between Market and Delta. Params: { swapMode: "market" | "delta" }.
  • Settings:saveSettings — User saved settings. Payload is the full SettingsState: slippageTolerance, transactionSpeed ("slow" | "standard" | "fast" | "custom"), swapMode, eip1559Enabled, degenMode, disabledDexes, bridgePreference ("auto" | "fastest" | "bestReturn"), disabledBridges.
  • Settings:changeBridgePreferences — Bridge preferences changed independently (e.g. from Compare Quotes). Params: bridgePreference, disabledBridges.

onFormInputChange

Fires whenever any input changes in any trading form. Sub-event: FormInput:change. Params (discriminated by form): Common to all variants: Variant-specific:
  • form: "swap" — adds side: "SELL" | "BUY". When side === "SELL", payload carries sendAmount (not receiveAmount); when side === "BUY", receiveAmount (not sendAmount).
  • form: "twap" — adds side, orderSplit (slice count), orderInterval (seconds), orderDeadline (Unix seconds), slippage.
  • form: "limit" — adds limitPrice, orderDeadline. Both sendAmount and receiveAmount present.
  • form: "otc" — adds otcPrice, orderDeadline. Both sendAmount and receiveAmount present.

onPriceChange

Fires when price info refreshes or the price-query state changes. Sub-events:
  • PriceUpdate — Price was successfully (re)fetched.
  • PriceQueryUpdate — Price-query state changed (data, isLoading, error).
Params:

Lifecycle of a successful market swap

For a wallet-connected market swap that requires token approval, events fire in this order:
  1. onConnectWalletConnectWallet:click (user clicks), then ConnectWallet:connect once a wallet attaches.
  2. onFormInputChangeFormInput:change for every field edit.
  3. onPriceChangePriceQueryUpdate (loading / refetching) and PriceUpdate (successful fetch) as quotes refresh.
  4. onAllowTokenAllowToken:requestAllowToken:sentAllowToken:confirmed. Skipped if allowance already covers the trade or the flow uses a permit signature only.
  5. onWrapETH — for Delta Swaps with ETH as tokenFrom, the user is asked to wrap first: WrapETH:clickWrapETH:requestWrapETH:sentWrapETH:confirmed.
  6. onSwapSwap:clickSwap:requestSwap:sentSwap:confirmed. Replace with Swap:failed or Swap:cancelled on the unhappy path.
  7. onCancelTx — only if the user explicitly cancels a pending market swap tx: CancelTx:requestCancelTx:sentCancelTx:confirmed.
Delta Swaps replace step 4/5/6 with a single Delta order submission (Swap:sent with swapMode: "delta" and an order param). The order is filled off-band, so Swap:confirmed may arrive minutes later, or be missed entirely if the user closes the widget. Limit, OTC, and TWAP flows replace step 6 with their respective callbacks (onLimitOrder, onOTCOrder, onTwapOrder).
Last modified on June 14, 2026