pub struct FcpChannelConfig {
pub anonymous: bool,
pub token: Option<String>,
pub handshake: Option<String>,
pub session_expiration_seconds: u32,
pub rate_limit_per_minute: Option<u32>,
pub response_timeout_seconds: u32,
}Expand description
Typed FCP channel configuration.
FCP is intentionally schema-free at the wire layer (see
specs/fcp-channel.md). The fields here only control server-side
behavior — handshake content, a single shared bearer token, session
reuse, rate limiting — and never constrain the body the actor sends in.
FCP deliberately exposes a smaller auth surface than AG-UI/A2A: it supports anonymous access and a single shared bearer token, and nothing else. Inline OIDC/HTTP-Basic/mTLS verifier modes are intentionally not wired here so the FCP ingress path does not share authentication machinery with other channels or with the main API’s user auth stack. Operators that need IdP-backed auth in front of an FCP endpoint should terminate that at the edge (reverse proxy, IAP, mTLS) rather than asking the FCP handler to grow another auth mode.
Fields§
§anonymous: boolWhether anonymous access is allowed for this endpoint. When false
a non-empty token must authenticate every POST.
token: Option<String>Optional shared bearer token. When set, callers must send
Authorization: Bearer <token> (or the X-Everruns-FCP-Token
header). Validated by constant-time comparison inside the FCP
handler — never via the shared App endpoint auth verifier.
handshake: Option<String>Markdown body returned for GET requests (the FCP handshake). When
omitted, a generic handshake derived from the app’s name and
description is used.
session_expiration_seconds: u32How long (in seconds) the FCP session cookie keeps a session
resumable. 0 disables expiration. Defaults to 6 hours so a
long-running conversation expires on a sensible cadence.
rate_limit_per_minute: Option<u32>Optional per-IP rate limit (requests per minute) for the FCP endpoint.
None or Some(0) disables the per-app limit; the global API limit
still applies. Counted in an FCP-specific limiter namespace so it
cannot be shared or exhausted by other channels.
response_timeout_seconds: u32Maximum number of seconds the FCP endpoint waits for the agent to
produce a reply before returning a 504. Defaults to 120 s.
Trait Implementations§
Source§impl Clone for FcpChannelConfig
impl Clone for FcpChannelConfig
Source§fn clone(&self) -> FcpChannelConfig
fn clone(&self) -> FcpChannelConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FcpChannelConfig
impl Debug for FcpChannelConfig
Source§impl<'de> Deserialize<'de> for FcpChannelConfig
impl<'de> Deserialize<'de> for FcpChannelConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for FcpChannelConfig
impl RefUnwindSafe for FcpChannelConfig
impl Send for FcpChannelConfig
impl Sync for FcpChannelConfig
impl Unpin for FcpChannelConfig
impl UnsafeUnpin for FcpChannelConfig
impl UnwindSafe for FcpChannelConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request