@serve.zone/dcrouter
v13.9.1
Published
A multifaceted routing service handling mail and SMS delivery functions.
Maintainers
Readme
DCRouter Storage Overview
DCRouter uses a unified database layer backed by @push.rocks/smartdata for all persistent data. All data is stored as typed document classes in a single database.
Database Modes
Embedded Mode (default)
When no external MongoDB URL is provided, DCRouter starts an embedded LocalSmartDb (Rust-based MongoDB-compatible engine) via @push.rocks/smartdb.
~/.serve.zone/dcrouter/tsmdb/External Mode
Connect to any MongoDB-compatible database by providing a connection URL.
dbConfig: {
mongoDbUrl: 'mongodb://host:27017',
dbName: 'dcrouter',
}Configuration
dbConfig: {
enabled: true, // default: true
mongoDbUrl: undefined, // default: embedded LocalSmartDb
storagePath: '~/.serve.zone/dcrouter/tsmdb', // default (embedded mode only)
dbName: 'dcrouter', // default
cleanupIntervalHours: 1, // TTL cleanup interval
}Document Classes
All data is stored as smartdata document classes in ts/db/documents/.
| Document Class | Collection | Unique Key | Purpose |
|---|---|---|---|
| StoredRouteDoc | storedRoutes | id | Programmatic routes (created via API) |
| RouteOverrideDoc | routeOverrides | routeName | Hardcoded route enable/disable overrides |
| ApiTokenDoc | apiTokens | id | API tokens (hashed secrets, scopes, expiry) |
| VpnServerKeysDoc | vpnServerKeys | configId (singleton) | VPN server Noise + WireGuard keypairs |
| VpnClientDoc | vpnClients | clientId | VPN client registrations |
| AcmeCertDoc | acmeCerts | domainName | ACME certificates and keys |
| ProxyCertDoc | proxyCerts | domain | SmartProxy TLS certificates |
| CertBackoffDoc | certBackoff | domain | Per-domain cert provision backoff state |
| RemoteIngressEdgeDoc | remoteIngressEdges | id | Edge node registrations |
| VlanMappingsDoc | vlanMappings | configId (singleton) | MAC-to-VLAN mapping table |
| AccountingSessionDoc | accountingSessions | sessionId | RADIUS accounting sessions |
| CachedEmail | cachedEmails | id | Email metadata (TTL: 30 days) |
| CachedIPReputation | cachedIPReputation | ipAddress | IP reputation results (TTL: 24 hours) |
Architecture
DcRouterDb (singleton)
├── LocalSmartDb (embedded, Rust) ─── or ─── External MongoDB
└── SmartdataDb (ORM)
└── @Collection(() => getDb())
├── StoredRouteDoc
├── RouteOverrideDoc
├── ApiTokenDoc
├── VpnServerKeysDoc / VpnClientDoc
├── AcmeCertDoc / ProxyCertDoc / CertBackoffDoc
├── RemoteIngressEdgeDoc
├── VlanMappingsDoc / AccountingSessionDoc
├── CachedEmail (TTL)
└── CachedIPReputation (TTL)TTL Cleanup
CacheCleaner runs on a configurable interval (default: 1 hour) and removes expired documents where expiresAt < now().
Disabling
For tests or lightweight deployments without persistence:
dbConfig: { enabled: false }