from __future__ import annotations
from typing import Any, Dict, Iterator, Optional, Protocol, runtime_checkable
from .models import AuditEvent, ChainVerificationReport
class LedgerError(Exception):
pass
class TamperDetectedError(LedgerError):
pass
@runtime_checkable
class AuditLedgerWriter(Protocol):
def append(
self,
event_type: str,
actor: str,
payload: Dict[str, Any],
event_id: Optional[str] = None,
) -> AuditEvent:
...
@runtime_checkable
class AuditLedgerReader(Protocol):
def get_event(self, sequence: int) -> Optional[AuditEvent]:
...
def iter_events(self, start: int = 1, end: Optional[int] = None) -> Iterator[AuditEvent]:
...
def head(self) -> Optional[AuditEvent]:
...
@runtime_checkable
class AuditVerifier(Protocol):
def verify_chain(self) -> ChainVerificationReport:
...