use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use strum::{Display, EnumString};
use uuid::Uuid;
pub const ERC8004_REGISTRATION_V1: &str = "https://eips.ethereum.org/EIPS/eip-8004#registration-v1";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentServiceEndpoint {
pub name: String,
pub endpoint: String,
pub version: Option<String>,
pub skills: Option<Vec<String>>,
pub domains: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentRegistrationRef {
#[serde(rename = "agentId")]
pub agent_id: String,
#[serde(rename = "agentRegistry")]
pub agent_registry: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentRegistrationFile {
#[serde(rename = "type")]
pub type_url: String,
pub name: String,
pub description: String,
pub image: String,
pub services: Vec<AgentServiceEndpoint>,
#[serde(rename = "x402Support")]
pub x402_support: bool,
pub active: bool,
pub registrations: Vec<AgentRegistrationRef>,
#[serde(default, rename = "supportedTrust")]
pub supported_trust: Option<Vec<String>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Display, EnumString, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum AgentWalletProofType {
#[strum(serialize = "eip712", serialize = "eip_712")]
Eip712,
#[strum(serialize = "erc1271", serialize = "erc_1271")]
Erc1271,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentIdentity {
pub id: Uuid,
pub agent_registry: String,
pub agent_id: String,
pub agent_uri: String,
pub agent_wallet: Option<String>,
pub owner_address: Option<String>,
pub agent_card_id: Option<Uuid>,
pub registration: Option<String>,
pub registration_hash: Option<String>,
pub wallet_proof_type: Option<AgentWalletProofType>,
pub wallet_proof: Option<String>,
pub wallet_proof_chain_id: Option<u64>,
pub wallet_proof_deadline: Option<DateTime<Utc>>,
pub active: bool,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentMetadataEntry {
pub metadata_key: String,
pub metadata_value: Vec<u8>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateAgentIdentity {
pub agent_registry: String,
pub agent_id: String,
pub agent_uri: String,
pub agent_wallet: Option<String>,
pub owner_address: Option<String>,
pub agent_card_id: Option<Uuid>,
pub registration: Option<String>,
pub registration_hash: Option<String>,
pub wallet_proof_type: Option<AgentWalletProofType>,
pub wallet_proof: Option<String>,
pub wallet_proof_chain_id: Option<u64>,
pub wallet_proof_deadline: Option<DateTime<Utc>>,
pub active: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct UpdateAgentIdentity {
pub agent_uri: Option<String>,
pub agent_wallet: Option<String>,
pub owner_address: Option<String>,
pub agent_card_id: Option<Uuid>,
pub registration: Option<String>,
pub registration_hash: Option<String>,
pub wallet_proof_type: Option<AgentWalletProofType>,
pub wallet_proof: Option<String>,
pub wallet_proof_chain_id: Option<u64>,
pub wallet_proof_deadline: Option<DateTime<Utc>>,
pub active: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AgentIdentityFilter {
pub agent_registry: Option<String>,
pub agent_id: Option<String>,
pub agent_wallet: Option<String>,
pub owner_address: Option<String>,
pub agent_card_id: Option<Uuid>,
pub active: Option<bool>,
pub limit: Option<u32>,
pub offset: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentFeedback {
pub id: Uuid,
pub agent_registry: String,
pub agent_id: String,
pub client_address: String,
pub feedback_index: u64,
pub value: i128,
pub value_decimals: u8,
pub tag1: Option<String>,
pub tag2: Option<String>,
pub endpoint: Option<String>,
pub feedback_uri: Option<String>,
pub feedback_hash: Option<String>,
pub is_revoked: bool,
pub created_at: DateTime<Utc>,
pub revoked_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateAgentFeedback {
pub agent_registry: String,
pub agent_id: String,
pub client_address: String,
pub value: i128,
pub value_decimals: u8,
pub tag1: Option<String>,
pub tag2: Option<String>,
pub endpoint: Option<String>,
pub feedback_uri: Option<String>,
pub feedback_hash: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AgentFeedbackFilter {
pub agent_registry: Option<String>,
pub agent_id: Option<String>,
pub client_addresses: Option<Vec<String>>,
pub tag1: Option<String>,
pub tag2: Option<String>,
pub include_revoked: Option<bool>,
pub limit: Option<u32>,
pub offset: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeedbackSummary {
pub count: u64,
pub summary_value: i128,
pub summary_value_decimals: u8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentFeedbackResponse {
pub id: Uuid,
pub agent_registry: String,
pub agent_id: String,
pub client_address: String,
pub feedback_index: u64,
pub responder_address: String,
pub response_uri: String,
pub response_hash: Option<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateAgentFeedbackResponse {
pub agent_registry: String,
pub agent_id: String,
pub client_address: String,
pub feedback_index: u64,
pub responder_address: String,
pub response_uri: String,
pub response_hash: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentValidationRequest {
pub request_hash: String,
pub agent_registry: String,
pub agent_id: String,
pub validator_address: String,
pub request_uri: String,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateAgentValidationRequest {
pub request_hash: String,
pub agent_registry: String,
pub agent_id: String,
pub validator_address: String,
pub request_uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentValidationResponse {
pub id: Uuid,
pub request_hash: String,
pub agent_registry: String,
pub agent_id: String,
pub validator_address: String,
pub response: u8,
pub response_uri: Option<String>,
pub response_hash: Option<String>,
pub tag: Option<String>,
pub created_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CreateAgentValidationResponse {
pub response: u8,
pub response_uri: Option<String>,
pub response_hash: Option<String>,
pub tag: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AgentValidationStatus {
pub validator_address: String,
pub agent_registry: String,
pub agent_id: String,
pub response: u8,
pub response_hash: Option<String>,
pub tag: Option<String>,
pub last_update: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationSummary {
pub count: u64,
pub average_response: u8,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AgentValidationFilter {
pub agent_registry: Option<String>,
pub agent_id: Option<String>,
pub validator_addresses: Option<Vec<String>>,
pub tag: Option<String>,
}