mod error;
mod key_store;
mod log;
mod query;
mod record;
mod signature;
mod table;
pub use error::AuditError;
pub use key_store::{EnvSigningKeyStore, SigningKeyStore, MASTER_KEY_ENV};
pub use log::{log_records, max_lineage_bytes, DEFAULT_MAX_LINEAGE_BYTES, MAX_LINEAGE_BYTES_ENV};
pub use query::{fetch_by_query_id, fetch_recent};
pub use record::{canonical_serialize, PerQueryAudit};
pub use signature::{
derive_tenant_secret, ensure_master_key_present, hmac_sign, sign_record, verify,
verify_with_store,
};
pub use table::{
audit_schema, ensure_table_exists, is_reserved_table_name, AUDIT_TABLE_NAME, AUDIT_TOPIC,
};
use crate::session::JammiSession;
use uuid::Uuid;
pub struct AuditHandle<'a> {
session: &'a JammiSession,
}
impl<'a> AuditHandle<'a> {
pub fn new(session: &'a JammiSession) -> Self {
Self { session }
}
pub async fn log(&self, records: Vec<PerQueryAudit>) -> Result<(), AuditError> {
log_records(self.session, records).await
}
pub async fn fetch_by_query_id(
&self,
query_id: Uuid,
) -> Result<Option<PerQueryAudit>, AuditError> {
fetch_by_query_id(self.session, query_id).await
}
pub async fn fetch_recent(&self, limit: usize) -> Result<Vec<PerQueryAudit>, AuditError> {
fetch_recent(self.session, limit).await
}
}