ibkr-agent-gateway 0.5.2

Unofficial local-first CLI and MCP gateway for Interactive Brokers workflows.
Documentation
//! Audit query DTOs.

use super::event::AuditEvent;
use serde::{Deserialize, Serialize};

/// Request for recent audit events.
#[derive(Clone, Copy, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct AuditTailRequest {
    /// Maximum number of events to return.
    pub limit: u32,
}

impl AuditTailRequest {
    /// Creates a bounded tail request.
    #[must_use]
    pub const fn new(limit: u32) -> Self {
        Self { limit }
    }

    /// Returns a normalized limit.
    #[must_use]
    pub const fn normalized_limit(self) -> u32 {
        if self.limit == 0 {
            100
        } else if self.limit > 500 {
            500
        } else {
            self.limit
        }
    }
}

/// One persisted audit event with local sequence metadata.
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AuditTailRecord {
    /// Monotonic SQLite sequence id.
    pub sequence_id: i64,
    /// Redacted audit event payload.
    pub event: AuditEvent,
}

/// Recent audit events.
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct AuditTail {
    /// Events ordered newest first.
    pub events: Vec<AuditTailRecord>,
}

/// Full audit chain verification report.
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct AuditChainVerifyReport {
    /// Number of audit events scanned.
    pub events_scanned: usize,
    /// Whether every row matched the chained HMAC.
    pub chain_valid: bool,
    /// First broken sequence id, when verification failed.
    pub first_break_at_sequence: Option<i64>,
    /// First broken audit event id, when verification failed.
    pub first_break_event_id: Option<String>,
}