Files
suaveplan/openspec/archive/2026-05-04-network-plugin-middleware/proposal.md
2026-05-27 23:29:53 +01:00

5.9 KiB
Raw Blame History

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: MiddlewarePlugin class implementing NetworkPlugin.
  • 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 filters
    • HIGH (100–199) — encryption/decryption, authentication, rate limiting
    • NORMAL (200–299) — logging, metrics collection, transformations
    • LOW (300–399) — content enrichment, non-critical validations, debug info
    • BACKGROUND (400+) — performance monitoring, analytics, diagnostics
  • ADDED: LoggingMiddleware — records message details with configurable body inclusion, max body size, and custom formatters. Logs to NetworkBus topic middleware:logged for aggregation.
  • ADDED: ValidationMiddleware — schema-based message validation using Zod. Supports per-MessageType schemas. 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. Publishes middleware:metrics on bus for network-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-core MessageRouter.
  • Transport-specific transforms → handled by network-plugin-protocol pipeline.

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.