attachment.clear_all
attachment.convert_pdf
attachment.delete
attachment.upload
campaign.cancel
campaign.clear_all
campaign.create
campaign.delete
campaign.patch
campaign.pause
campaign.resume
campaign.start
gmail.authorized
gmail.clear_all
gmail.delete
gmail.disconnect
gmail.test
oauth_config.imported
phone.add
phone.clear_all
phone.delete
phone.import
phone.patch
recipients.import
recipients.manual_add
settings.reset
settings.reset_all
settings.save
settings.save_batch
suppression.add
suppression.bulk
suppression.clear_all
suppression.delete
suppression.import
test_send.error
test_send.failed
test_send.success
user.register
=== log_audit def ===
66:async def log_audit(db: AsyncSession, user_id: Optional[int], action: str,
67-                    entity: Optional[str] = None, entity_id: Optional[int] = None,
68-                    detail: Optional[dict] = None, ip: Optional[str] = None) -> None:
69-    """Audit log with automatic secret redaction. Imported lazily to avoid cycles."""
70-    from app.models import AuditLog
71-    db.add(AuditLog(
72-        user_id=user_id, action=action, entity=entity, entity_id=entity_id,
73-        detail=sanitize_log_payload(detail or {}), ip_address=ip,
74-        created_at=datetime.now(timezone.utc),
75-    ))
76-    await db.commit()
77-
78-
