> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Embedded wallets: transactions & session keys

> The React SDK signed and sent from embedded wallets through the widget, and had dedicated session-key approval screens. In the JavaScript SDK signing uses the same functions as any wallet, and scoped session keys move to delegated access.

Embedded (WaaS) wallets sign and send transactions with the **same** functions as any other wallet — there is no separate embedded-wallet signing path. So the build lives with the general signing guide: [**Transaction confirmation & simulation** (Building UI)](/docs/javascript/building-ui/transaction-confirmation) covers signing, sending, confirming, and simulating with full code. This page is the React→JavaScript translation plus the two things that are migration-specific for embedded wallets.

## What maps to what

| React SDK                                     | JavaScript SDK                                                                         |
| --------------------------------------------- | -------------------------------------------------------------------------------------- |
| `await wallet.signMessage(message)`           | `signMessage()` / `useSignMessage()`                                                   |
| send from the embedded wallet                 | `transferAmount()` / `useTransferAmount()`                                             |
| wait for confirmation in the widget           | `confirmTransaction()` / `useConfirmTransaction()`                                     |
| session-key approval screens (scoped signing) | [delegated access](/docs/javascript/migrating-from-react/embedded-wallets-delegated-access) |

## Migration-specific behavior

* **Nothing embedded-wallet-specific about signing.** Pass the embedded `walletAccount` into the same `signMessage()` / `transferAmount()` / `confirmTransaction()` you'd use for any wallet — `signMessage` returns `{ signature }`, `transferAmount` returns `{ transactionHash }`, and `confirmTransaction` resolves once that hash confirms on-chain. The widget rendered the pending state; you now render it from those calls.
* **Session keys are gone — use delegated access.** The React SDK's session-key approval screens (approve an app or agent to sign within limits) are replaced by [delegated access](/docs/javascript/migrating-from-react/embedded-wallets-delegated-access): grant your backend the ability to sign for the wallet and let the user revoke it anytime. Build that flow from the delegated-access page, not a session-key screen.

## Errors you now own

| Situation                          | What to do                                                        |
| ---------------------------------- | ----------------------------------------------------------------- |
| User rejects signing               | Leave state unchanged and let them retry; nothing is sent.        |
| Transfer rejected before broadcast | Surface the error; no `transactionHash` is returned.              |
| Confirmation never resolves        | Keep showing the pending state; offer a link to a block explorer. |

## See also

* [Transaction confirmation & simulation (Building UI)](/docs/javascript/building-ui/transaction-confirmation) — the full sign, send, confirm, and simulate build
* [Transactions & balance](/docs/javascript/migrating-from-react/transactions-and-balance) — reading balances and simulating before a send
* [Embedded wallets: delegated access](/docs/javascript/migrating-from-react/embedded-wallets-delegated-access) — where scoped session keys now live
* [Embedded wallets: setup & creation](/docs/javascript/migrating-from-react/embedded-wallets-setup) — creating the wallet you sign with
