mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-18 04:29:54 +00:00
The per-target middleware chain (slots, dispatcher, mutation gate, metadata merger), body capture, access-log terminal sink, and the proxy wiring that builds + runs chains for synthesized agent-network services.
48 lines
1.7 KiB
Go
48 lines
1.7 KiB
Go
package middleware
|
|
|
|
import "context"
|
|
|
|
// Middleware is the surface exposed by each concrete implementation.
|
|
// The Manager invokes it through the Dispatcher, passing a cloned
|
|
// Input. Each middleware lives in exactly one Slot.
|
|
//
|
|
// Close releases any resources owned by the middleware instance
|
|
// (background goroutines, file handles). It is invoked when the chain
|
|
// holding the middleware is replaced or torn down. Implementations
|
|
// must be idempotent and safe to call after construction even when
|
|
// Invoke was never called.
|
|
type Middleware interface {
|
|
ID() string
|
|
Version() string
|
|
Slot() Slot
|
|
|
|
// AcceptedContentTypes lists the request/response content types
|
|
// the middleware needs the body for. Empty slice means the
|
|
// middleware does not inspect the body.
|
|
AcceptedContentTypes() []string
|
|
|
|
// MetadataKeys is the closed set of metadata keys this middleware
|
|
// may emit. The accumulator drops anything outside this allowlist.
|
|
MetadataKeys() []string
|
|
|
|
// MutationsSupported reports whether the middleware may emit
|
|
// header / body mutations. A spec with CanMutate=true is honoured
|
|
// only when the implementation also supports mutations.
|
|
MutationsSupported() bool
|
|
|
|
Invoke(ctx context.Context, in *Input) (*Output, error)
|
|
|
|
Close() error
|
|
}
|
|
|
|
// Factory builds a configured Middleware instance from raw config
|
|
// bytes shipped on the wire. Each registered middleware ID has a
|
|
// single factory in the registry. Factory.New returns an error when
|
|
// the config is malformed or violates a per-middleware invariant; the
|
|
// chain build path logs the error, increments the resolve_error metric,
|
|
// and skips the middleware.
|
|
type Factory interface {
|
|
ID() string
|
|
New(rawConfig []byte) (Middleware, error)
|
|
}
|