#!/usr/bin/env node
/**
* Test P2P Connection with Trystero
* Simulates two peers connecting to verify TURN server works
*/
import { joinRoom } from 'trystero/torrent'
import wrtc from '@roamhq/wrtc'
console.log('🧪 Testing P2P connection with TURN server...\n')
const config = {
appId: 'wirecore-v1',
password: 'wirecore-p2p-2026',
rtcConfig: {
iceServers: [
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun:stun.cloudflare.com:3478' },
{
urls: 'turn:142.93.23.112:3478',
username: 'wirecore',
credential: 'wirecore8261a6a559ce533c'
}
]
},
wrtc // Use Node.js WebRTC implementation
}
let peer1Connected = false
let peer2Connected = false
// Peer 1
console.log('Creating Peer 1...')
const room1 = joinRoom(config, 'wirecorev1-test')
room1.onPeerJoin(peerId => {
console.log('✅ Peer 1: Connected to peer:', peerId.substring(0, 8) + '...')
peer1Connected = true
checkComplete()
})
room1.onPeerLeave(peerId => {
console.log('❌ Peer 1: Peer left:', peerId.substring(0, 8) + '...')
})
// Peer 2
console.log('Creating Peer 2...')
const room2 = joinRoom(config, 'wirecorev1-test')
room2.onPeerJoin(peerId => {
console.log('✅ Peer 2: Connected to peer:', peerId.substring(0, 8) + '...')
peer2Connected = true
checkComplete()
})
room2.onPeerLeave(peerId => {
console.log('❌ Peer 2: Peer left:', peerId.substring(0, 8) + '...')
})
console.log('\n⏳ Waiting for peers to connect (60 seconds timeout)...\n')
let checkCount = 0
function checkComplete() {
if (peer1Connected && peer2Connected) {
console.log('\n🎉 SUCCESS! Both peers connected via P2P!')
console.log('✅ TURN server is working correctly\n')
process.exit(0)
}
}
// Check periodically
const interval = setInterval(() => {
checkCount++
if (checkCount % 5 === 0) {
console.log(`Still waiting... (${checkCount}s elapsed)`)
console.log(` Peer 1 connected: ${peer1Connected}`)
console.log(` Peer 2 connected: ${peer2Connected}`)
}
}, 1000)
// Timeout after 60 seconds
setTimeout(() => {
clearInterval(interval)
console.log('\n⏱️ Timeout reached (60 seconds)')
console.log(` Peer 1 connected: ${peer1Connected}`)
console.log(` Peer 2 connected: ${peer2Connected}`)
if (!peer1Connected || !peer2Connected) {
console.log('\n❌ FAILED: Peers did not connect')
console.log('Check TURN server logs for errors')
process.exit(1)
}
}, 60000)
// Handle cleanup
process.on('SIGINT', () => {
console.log('\n\n🛑 Test interrupted')
room1.leave()
room2.leave()
process.exit(1)
})