@1claw/wallet-react
v0.4.0
Published
Embeddable treasury wallet component for Platform API apps built on 1Claw
Maintainers
Readme
@1claw/wallet-react
Embeddable treasury wallet React component for Platform API apps built on 1Claw.
Installation
npm install @1claw/wallet-reactQuick Start
import { OneclawTreasuryWidget } from "@1claw/wallet-react";
function App() {
return (
<OneclawTreasuryWidget
apiKey="plt_your_platform_api_key"
chains={["ethereum", "base"]}
onTransactionSent={(tx) => console.log("Sent:", tx.txHash)}
onError={(err) => console.error(err)}
/>
);
}Components
<OneclawEmbeddedWallet /> (v0.3.0)
Full embedded wallet with social login, email OTP login, Send/Swap/Receive/Buy views:
import { OneclawEmbeddedWallet } from "@1claw/wallet-react";
function App() {
return (
<OneclawEmbeddedWallet
appId="your-platform-slug"
socialProviders={["google", "apple"]}
features={{ send: true, swap: true, buy: true, receive: true }}
onLogin={(user) => console.log(user.walletAddress)}
/>
);
}Authentication methods:
- Social login — Google/Apple via
POST /v1/auth/social-login. - Email OTP — Passwordless login via
sendEmailOtp(email)andverifyEmailOtp(email, code). UsesPOST /v1/auth/email-otp/sendandPOST /v1/auth/email-otp/verify. - Passkey transaction auth —
tx-assertendpoints; sends can useX-Passkey-Tokeninstead of password.
<OneclawTreasuryWidget />
All-in-one widget that displays wallet balances and allows transfers.
| Prop | Type | Required | Description |
|------|------|----------|-------------|
| apiKey | string | Yes | Platform API key (plt_...) |
| baseUrl | string | No | API base URL (default: https://api.1claw.xyz) |
| chains | string[] | No | Chains to generate wallets for |
| theme | "light" \| "dark" \| "auto" | No | Color theme |
| onError | (error: Error) => void | No | Error callback |
| onTransactionSent | (result) => void | No | Send success callback |
| onSwapCompleted | (result) => void | No | Swap success callback |
| className | string | No | CSS class for outer container |
<OneclawWalletProvider />
Lower-level provider for building custom UI:
import { OneclawWalletProvider, useOneclawWallet } from "@1claw/wallet-react";
function CustomWalletUI() {
const { wallets, balances, send, swap, refreshBalance } = useOneclawWallet();
// Build your own UI...
}
function App() {
return (
<OneclawWalletProvider apiKey="plt_...">
<CustomWalletUI />
</OneclawWalletProvider>
);
}Hooks
useOneclawWallet()
Returns:
| Field | Type | Description |
|-------|------|-------------|
| wallets | WalletInfo[] | Active wallets |
| balances | Record<string, WalletBalance> | Cached balances by chain |
| loading | boolean | Initial load state |
| error | Error \| null | Last error |
| refreshWallets() | () => Promise<void> | Refetch wallet list |
| refreshBalance(chain) | (chain: string) => Promise<WalletBalance> | Fetch balance |
| generateWallets(chains?) | (chains?: string[]) => Promise<WalletInfo[]> | Generate new wallets |
| send(params) | (params: SendTransactionParams) => Promise<SendTransactionResult> | Send a transaction |
| swap(params) | (params: SwapParams) => Promise<SwapResult> | Swap tokens via DEX aggregator |
| sendEmailOtp(email) | (email: string) => Promise<{ status: string }> | Send a one-time passcode for email login |
| verifyEmailOtp(email, code) | (email: string, code: string) => Promise<SocialLoginResult> | Verify OTP and authenticate |
Security
- The
apiKeyis a Platform API key, not a user key — it inherits platform custody guarantees. - Sends require password re-authentication via the
passwordfield inSendTransactionParams, or a passkey token fromcompletePasskeyTxAuth()viasendWithPasskey(). - Gasless sends (
gasless: trueinSendTransactionParams) use an ERC-4337 paymaster to sponsor gas — the user pays no gas fees. - Swaps route through a DEX aggregator (0x API) and also require password re-authentication.
- The widget never stores or caches private keys client-side.
