from dataclasses import dataclass, field from typing import Any @dataclass(frozen=True) class ACL: tenant_id: str principals: tuple[str, ...] = () groups: tuple[str, ...] = () visibility: str = "restricted" @dataclass(frozen=True) class Provenance: source_type: str source_id: str canonical_url: str revision: str | None = None retrieved_at: str | None = None webhook_event_id: str | None = None connector_version: str = "1.0" @dataclass(frozen=True) class Document: id: str tenant_id: str title: str content: str mime_type: str content_hash: str modified_at: str | None provenance: Provenance acl: ACL metadata: dict[str, Any] = field(default_factory=dict) deleted: bool = False @dataclass(frozen=True) class ConnectorConfig: connector_id: str tenant_id: str secret_ref: str scope: dict[str, Any] options: dict[str, Any] = field(default_factory=dict) @dataclass(frozen=True) class SyncCursor: connector_id: str mode: str revision: str | None = None delta_token: str | None = None updated_at: str | None = None @dataclass(frozen=True) class Change: item_id: str kind: str revision: str | None = None event_id: str | None = None payload: dict[str, Any] = field(default_factory=dict)