import { Naive, isPendingApproval } from "@usenaive-sdk/node";
const naive = new Naive({ apiKey: process.env.NAIVE_API_KEY! });
// 1. Connect (open authorize_url in a browser to authorize)
const { authorize_url } = await naive.forUser(alice.id).trading.connect({ env: "paper" });
// 2. Read state (no approval required)
await naive.forUser(alice.id).trading.account();
await naive.forUser(alice.id).trading.positions();
await naive.forUser(alice.id).trading.assets({ assetClass: "crypto" });
await naive.forUser(alice.id).trading.quote("BTC/USD,ETH/USD");
// 3. Trade — works for stocks, options, and crypto (symbol decides the market)
const res = await naive.forUser(alice.id).trading.createOrder({
symbol: "BTC/USD", notional: "25", side: "buy", type: "market", time_in_force: "gtc",
});
if (isPendingApproval(res)) {
await naive.forUser(alice.id).approvals.wait(res.approval_id);
}
// Stocks use a ticker + day/gtc time-in-force
await naive.forUser(alice.id).trading.createOrder({
symbol: "AAPL", qty: 2, side: "buy", type: "limit", limit_price: 150, time_in_force: "day",
});
// Manage
await naive.forUser(alice.id).trading.orders({ status: "open" });
await naive.forUser(alice.id).trading.cancelOrder(orderId);
await naive.forUser(alice.id).trading.closePosition("BTCUSD", { percentage: 50 });