Package-level declarations

Types

Link copied to clipboard

When a captured body reaches the exchange line - per direction, the switch that decides log VOLUME. The normative contract of the log-request-body / log-response-body keys (the reference YAML names them and points here); the decision and its derivation are ADR-0006.

Link copied to clipboard

How far the application consumed a body, as observed by a twin's tee. UNREAD: the body was never selected/subscribed to - the bytes, if the client sent any, never reached the application. PARTIAL: consumption started but the end of the stream was not observed - an early-exiting parser, an exception or cancellation mid-read, or a read loop that never asked for the final EOF. COMPLETE: the end of the stream was observed. The values are the state tag of the endpoint.request.body.read counter and therefore a twin contract; the exact observation points are documented on each twin's BoundedBodyCapture (deliberately separate implementations - ADR-0003).

Link copied to clipboard

Supplies the correlation id for a TRACELESS request (ADR-0002) that did not carry one in the configured correlation header (RequestLoggingProperties.correlationIdHeader in each twin).

Link copied to clipboard
data class HeaderLogProperties(val includes: List<String> = emptyList(), val excludes: List<String> = emptyList(), val masked: List<String> = listOf(WILDCARD), val unmasked: List<String> = emptyList())

One header section (request-headers / response-headers): which header names are logged, and which of the logged values appear in plaintext. Shared by both endpoint-logging twins (ADR-0003 amendment): selection semantics are a cross-twin contract, and THIS KDoc is its normative text - the reference YAML names the keys and defaults and points here (CONTRIBUTING, "one normative source").

Link copied to clipboard
fun interface HeaderValueMasker

Redacts the VALUE of a logged header - every one, by default (ADR-0005), unless a section's HeaderLogProperties.unmasked allows the name in plaintext - before it reaches the log line. The rendering is a stable PSEUDONYM, not anonymisation: equal values stay recognisable as equal, which is the point (correlation) and the limit (a keyed masker is what stops a reader from confirming a guess).

Link copied to clipboard
class MaskingKey(val value: String)

The masking-key property as a SECRET-bearing value (code-style audit of 2026-09-05, finding 5): the string that keys the built-in fingerprint (HeaderValueMasker.forKey), or the empty string for the unkeyed default. A type of its own rather than a String so that the properties classes keep their GENERATED toString: this class renders itself as <redacted> whenever it holds a key, and a properties dump - a startup log, a debug endpoint - can never print the secret.

Link copied to clipboard
object MdcKeys

MDC keys the twins maintain while a request is being handled. The values carry the module's endpoint_ prefix, so an encoder that emits MDC entries as fields lands them in the same namespace as the EndpointLogField family each twin owns. ROUTE carries the request path: the scope opens BEFORE the chain, when the handler pattern is not yet known.

Link copied to clipboard
fun interface NanoTimeSource

Injectable monotonic time, used exclusively for measuring the duration of an HTTP exchange.