@ruvector/edge-net 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +113 -0
- package/dht.js +790 -0
- package/firebase-setup.js +435 -0
- package/firebase-signaling.js +788 -0
- package/genesis.js +858 -0
- package/p2p.js +702 -0
- package/package.json +49 -4
- package/webrtc.js +37 -5
package/cli.js
CHANGED
|
@@ -110,6 +110,9 @@ function printHelp() {
|
|
|
110
110
|
${c('bold', 'COMMANDS:')}
|
|
111
111
|
${c('green', 'start')} Start an edge-net node in the terminal
|
|
112
112
|
${c('green', 'join')} Join network with public key (multi-contributor support)
|
|
113
|
+
${c('green', 'genesis')} Start a genesis/signaling server for P2P network
|
|
114
|
+
${c('green', 'firebase')} Setup Firebase (Google Cloud) for P2P bootstrap
|
|
115
|
+
${c('green', 'p2p')} Start full P2P network node
|
|
113
116
|
${c('green', 'benchmark')} Run performance benchmarks
|
|
114
117
|
${c('green', 'info')} Show package and WASM information
|
|
115
118
|
${c('green', 'demo')} Run interactive demonstration
|
|
@@ -123,6 +126,15 @@ ${c('bold', 'EXAMPLES:')}
|
|
|
123
126
|
${c('dim', '# Join with new identity (multi-contributor)')}
|
|
124
127
|
$ npx @ruvector/edge-net join --generate
|
|
125
128
|
|
|
129
|
+
${c('dim', '# Start genesis/signaling server (for local P2P)')}
|
|
130
|
+
$ npx @ruvector/edge-net genesis --port 8787
|
|
131
|
+
|
|
132
|
+
${c('dim', '# Setup Firebase for cloud-based P2P bootstrap')}
|
|
133
|
+
$ npx @ruvector/edge-net firebase --project YOUR_PROJECT_ID
|
|
134
|
+
|
|
135
|
+
${c('dim', '# Start full P2P network node')}
|
|
136
|
+
$ npx @ruvector/edge-net p2p
|
|
137
|
+
|
|
126
138
|
${c('dim', '# Run benchmarks')}
|
|
127
139
|
$ npx @ruvector/edge-net benchmark
|
|
128
140
|
|
|
@@ -422,6 +434,94 @@ async function runJoin() {
|
|
|
422
434
|
child.on('close', (code) => process.exit(code));
|
|
423
435
|
}
|
|
424
436
|
|
|
437
|
+
async function runGenesis() {
|
|
438
|
+
// Delegate to genesis.js
|
|
439
|
+
printBanner();
|
|
440
|
+
console.log(`${c('bold', 'Starting Genesis/Signaling Server...')}\n`);
|
|
441
|
+
|
|
442
|
+
const { spawn } = await import('child_process');
|
|
443
|
+
const args = process.argv.slice(3);
|
|
444
|
+
|
|
445
|
+
// Default to port 8787 if not specified
|
|
446
|
+
if (!args.includes('--port') && !args.includes('-p')) {
|
|
447
|
+
args.push('--port', '8787');
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
const child = spawn('node', [join(__dirname, 'genesis.js'), ...args], {
|
|
451
|
+
stdio: 'inherit'
|
|
452
|
+
});
|
|
453
|
+
child.on('close', (code) => process.exit(code));
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
async function runFirebaseSetup() {
|
|
457
|
+
// Delegate to firebase-setup.js
|
|
458
|
+
printBanner();
|
|
459
|
+
console.log(`${c('bold', 'Firebase Setup (Google Cloud)')}\n`);
|
|
460
|
+
|
|
461
|
+
const { spawn } = await import('child_process');
|
|
462
|
+
const args = process.argv.slice(3);
|
|
463
|
+
const child = spawn('node', [join(__dirname, 'firebase-setup.js'), ...args], {
|
|
464
|
+
stdio: 'inherit'
|
|
465
|
+
});
|
|
466
|
+
child.on('close', (code) => process.exit(code));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
async function runP2P() {
|
|
470
|
+
printBanner();
|
|
471
|
+
console.log(`${c('bold', 'Starting P2P Network Node...')}\n`);
|
|
472
|
+
|
|
473
|
+
await setupPolyfills();
|
|
474
|
+
|
|
475
|
+
try {
|
|
476
|
+
const { createP2PNetwork } = await import('./p2p.js');
|
|
477
|
+
|
|
478
|
+
// Generate node ID
|
|
479
|
+
const nodeId = `node-${Math.random().toString(36).slice(2, 10)}`;
|
|
480
|
+
|
|
481
|
+
console.log(`${c('cyan', 'Node ID:')} ${nodeId}`);
|
|
482
|
+
console.log(`${c('cyan', 'Mode:')} Firebase bootstrap → DHT → Full P2P\n`);
|
|
483
|
+
|
|
484
|
+
console.log(`${c('dim', 'Initializing components...')}`);
|
|
485
|
+
|
|
486
|
+
const network = await createP2PNetwork(
|
|
487
|
+
{ nodeId },
|
|
488
|
+
{
|
|
489
|
+
// Use Firebase bootstrap if configured, fall back to local
|
|
490
|
+
bootstrapStrategy: process.env.FIREBASE_API_KEY ? 'firebase' : 'local',
|
|
491
|
+
}
|
|
492
|
+
);
|
|
493
|
+
|
|
494
|
+
console.log(`\n${c('bold', 'NETWORK STATUS:')}`);
|
|
495
|
+
const stats = network.getStats();
|
|
496
|
+
console.log(` ${c('cyan', 'Mode:')} ${c('green', stats.mode)}`);
|
|
497
|
+
console.log(` ${c('cyan', 'Bootstrap:')} ${stats.bootstrapMode}`);
|
|
498
|
+
console.log(` ${c('cyan', 'Peers:')} ${stats.peers}`);
|
|
499
|
+
console.log(` ${c('cyan', 'Firebase:')} ${stats.firebaseConnected ? c('green', 'Connected') : c('yellow', 'Not configured')}`);
|
|
500
|
+
console.log(` ${c('cyan', 'DHT Peers:')} ${stats.dhtPeers}`);
|
|
501
|
+
console.log(` ${c('cyan', 'Ledger Balance:')} ${stats.ledgerBalance}`);
|
|
502
|
+
|
|
503
|
+
console.log(`\n${c('dim', 'Press Ctrl+C to stop.')}`);
|
|
504
|
+
|
|
505
|
+
// Periodic status updates
|
|
506
|
+
setInterval(() => {
|
|
507
|
+
const s = network.getStats();
|
|
508
|
+
process.stdout.write(`\r${c('dim', `[${new Date().toLocaleTimeString()}]`)} Peers: ${s.peers} | Mode: ${s.mode} | Balance: ${s.ledgerBalance} `);
|
|
509
|
+
}, 5000);
|
|
510
|
+
|
|
511
|
+
process.on('SIGINT', async () => {
|
|
512
|
+
console.log(`\n\n${c('yellow', 'Stopping P2P network...')}`);
|
|
513
|
+
await network.stop();
|
|
514
|
+
console.log(`${c('green', '✓')} Network stopped.`);
|
|
515
|
+
process.exit(0);
|
|
516
|
+
});
|
|
517
|
+
|
|
518
|
+
} catch (err) {
|
|
519
|
+
console.error(`${c('red', '✗ Failed to start P2P network:')}\n`, err.message);
|
|
520
|
+
console.log(`\n${c('dim', 'Tip: Run')} ${c('cyan', 'npx @ruvector/edge-net firebase')} ${c('dim', 'to setup Firebase bootstrap.')}`);
|
|
521
|
+
process.exit(1);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
425
525
|
// Main
|
|
426
526
|
const command = process.argv[2] || 'help';
|
|
427
527
|
|
|
@@ -432,6 +532,19 @@ switch (command) {
|
|
|
432
532
|
case 'join':
|
|
433
533
|
runJoin();
|
|
434
534
|
break;
|
|
535
|
+
case 'genesis':
|
|
536
|
+
case 'signaling':
|
|
537
|
+
runGenesis();
|
|
538
|
+
break;
|
|
539
|
+
case 'firebase':
|
|
540
|
+
case 'firebase-setup':
|
|
541
|
+
case 'gcloud':
|
|
542
|
+
runFirebaseSetup();
|
|
543
|
+
break;
|
|
544
|
+
case 'p2p':
|
|
545
|
+
case 'network':
|
|
546
|
+
runP2P();
|
|
547
|
+
break;
|
|
435
548
|
case 'benchmark':
|
|
436
549
|
case 'bench':
|
|
437
550
|
runBenchmark();
|