use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExternalActionSummaryDto {
pub action_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub enabled: bool,
pub name: String,
#[serde(default)]
pub outputs: Vec<String>,
#[serde(default)]
pub required_inputs: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sort_id: Option<String>,
pub webhook_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PendingInvocationDto {
pub action_name: String,
#[serde(default)]
pub inputs: BTreeMap<String, serde_json::Value>,
pub invocation_id: String,
pub invoked_at: String,
pub status: String,
pub term_id: String,
pub timeout_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterExternalActionRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub name: String,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub optional_inputs: BTreeMap<String, serde_json::Value>,
#[serde(default)]
pub outputs: Vec<String>,
#[serde(default)]
pub required_inputs: Vec<String>,
pub tenant_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timeout_secs: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub webhook_secret: Option<String>,
pub webhook_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegisterExternalActionResponse {
pub action_id: String,
pub message: String,
pub name: String,
pub sort_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InvokeActionRequest {
pub action_name: String,
#[serde(default)]
pub inputs: BTreeMap<String, serde_json::Value>,
pub tenant_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InvokeActionResponse {
pub callback_url: String,
pub demons_attached: u32,
pub invocation_id: String,
pub message: String,
pub status: String,
pub term_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebhookCallbackRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notify_agent_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notify_tenant_id: Option<String>,
#[serde(default)]
pub outputs: BTreeMap<String, serde_json::Value>,
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WebhookCallbackResponse {
pub demons_fired: u32,
pub message: String,
pub status: String,
pub term_updated: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListExternalActionsResponse {
#[serde(default)]
pub actions: Vec<ExternalActionSummaryDto>,
pub tenant_id: String,
pub total: u64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ListPendingInvocationsResponse {
#[serde(default)]
pub invocations: Vec<PendingInvocationDto>,
pub tenant_id: String,
pub total_pending: u64,
}