#!/usr/bin/env tsx import { io } from 'socket.io-client'; // Manual socket.io client test for J4 // Usage: npm run dev (in one terminal), then tsx scripts/test-socket-client.ts // To get a JWT: curl -X POST http://localhost:3000/api/v1/sessions -H 'Content-Type: application/json' -d '{"apiToken": "ah_live_XXXX_..."}' const jwt = process.argv[2]; if (!jwt) { console.error('Usage: tsx scripts/test-socket-client.ts '); process.exit(1); } const socket = io('http://localhost:3000/agents', { auth: { jwt }, }); socket.on('connect', () => { console.log('โœ… Connected to /agents namespace'); }); socket.on('agent:hello-ack', (payload) => { console.log('โœ… Received agent:hello-ack:', JSON.stringify(payload, null, 2)); }); socket.on('presence:update', (payload) => { console.log('๐Ÿ‘๏ธ Received presence:update:', JSON.stringify(payload, null, 2)); }); socket.on('error', (payload) => { console.error('โŒ Received error:', JSON.stringify(payload, null, 2)); }); socket.on('connect_error', (err) => { console.error('โŒ Connection error:', err.message); process.exit(1); }); socket.on('disconnect', (reason) => { console.log('๐Ÿ”Œ Disconnected:', reason); }); // Test room:join with a non-existent room (should fail) setTimeout(() => { console.log('\n๐Ÿงช Testing room:join with invalid room...'); socket.emit('room:join', { roomId: '00000000-0000-0000-0000-000000000000', requestId: 'test-req-1', }); }, 2000); // Keep alive process.on('SIGINT', () => { console.log('\n๐Ÿ‘‹ Disconnecting...'); socket.disconnect(); process.exit(0); });