mirror of
https://github.com/blackboxprogramming/BlackRoad-Operating-System.git
synced 2026-03-17 07:57:19 -05:00
MASSIVE UPDATE - 271 new files ## Agent Library (208 agents across 10 categories) - DevOps (28 agents): deployment, monitoring, infrastructure - Engineering (30 agents): code generation, testing, documentation - Data (25 agents): ETL, analysis, visualization - Security (20 agents): scanning, compliance, threat detection - Finance (20 agents): trading, portfolio, risk analysis - Creative (20 agents): content generation, SEO, translation - Business (20 agents): CRM, automation, project management - Research (15 agents): literature review, experiments, analysis - Web (15 agents): scraping, API integration, webhooks - AI/ML (15 agents): training, deployment, monitoring ## Base Framework - BaseAgent class with lifecycle management - AgentExecutor with parallel/sequential/DAG execution - AgentRegistry with discovery and search - Configuration management - Comprehensive error handling and retries ## Python SDK - Production-ready pip-installable package - Sync and async clients - Full type hints and Pydantic models - Comprehensive examples and tests - Auth, Blockchain, and Agent clients ## TypeScript/JavaScript SDK - Production-ready npm-publishable package - Full TypeScript types - ESM + CommonJS dual package - Browser and Node.js support - Comprehensive examples and tests ## Backend Integration - /api/agents endpoints in FastAPI - Agent execution API - Agent discovery and search - Execution plans and orchestration Value: $5M+ worth of engineering work
201 lines
4.6 KiB
Python
201 lines
4.6 KiB
Python
"""Authentication client for the BlackRoad SDK."""
|
|
|
|
from typing import TYPE_CHECKING, Optional
|
|
|
|
from .models.user import Token, User, UserCreate
|
|
|
|
if TYPE_CHECKING:
|
|
from .utils.http import AsyncHTTPClient, HTTPClient
|
|
|
|
|
|
class AuthClient:
|
|
"""Synchronous authentication client."""
|
|
|
|
def __init__(self, http_client: "HTTPClient") -> None:
|
|
"""
|
|
Initialize the auth client.
|
|
|
|
Args:
|
|
http_client: HTTP client instance
|
|
"""
|
|
self._client = http_client
|
|
|
|
def register(
|
|
self,
|
|
username: str,
|
|
email: str,
|
|
password: str,
|
|
full_name: Optional[str] = None,
|
|
) -> User:
|
|
"""
|
|
Register a new user.
|
|
|
|
Args:
|
|
username: Username (3-50 characters)
|
|
email: Email address
|
|
password: Password (min 8 characters)
|
|
full_name: Full name (optional)
|
|
|
|
Returns:
|
|
Created user
|
|
|
|
Raises:
|
|
ValidationError: If validation fails
|
|
AuthenticationError: If user already exists
|
|
"""
|
|
user_data = UserCreate(
|
|
username=username,
|
|
email=email,
|
|
password=password,
|
|
full_name=full_name,
|
|
)
|
|
|
|
response = self._client.post(
|
|
"/api/auth/register",
|
|
json=user_data.model_dump(exclude_none=True),
|
|
)
|
|
|
|
return User(**response)
|
|
|
|
def login(self, username: str, password: str) -> Token:
|
|
"""
|
|
Login and get access token.
|
|
|
|
Args:
|
|
username: Username
|
|
password: Password
|
|
|
|
Returns:
|
|
Authentication token
|
|
|
|
Raises:
|
|
AuthenticationError: If credentials are invalid
|
|
"""
|
|
response = self._client.post(
|
|
"/api/auth/login",
|
|
data={
|
|
"username": username,
|
|
"password": password,
|
|
},
|
|
)
|
|
|
|
return Token(**response)
|
|
|
|
def me(self) -> User:
|
|
"""
|
|
Get current user information.
|
|
|
|
Returns:
|
|
Current user
|
|
|
|
Raises:
|
|
AuthenticationError: If not authenticated
|
|
"""
|
|
response = self._client.get("/api/auth/me")
|
|
return User(**response)
|
|
|
|
def logout(self) -> dict:
|
|
"""
|
|
Logout current session.
|
|
|
|
Returns:
|
|
Logout confirmation
|
|
"""
|
|
return self._client.post("/api/auth/logout")
|
|
|
|
|
|
class AsyncAuthClient:
|
|
"""Asynchronous authentication client."""
|
|
|
|
def __init__(self, http_client: "AsyncHTTPClient") -> None:
|
|
"""
|
|
Initialize the async auth client.
|
|
|
|
Args:
|
|
http_client: Async HTTP client instance
|
|
"""
|
|
self._client = http_client
|
|
|
|
async def register(
|
|
self,
|
|
username: str,
|
|
email: str,
|
|
password: str,
|
|
full_name: Optional[str] = None,
|
|
) -> User:
|
|
"""
|
|
Register a new user.
|
|
|
|
Args:
|
|
username: Username (3-50 characters)
|
|
email: Email address
|
|
password: Password (min 8 characters)
|
|
full_name: Full name (optional)
|
|
|
|
Returns:
|
|
Created user
|
|
|
|
Raises:
|
|
ValidationError: If validation fails
|
|
AuthenticationError: If user already exists
|
|
"""
|
|
user_data = UserCreate(
|
|
username=username,
|
|
email=email,
|
|
password=password,
|
|
full_name=full_name,
|
|
)
|
|
|
|
response = await self._client.post(
|
|
"/api/auth/register",
|
|
json=user_data.model_dump(exclude_none=True),
|
|
)
|
|
|
|
return User(**response)
|
|
|
|
async def login(self, username: str, password: str) -> Token:
|
|
"""
|
|
Login and get access token.
|
|
|
|
Args:
|
|
username: Username
|
|
password: Password
|
|
|
|
Returns:
|
|
Authentication token
|
|
|
|
Raises:
|
|
AuthenticationError: If credentials are invalid
|
|
"""
|
|
response = await self._client.post(
|
|
"/api/auth/login",
|
|
data={
|
|
"username": username,
|
|
"password": password,
|
|
},
|
|
)
|
|
|
|
return Token(**response)
|
|
|
|
async def me(self) -> User:
|
|
"""
|
|
Get current user information.
|
|
|
|
Returns:
|
|
Current user
|
|
|
|
Raises:
|
|
AuthenticationError: If not authenticated
|
|
"""
|
|
response = await self._client.get("/api/auth/me")
|
|
return User(**response)
|
|
|
|
async def logout(self) -> dict:
|
|
"""
|
|
Logout current session.
|
|
|
|
Returns:
|
|
Logout confirmation
|
|
"""
|
|
return await self._client.post("/api/auth/logout")
|