5.9 KiB
OpenSpec Change: network-plugin-middleware
- Change ID: network-plugin-middleware
- Package:
@suaveplan/network-plugin-middleware(new) - Status: PROPOSED
- Type: new-package
- Date: 2026-04-29
Why
The network stack processes thousands of messages per second across multiple plugins. Without a unified interception layer, each plugin must independently handle cross-cutting concerns: logging, validation, rate limiting, transformation, and security. This leads to duplicated code, inconsistent behavior, and missed enforcement. A middleware pipeline provides a single, ordered chain where every message (incoming and outgoing) passes through configurable interceptors before reaching its destination.
This plugin implements a priority-ordered middleware chain for the network layer, inspired by Express/Koa middleware patterns but adapted for peer-to-peer message flow.
What changes
- ADDED:
MiddlewarePluginclass implementingNetworkPlugin. - ADDED:
MiddlewareManager— registers, orders, and executes middleware components. Supports runtime add/remove/enable/disable. Orders middleware by priority bands:CRITICAL(0–99) — security validation, message integrity, system health filtersHIGH(100–199) — encryption/decryption, authentication, rate limitingNORMAL(200–299) — logging, metrics collection, transformationsLOW(300–399) — content enrichment, non-critical validations, debug infoBACKGROUND(400+) — performance monitoring, analytics, diagnostics
- ADDED:
LoggingMiddleware— records message details with configurable body inclusion, max body size, and custom formatters. Logs toNetworkBustopicmiddleware:loggedfor aggregation. - ADDED:
ValidationMiddleware— schema-based message validation using Zod. Supports per-MessageTypeschemas. Strict mode rejects invalid messages; lenient mode logs warnings but forwards. - ADDED:
TransformationMiddleware— modifies message structure per type. Example: compress large payloads, strip debug fields in production, inject trace context. - ADDED:
MetricsMiddleware— collects per-message metrics: size, processing time, queue wait time. Publishesmiddleware:metricson bus fornetwork-plugin-monitor. - ADDED:
ThrottlingMiddleware— rate limiting with token-bucket algorithm. Supports global limits, per-peer limits, per-type limits, and burst allowances. Uses@suaveplan/rate-limiter. - ADDED:
SecurityMiddleware— automatic encryption/signing per policy. Intercepts outgoing messages and applies crypto transforms based on message type and destination tier. - ADDED:
I18nMiddleware— locale-aware message handling. Injects locale metadata, handles RTL text, standardizes timestamps. - ADDED:
NETWORK_MW_CODES— frozen error registry.
Middleware chain execution
OUTGOING: Application → MiddlewareManager → (CRITICAL → HIGH → NORMAL → LOW → BACKGROUND) → Transport
INCOMING: Transport → MiddlewareManager → (CRITICAL → HIGH → NORMAL → LOW → BACKGROUND) → Application
If any middleware returns null, the message is DROPPED.
If any middleware throws, the error policy applies: continue | stop | retry.
Out of scope
- Application-specific middleware → applications register custom middleware via the plugin API.
- Message routing logic → handled by
network-coreMessageRouter. - Transport-specific transforms → handled by
network-plugin-protocolpipeline.
Source mapping
This derives from docs/old-network-planning/PHASE_9.md §Middleware System and PLAN_ENHANCED.md §Phase 9.
| Requirement | Source lines | Notes |
|---|---|---|
| Priority-based ordering | PHASE_9.md §Middleware Priority Levels |
verbatim: 5 priority bands |
| Logging middleware | PHASE_9.md §Logging Middleware |
reworded; uses NetworkBus |
| Validation middleware | PHASE_9.md §Validation Middleware |
reworded; uses Zod |
| Transformation middleware | PHASE_9.md §Transformation Middleware |
reworded |
| Metrics middleware | PHASE_9.md §Metrics Middleware |
reworded; publishes to bus |
| Throttling middleware | PHASE_9.md §Throttling Middleware |
reworded; uses @suaveplan/rate-limiter |
| Direction handling | PHASE_9.md §Middleware Chain Execution |
verbatim: incoming vs outgoing |
| Chain interruption | PHASE_9.md §Chain Execution |
verbatim: null → drop |
Requirements with no source line
| Requirement | Justification |
|---|---|
SecurityMiddleware |
Required for automatic per-policy crypto application |
I18nMiddleware |
Required for locale-aware message handling across global peers |
| Runtime add/remove/enable/disable | Required for dynamic middleware configuration without restart |
Verification approach
src/manager/manager.spec-conformance.test.ts— pins registration, ordering, enable/disable, removal.src/logging/logging.spec-conformance.test.ts— pins body inclusion, formatting, max size.src/validation/validation.spec-conformance.test.ts— pins schema validation, strict/lenient modes.src/transformation/transformation.spec-conformance.test.ts— pins message modification, type-specific transforms.src/metrics/metrics.spec-conformance.test.ts— pins size/timing collection, bus publication.src/throttling/throttling.spec-conformance.test.ts— pins global/per-peer/per-type limits, burst handling.src/security/security.spec-conformance.test.ts— pins automatic crypto application per policy.src/i18n/i18n.spec-conformance.test.ts— pins locale injection, RTL handling.src/chain/chain.spec-conformance.test.ts— pins null-drop, error-policy, direction isolation.src/error-codes.spec-conformance.test.ts— frozen registry.tests/dep-graph.test.ts— pins no direct import of transport or protocol packages.
Migration impact
None — additive only. Middleware is opt-in; existing message flow continues unchanged if no middleware is registered.