import * as ed25519 from '@noble/ed25519';
const API = 'https://sandbox.getsly.ai';
const AGENT_ID = 'agt_...';
const PRIVATE_KEY = Buffer.from(process.env.AGENT_PRIVATE_KEY!, 'base64');
async function authenticate(): Promise<string> {
// 1. Challenge
const chRes = await fetch(`${API}/v1/agents/${AGENT_ID}/challenge`, {
method: 'POST',
});
const { challenge } = await chRes.json();
// 2. Sign
const sig = await ed25519.signAsync(
new TextEncoder().encode(challenge),
PRIVATE_KEY
);
const signature = Buffer.from(sig).toString('base64');
// 3. Authenticate
const authRes = await fetch(`${API}/v1/agents/${AGENT_ID}/authenticate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ challenge, signature }),
});
const { sessionToken } = await authRes.json();
return sessionToken;
}
// Use it
const token = await authenticate();
const wallets = await fetch(`${API}/v1/wallets`, {
headers: { Authorization: `Bearer ${token}` },
}).then((r) => r.json());