import { EnclaveBroker, ToolRegistry } from '@enclave-vm/broker';
import Redis from 'ioredis';
// Create tool registry
const tools = new ToolRegistry();
tools.register({
name: 'users:list',
description: 'List users',
parameters: {
limit: { type: 'number', description: 'Max results' },
},
handler: async (args) => {
return [
{ id: '1', name: 'Alice' },
{ id: '2', name: 'Bob' },
].slice(0, args.limit || 10);
},
});
tools.register({
name: 'users:get',
description: 'Get user by ID',
parameters: {
id: { type: 'string', description: 'User ID', required: true },
},
handler: async (args) => {
return { id: args.id, name: 'Alice' };
},
});
// Create broker
const broker = new EnclaveBroker({
redis: new Redis(process.env.REDIS_URL),
tools,
sessionTimeout: 300000,
maxConcurrentSessions: 1000,
rateLimiting: {
windowMs: 60000,
maxRequests: 100,
},
});
// Event handlers
broker.on('session:created', (session) => {
console.log('Session created:', session.id);
});
broker.on('tool:called', (session, tool, args) => {
console.log(`Tool called: ${tool}`, args);
});
// Start server
await broker.listen(3001);
console.log('Broker running on port 3001');
// Graceful shutdown
process.on('SIGTERM', async () => {
await broker.close();
process.exit(0);
});