Observed since 21 Oct, 09:14 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
@0xmonaco/react
React hooks and components for the Monaco Protocol. Build trading applications with React using type-safe hooks for authentication, trading, market data, and WebSocket connections.
React hooks and components for the Monaco Protocol. Build trading applications with React using type-safe hooks for authentication, trading, market data, and WebSocket connections.
# Install the React SDK and its dependencies
npm install @0xmonaco/react react wagmi@^2.17.5 viem@^2.31.7
# Or with bun
bun add @0xmonaco/react react wagmi@^2.17.5 viem@^2.31.7
# Or with yarn
yarn add @0xmonaco/react react wagmi@^2.17.5 viem@^2.31.7
useAuth hook for wallet-based login and session managementuseTrade hook for placing and managing ordersuseMarket hook for trading pairs and candlestick datauseProfile hook for user account informationuseVault hook for token deposits and withdrawalsWrap your application with the MonacoProvider:
import { MonacoProvider } from "@0xmonaco/react";
import { WagmiProvider, createConfig, http } from "wagmi";
import { seiTestnet } from "wagmi/chains";
const wagmiConfig = createConfig({
chains: [seiTestnet],
transports: {
[seiTestnet.id]: http("https://evm-rpc-testnet.sei-apis.com"),
},
});
function App() {
return (
<WagmiProvider config={wagmiConfig}>
<MonacoProvider
network="staging"
seiRpcUrl="https://evm-rpc-testnet.sei-apis.com"
>
<YourApp />
</MonacoProvider>
</WagmiProvider>
);
}
import { useMonaco, useAuth, useTrade, useMarket } from "@0xmonaco/react";
function TradingComponent() {
const sdk = useMonaco();
const { login, logout, isAuthenticated } = useAuth();
const { placeLimitOrder, placeMarketOrder } = useTrade();
const { tradingPairs, getTradingPairBySymbol } = useMarket();
// Login
const handleLogin = async () => {
await login("your-client-id", { connectWebSocket: true });
};
// Place an order
const handlePlaceOrder = async () => {
const order = await placeLimitOrder(
"BTC/USDC",
"BUY",
"0.001",
"50000"
);
console.log("Order placed:", order.order_id);
};
return (
<div>
<button onClick={handleLogin}>
{isAuthenticated ? "Logout" : "Login"}
</button>
<button onClick={handlePlaceOrder}>Place Order</button>
</div>
);
}
useMonaco()Access the Monaco SDK instance directly.
const sdk = useMonaco();
const address = sdk.getAccountAddress();
useAuth()Authentication and session management.
const { login, logout, isAuthenticated, authState } = useAuth();
// Login with auto-connect WebSocket
await login(clientId, { connectWebSocket: true });
// Check authentication status
if (isAuthenticated) {
console.log("User:", authState?.user);
}
// Logout
await logout();
useTrade()Place and manage orders.
const {
placeLimitOrder,
placeMarketOrder,
cancelOrder,
replaceOrder,
getOrder,
getPaginatedOrders,
} = useTrade();
// Place a limit order
const order = await placeLimitOrder(
"BTC/USDC",
"BUY",
"0.001",
"50000",
{ timeInForce: "GTC" }
);
// Place a market order
const marketOrder = await placeMarketOrder(
"BTC/USDC",
"SELL",
"0.001",
{ slippageTolerance: 0.01 } // 1%
);
// Cancel an order
await cancelOrder(orderId);
// Get orders
const { data: orders } = await getPaginatedOrders({
status: "SUBMITTED",
trading_pair: "BTC/USDC",
});
useMarket()Access trading pair metadata and market data.
const { tradingPairs, getTradingPairBySymbol, getCandlestickData } = useMarket();
// Get all trading pairs
const pairs = await tradingPairs();
// Get specific pair
const btcPair = await getTradingPairBySymbol("BTC/USDC");
// Get candlestick data
const candles = await getCandlestickData(
"BTC/USDC",
"1h",
Date.now() - 86400000, // 24h ago
Date.now()
);
useTradeFeed()Get recent trades for a trading pair.
const { getTradeFeed } = useTradeFeed();
const trades = await getTradeFeed("BTC/USDC", { limit: 50 });
useVault()Manage token deposits and withdrawals using asset IDs.
const { deposit, withdraw, approve, needsApproval } = useVault();
const { getUserBalanceByAssetId } = useProfile();
// Get asset ID from trading pair
const pair = await getTradingPairBySymbol("USDC/USDT");
const assetId = pair.base_asset_id;
// Check balance
const balance = await getUserBalanceByAssetId(assetId);
console.log(`Balance: ${balance.total_balance} ${balance.symbol}`);
// Check if approval is needed
if (await needsApproval(assetId, amount)) {
await approve(assetId, amount);
}
// Deposit tokens
await deposit(assetId, amount);
// Withdraw tokens
await withdraw(assetId, amount);
useProfile()Access user profile and account information.
const { fetchProfile, getUserBalances, getPaginatedUserMovements } = useProfile();
// Get profile (also populates the hook's balances/movements/orders state)
const profile = await fetchProfile();
// Get balances — cursor paged: omit pageToken to start, then follow
// nextPageToken until it comes back empty.
const balances = await getUserBalances({
pageSize: 10,
});
// Get movements (transaction history)
const firstPage = await getPaginatedUserMovements({
pageSize: 20,
});
// Walk the rest
let pageToken = firstPage.nextPageToken;
while (pageToken) {
const next = await getPaginatedUserMovements({ pageSize: 20, pageToken });
pageToken = next.nextPageToken;
}
useOrderWebSocket()Subscribe to real-time order updates.
const { subscribe, unsubscribe, connect, disconnect } = useOrderWebSocket();
useEffect(() => {
// Connect and subscribe
await connect();
subscribe("BTC/USDC", "SPOT", (event) => {
console.log("Order event:", event.eventType);
if (event.eventType === "ORDER_FILLED") {
console.log("Order filled:", event.order);
}
});
return () => {
unsubscribe("BTC/USDC", "SPOT");
disconnect();
};
}, []);
useOHLCVWebSocket()Subscribe to real-time candlestick data.
const { subscribe, unsubscribe, connect, disconnect } = useOHLCVWebSocket();
useEffect(() => {
await connect();
subscribe("BTC/USDC", "SPOT", "1m", (event) => {
console.log("New candle:", event.candlestick);
});
return () => {
unsubscribe("BTC/USDC", "SPOT", "1m");
disconnect();
};
}, []);
useOrderbook()Subscribe to real-time orderbook updates.
const { subscribe, unsubscribe, connect, disconnect } = useOrderbook();
useEffect(() => {
await connect();
subscribe("BTC/USDC", "SPOT", (event) => {
console.log("Orderbook:", {
bids: event.bids.length,
asks: event.asks.length,
});
});
return () => {
unsubscribe("BTC/USDC", "SPOT");
disconnect();
};
}, []);
For optimal type inference, use these TypeScript settings:
{
"compilerOptions": {
"target": "ES2020",
"module": "nodenext",
"moduleResolution": "nodenext",
"jsx": "react-jsx",
"strict": true,
"esModuleInterop": true,
"resolveJsonModule": true
}
}
bun run build
bun run dev
bun run lint
This project is licensed under the MIT License.
For support, please:
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
@0xmonaco/coreEnvironment{
"local_name": "@0xmonaco/core",
"alias": false,
"peer_metadata": null
} | 1.0.48 | runtime |
@0xmonaco/typesEnvironment{
"local_name": "@0xmonaco/types",
"alias": false,
"peer_metadata": null
} | 1.0.48 | runtime |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": null
} | ^18.3.1 | development |
@types/reactEnvironment{
"local_name": "@types/react",
"alias": false,
"peer_metadata": null
} | ^19.1.12 | development |
viemEnvironment{
"local_name": "viem",
"alias": false,
"peer_metadata": null
} | ^2.45.2 | peer |
reactEnvironment{
"local_name": "react",
"alias": false,
"peer_metadata": null
} | ^17.0.0 || ^18.0.0 || ^19.0.0 | peer |
wagmiEnvironment{
"local_name": "wagmi",
"alias": false,
"peer_metadata": null
} | ^2.0.0 || ^3.0.0 | peer |
Source distribution
{
"shasum": "e39496fed0d65f0e9d38627f94c6d763ba94ed35",
"tarball": "https://registry.npmjs.org/@0xmonaco/react/-/react-1.0.48.tgz",
"fileCount": 142,
"integrity": "sha512-ckYTjqn/aDS7Q25Q45fg7+lhhiCfPuFFoebh/OmRbMx2mZkoBjHvWhU9bkSIaCimeVRQn2Z5N9YJj0L/ENA0tw==",
"signatures": [
{
"sig": "MEUCIQDoiIrTNhqWgdmGG7+KCuN03FZUFzZEzFGUJH/ge/swRgIgJ0HvdlQCcALUGCdBIZkSVlHBj7XjGgSllqhU6uF2Lk8=",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
}
],
"unpackedSize": 152457
}Shared repository data · GitHub
Observed since 21 Oct, 09:14 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:c3dafdeddbce407ec00f80a2a54efcb6c3d91f220dd6e5ea2cb9c6e597716ec8