4.4 KiB
4.4 KiB
Project Analysis
Architecture Overview
This is a comprehensive network diagnostics toolkit. The main entry point is the SmartNetwork class which orchestrates all functionality. System-dependent operations are delegated to a Rust binary via JSON-over-stdin/stdout IPC using @push.rocks/smartrust.
Key features:
- Speed testing via Cloudflare (parallelizable with duration support) — pure TS
- ICMP ping with statistics — Rust binary (surge-ping)
- Port availability checks (local and remote) — Rust binary (tokio TCP / socket2)
- Network gateway discovery — Rust binary (parses /proc/net/route on Linux)
- Public IP retrieval — pure TS
- DNS resolution via smartdns — pure TS
- HTTP endpoint health checks — pure TS
- Traceroute — Rust binary (raw ICMP sockets via socket2)
Rust Binary Architecture (v4.5.0+)
Binary: rustnetwork
- Located in
rust/crates/rustnetwork/ - Cross-compiled for linux_amd64 and linux_arm64 via
@git.zone/tsrust - Output:
dist_rust/rustnetwork_linux_amd64,dist_rust/rustnetwork_linux_arm64 - IPC mode:
--managementflag for JSON-over-stdin/stdout
IPC Commands
| Method | Description |
|---|---|
healthPing |
Liveness check (returns { pong: true }) |
ping |
ICMP ping with count/timeout, returns stats |
traceroute |
Hop-by-hop latency via raw ICMP sockets |
tcpPortCheck |
TCP connect probe to remote host:port |
isLocalPortFree |
Bind test on IPv4 + IPv6 |
defaultGateway |
Parse /proc/net/route for default interface |
TypeScript Bridge
ts/smartnetwork.classes.rustbridge.ts— SingletonRustNetworkBridgewrappingsmartrust.RustBridgeSmartNetworkclass hasstart()/stop()lifecycle for the bridgeensureBridge()auto-starts on first use
Build Pipeline
pnpm build=tsbuild tsfolders --allowimplicitany && tsrust- Targets configured in
.smartconfig.jsonunder@git.zone/tsrust
Key Components
SmartNetwork Class
- Central orchestrator for all network operations
- Requires
start()before using ping/traceroute/port/gateway operations - Supports caching via
cacheTtloption for gateway and public IP lookups - Plugin architecture for extensibility
RustNetworkBridge Class
- Singleton pattern via
getInstance() - Binary search: dist_rust/ (platform-suffixed) > rust/target/release/ > rust/target/debug/
searchSystemPath: false— only looks in local paths
CloudflareSpeed Class
- Handles internet speed testing using Cloudflare's infrastructure
- Supports parallel streams and customizable test duration
- Upload speed measurement uses server-timing header with client-side timing fallback
Error Handling
- Custom
NetworkErrorandTimeoutErrorclasses for better error context - Error codes follow Node.js conventions (ENOTSUP, EINVAL, ETIMEOUT)
- Ping/port methods gracefully degrade on errors (return alive=false / false)
Logging
- Global logger interface for consistent logging across the codebase
- Replaceable logger implementation (defaults to console)
Statistics Helpers
- Utility functions for statistical calculations (average, median, quartile, jitter)
- Used by speed testing; ping statistics now computed server-side in Rust
Dependencies
- Runtime:
@push.rocks/smartrust(IPC bridge),@push.rocks/smartdns(DNS resolution) - Removed in v4.5.0:
@push.rocks/smartping,@push.rocks/smartstring,isopen,systeminformation - Dev:
@git.zone/tsrust(Rust cross-compilation)
Testing
test/test.ts— Core smoke tests (speed, ports, gateways, public IPs)test/test.ping.ts— ICMP ping tests (requires CAP_NET_RAW for alive=true)test/test.ports.ts— Comprehensive port testing (27 tests)test/test.features.ts— DNS, HTTP health check, traceroute, multi-ping, plugins, caching- All tests require
start()/stop()lifecycle for the Rust bridge
Technical Details
- ESM-only package (module type)
- TypeScript with strict typing
- Node built-in imports use
node:prefix throughout - Uses native Node.js modules for HTTP/HTTPS and os.networkInterfaces()
- Rust binary requires no elevated privileges for port checks; ICMP ping needs CAP_NET_RAW or appropriate ping_group_range
Design Patterns
- Singleton pattern for RustNetworkBridge
- Factory pattern for plugin registration
- Caching pattern with TTL for expensive operations
- Promise-based async/await throughout
- Error propagation with custom error types
- Graceful degradation when ICMP permissions unavailable