feat(call): add forwarded_for field to OperationContext (call/operation-context-forwarded-for)

This commit is contained in:
2026-06-28 22:03:51 +00:00
parent 37e430b09d
commit 5d6a943ad4
10 changed files with 327 additions and 12 deletions

View File

@@ -127,6 +127,7 @@ impl Dispatcher {
request_id: String,
operation_name: &str,
identity: Option<Identity>,
forwarded_for: Option<Identity>,
connection: &CallConnection,
) -> OperationContext {
let registration = self.registry.registration(operation_name);
@@ -152,6 +153,7 @@ impl Dispatcher {
parent_request_id: None,
identity: identity.clone(),
handler_identity: composition_authority,
forwarded_for,
capabilities,
metadata: HashMap::new(),
deadline: Some(Instant::now() + self.default_timeout),
@@ -179,10 +181,19 @@ impl Dispatcher {
let connection_identity = connection.connection().identity().cloned();
let identity = self.resolve_identity(connection_identity, &payload);
let forwarded_for = payload
.get("forwarded_for")
.and_then(|v| serde_json::from_value::<Identity>(v.clone()).ok());
let input = payload.get("input").cloned().unwrap_or(Value::Null);
let context =
self.build_root_context(request_id.clone(), &operation_name, identity, connection);
let context = self.build_root_context(
request_id.clone(),
&operation_name,
identity,
forwarded_for,
connection,
);
self.registry.invoke(&operation_name, input, context).await
}