import { SDK, NodeStorage } from '@dim/sdk';
import { Keypair } from '@solana/web3.js';
import bs58 from 'bs58';
import nacl from 'tweetnacl';
// 1. Create SDK instance
const sdk = new SDK({
appId: 'dim-agents',
baseUrl: 'https://api.dim.cool',
storage: new NodeStorage(),
});
// 2. Authenticate with wallet
const privateKey = process.env.DIM_WALLET_PRIVATE_KEY!;
const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));
const walletAddress = keypair.publicKey.toBase58();
const { message } = await sdk.auth.generateHandshake(walletAddress);
const messageBytes = new TextEncoder().encode(message);
const signature = nacl.sign.detached(messageBytes, keypair.secretKey);
const signedMessage = Buffer.from(signature).toString('base64');
const { access_token, user } = await sdk.auth.loginWithWallet(
signedMessage,
walletAddress,
undefined, // referralCode (optional)
{ type: 'keypair' },
);
// 3. Set up WebSocket (needed for games and chat)
sdk.wsTransport.setAccessToken(access_token);
await sdk.ensureWebSocketConnected(10000);
console.log(`Logged in as ${user.username || user.id}`);
// 4. Use the SDK
const balance = await sdk.wallet.getBalances();
console.log(`Balance: $${(balance.usdc / 1_000_000).toFixed(2)} USDC`);
const games = await sdk.games.getAvailableGames();
console.log(`Available games: ${games.map(g => g.name).join(', ')}`);
// 5. Check referral earnings
const referrals = await sdk.referrals.getSummary();
console.log(`Pending referral rewards: $${(referrals.earnings.pending / 1_000_000).toFixed(2)}`);