zkauth-sdk


Namezkauth-sdk JSON
Version 1.3.0 PyPI version JSON
download
home_pagehttps://github.com/zkauth/zkauth-developer-platform
SummaryZero-knowledge proof authentication SDK for Python
upload_time2025-08-13 12:23:02
maintainerNone
docs_urlNone
authorZKAuth Team
requires_python>=3.8
licenseNone
keywords zkauth zero-knowledge authentication cryptography privacy zk-snarks
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ZKAuth Python SDK

**v1.3.0** - Zero-knowledge proof authentication for Python applications.

⚠️ **IMPORTANT**: ZKAuth uses Zero-Knowledge Proofs, NOT traditional passwords! The SDK requires cognitive questions for enhanced security.

## Installation

```bash
pip install zkauth-sdk
```

## Quick Start

> **🔑 First time?** Get your API key at: **[ZKAuth Developer Platform](https://zkauth-devleoper-dashboard.vercel.app)**

The SDK connects to the ZKAuth engine automatically - you just need your API key!

### Basic Usage

```python
import asyncio
from zkauth import ZKAuthSDK, SignUpData, SignInData

async def main():
    async with ZKAuthSDK(
        api_key="zka_live_your_api_key_here"
    ) as client:
        # Sign up a new user with ZKP format (SDK handles commitment generation)
        signup_data = SignUpData(
            email="user@example.com",
            password="secure-password",
            cognitive_question="What is your favorite color?",
            cognitive_answer="blue"
        )
        signup_result = await client.sign_up(signup_data)
        
        if signup_result.success:
            print(f"User registered: {signup_result.user.email}")
            print(f"Registration token: {signup_result.token}")
        
        # Sign in with ZKP authentication
        signin_data = SignInData(
            email="user@example.com",
            password="secure-password"
        )
        signin_result = await client.sign_in(signin_data)
        
        if signin_result.success:
            print(f"User authenticated: {signin_result.user.email}")
            print(f"Session token: {signin_result.token}")
        else:
            print(f"Authentication failed: {signin_result.error}")

# Run the async function
asyncio.run(main())
```

### Django Integration

```python
# settings.py
INSTALLED_APPS = [
    # ... other apps
    'zkauth.integrations.django',
]

ZKAUTH_CONFIG = {
    'API_KEY': 'zka_live_your_api_key_here',
    'BASE_URL': 'https://zkauth-engine.vercel.app',
    'ENABLE_DEVICE_FINGERPRINTING': True,
}

# views.py
from django.http import JsonResponse
from zkauth.integrations.django import zkauth_required

@zkauth_required
def protected_view(request):
    user = request.zkauth_user
    return JsonResponse({
        'message': 'Access granted',
        'user': {
            'id': user.id,
            'email': user.email,
            'created_at': user.created_at.isoformat()
        }
    })

# middleware.py
from zkauth.integrations.django_middleware import ZKAuthMiddleware

# Add to MIDDLEWARE in settings.py
MIDDLEWARE = [
    # ... other middleware
    'zkauth.integrations.django_middleware.ZKAuthMiddleware',
]
```

### FastAPI Integration

```python
from fastapi import FastAPI, Depends, HTTPException
from zkauth.integrations.fastapi import ZKAuthMiddleware, get_current_user
from zkauth.models import User

app = FastAPI(title="ZKAuth FastAPI Demo")

# Add ZKAuth middleware
app.add_middleware(
    ZKAuthMiddleware,
    api_key="zka_live_your_api_key_here",
    base_url="https://zkauth-engine.vercel.app"
)

@app.get("/protected")
async def protected_route(user: User = Depends(get_current_user)):
    return {
        "message": "Access granted",
        "user": {
            "id": user.id,
            "email": user.email,
            "created_at": user.created_at
        }
    }

@app.post("/auth/signup")
async def signup(
    email: str, 
    password: str, 
    cognitive_question: str, 
    cognitive_answer: str
):
    from zkauth import SignUpData
    async with ZKAuthSDK(api_key="zka_live_your_api_key_here") as client:
        signup_data = SignUpData(
            email=email,
            password=password,
            cognitive_question=cognitive_question,
            cognitive_answer=cognitive_answer
        )
        result = await client.sign_up(signup_data)
        if not result.success:
            raise HTTPException(status_code=400, detail=result.error)
        return {"user": result.user.dict(), "token": result.token}

@app.post("/auth/signin")
async def signin(email: str, password: str):
    from zkauth import SignInData
    async with ZKAuthSDK(api_key="zka_live_your_api_key_here") as client:
        signin_data = SignInData(email=email, password=password)
        result = await client.sign_in(signin_data)
        if not result.success:
            raise HTTPException(status_code=401, detail=result.error)
        return {"user": result.user.dict(), "token": result.token}
```

### Advanced Usage

```python
import asyncio
from zkauth import ZKAuthSDK
from zkauth.exceptions import AuthenticationError, ValidationError

async def advanced_example():
    # Initialize with custom configuration
    client = ZKAuthSDK(
        api_key="zka_live_your_api_key_here",
        base_url="https://zkauth-engine.vercel.app",  # Optional: defaults to this
        timeout=60.0,  # Request timeout in seconds
        max_retries=5,  # Number of retry attempts
        enable_device_fingerprinting=True  # Enable device security
    )
    
    try:
        # Health check
        if not await client.health_check():
            print("⚠️ ZKAuth service is not available")
            return
        
        # Register user with ZKP format and metadata
        from zkauth import SignUpData
        signup_data = SignUpData(
            email="advanced@example.com",
            password="SecureP@ssw0rd123",
            cognitive_question="What city were you born in?",
            cognitive_answer="New York",
            metadata={
                "signup_source": "mobile_app",
                "referral_code": "REF123",
                "user_preferences": {
                    "theme": "dark",
                    "notifications": True
                }
            }
        )
        result = await client.sign_up(signup_data)
        
        if result.success:
            print(f"✅ User registered: {result.user.email}")
            
            # Get user information
            user_info = await client.get_user_info()
            print(f"User ID: {user_info.id}")
            print(f"Created: {user_info.created_at}")
            
            # Get session information
            session_info = await client.get_session_info()
            print(f"Session expires: {session_info.expires_at}")
            
            # Change password
            password_change = await client.change_password(
                current_password="SecureP@ssw0rd123",
                new_password="NewSecureP@ssw0rd456",
                email="advanced@example.com"
            )
            
            if password_change.success:
                print("✅ Password changed successfully")
        
    except ValidationError as e:
        print(f"❌ Validation error: {e}")
    except AuthenticationError as e:
        print(f"❌ Authentication failed: {e}")
    except Exception as e:
        print(f"❌ Unexpected error: {e}")
    finally:
        await client.close()

# Run the example
asyncio.run(advanced_example())
```

## Features

- ✅ **Zero-knowledge proof authentication** - Real cryptographic ZK proofs using Groth16 protocol
- ✅ **Async/await support** - Built for modern Python async applications
- ✅ **Django and FastAPI integrations** - Ready-made middleware and decorators
- ✅ **Type hints with Pydantic models** - Full type safety and validation
- ✅ **Comprehensive error handling** - Structured exceptions for all scenarios
- ✅ **Session management** - Automatic token handling and refresh
- ✅ **Device fingerprinting** - Hardware-based security with fallbacks
- ✅ **Python 3.8+ support** - Compatible with modern Python versions
- ✅ **Production ready** - Retry logic, timeouts, and robust error handling

## API Reference

### Core Methods

```python
# Authentication with ZKP format
await client.sign_up(user_data: SignUpData) -> AuthResult
await client.sign_in(user_data: SignInData) -> AuthResult
await client.approve_device(approval_code: str) -> AuthResult

# Session management
await client.get_user_info() -> User
await client.get_session_info() -> SessionInfo
await client.verify_token(token: str) -> bool
await client.refresh_token() -> Optional[str]

# Account management
await client.change_password(current_password: str, new_password: str, email: str) -> AuthResult
await client.sign_out() -> None

# Utility
await client.health_check() -> bool
await client.close() -> None  # Always call this or use async context manager
```

### Configuration

```python
client = ZKAuthSDK(
    api_key: str,                           # Required: Your ZKAuth API key
    base_url: str = "https://zkauth-engine.vercel.app",  # Optional: Custom base URL
    timeout: float = 30.0,                  # Optional: Request timeout in seconds
    max_retries: int = 3,                   # Optional: Number of retry attempts
    enable_device_fingerprinting: bool = True  # Optional: Enable device security
)
```

### Error Handling

All methods return structured error responses:

```python
class AuthResult:
    success: bool
    user: Optional[User] = None
    token: Optional[str] = None
    error: Optional[str] = None
    requires_device_verification: bool = False
```

**Type Definitions:**
```python
class SignUpData:
    email: str
    password: str
    cognitive_question: str
    cognitive_answer: str
    metadata: Optional[Dict[str, Any]] = None

class SignInData:
    email: str
    password: str

class User:
    id: str
    email: str
    created_at: datetime
    last_login: Optional[datetime] = None
    metadata: Dict[str, Any] = {}
```

**Exception Types:**
- `ZKAuthError` - Base exception for all ZKAuth errors
- `ValidationError` - Input validation errors (email format, password strength, cognitive questions)
- `AuthenticationError` - Authentication failures (wrong credentials, expired tokens)
- `NetworkError` - Network connectivity issues
- `APIError` - Server-side errors with HTTP status codes

## Getting Your API Key

1. Visit the **[ZKAuth Developer Platform](https://zkauth-devleoper-dashboard.vercel.app)** ← Register here!
2. Sign up for a developer account
3. Create a new project
4. Generate your API keys (test and live)
5. Use the live key (`zka_live_...`) for production

> **Note**: The ZKAuth engine runs at `https://zkauth-engine.vercel.app` (used internally by the SDK), but developers register at the **Developer Platform** link above.

## Development

```bash
# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run tests with coverage
pytest --cov=zkauth

# Format code
black zkauth/
isort zkauth/

# Type checking
mypy zkauth/
```

## License

MIT

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/zkauth/zkauth-developer-platform",
    "name": "zkauth-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "zkauth, zero-knowledge, authentication, cryptography, privacy, zk-snarks",
    "author": "ZKAuth Team",
    "author_email": "ZKAuth Team <support@zkauth.com>",
    "download_url": "https://files.pythonhosted.org/packages/f5/e6/599426536d1abe1add627e8ae46d3038f4f27d33c6bb92a14e224e0a8667/zkauth_sdk-1.3.0.tar.gz",
    "platform": null,
    "description": "# ZKAuth Python SDK\r\n\r\n**v1.3.0** - Zero-knowledge proof authentication for Python applications.\r\n\r\n\u26a0\ufe0f **IMPORTANT**: ZKAuth uses Zero-Knowledge Proofs, NOT traditional passwords! The SDK requires cognitive questions for enhanced security.\r\n\r\n## Installation\r\n\r\n```bash\r\npip install zkauth-sdk\r\n```\r\n\r\n## Quick Start\r\n\r\n> **\ud83d\udd11 First time?** Get your API key at: **[ZKAuth Developer Platform](https://zkauth-devleoper-dashboard.vercel.app)**\r\n\r\nThe SDK connects to the ZKAuth engine automatically - you just need your API key!\r\n\r\n### Basic Usage\r\n\r\n```python\r\nimport asyncio\r\nfrom zkauth import ZKAuthSDK, SignUpData, SignInData\r\n\r\nasync def main():\r\n    async with ZKAuthSDK(\r\n        api_key=\"zka_live_your_api_key_here\"\r\n    ) as client:\r\n        # Sign up a new user with ZKP format (SDK handles commitment generation)\r\n        signup_data = SignUpData(\r\n            email=\"user@example.com\",\r\n            password=\"secure-password\",\r\n            cognitive_question=\"What is your favorite color?\",\r\n            cognitive_answer=\"blue\"\r\n        )\r\n        signup_result = await client.sign_up(signup_data)\r\n        \r\n        if signup_result.success:\r\n            print(f\"User registered: {signup_result.user.email}\")\r\n            print(f\"Registration token: {signup_result.token}\")\r\n        \r\n        # Sign in with ZKP authentication\r\n        signin_data = SignInData(\r\n            email=\"user@example.com\",\r\n            password=\"secure-password\"\r\n        )\r\n        signin_result = await client.sign_in(signin_data)\r\n        \r\n        if signin_result.success:\r\n            print(f\"User authenticated: {signin_result.user.email}\")\r\n            print(f\"Session token: {signin_result.token}\")\r\n        else:\r\n            print(f\"Authentication failed: {signin_result.error}\")\r\n\r\n# Run the async function\r\nasyncio.run(main())\r\n```\r\n\r\n### Django Integration\r\n\r\n```python\r\n# settings.py\r\nINSTALLED_APPS = [\r\n    # ... other apps\r\n    'zkauth.integrations.django',\r\n]\r\n\r\nZKAUTH_CONFIG = {\r\n    'API_KEY': 'zka_live_your_api_key_here',\r\n    'BASE_URL': 'https://zkauth-engine.vercel.app',\r\n    'ENABLE_DEVICE_FINGERPRINTING': True,\r\n}\r\n\r\n# views.py\r\nfrom django.http import JsonResponse\r\nfrom zkauth.integrations.django import zkauth_required\r\n\r\n@zkauth_required\r\ndef protected_view(request):\r\n    user = request.zkauth_user\r\n    return JsonResponse({\r\n        'message': 'Access granted',\r\n        'user': {\r\n            'id': user.id,\r\n            'email': user.email,\r\n            'created_at': user.created_at.isoformat()\r\n        }\r\n    })\r\n\r\n# middleware.py\r\nfrom zkauth.integrations.django_middleware import ZKAuthMiddleware\r\n\r\n# Add to MIDDLEWARE in settings.py\r\nMIDDLEWARE = [\r\n    # ... other middleware\r\n    'zkauth.integrations.django_middleware.ZKAuthMiddleware',\r\n]\r\n```\r\n\r\n### FastAPI Integration\r\n\r\n```python\r\nfrom fastapi import FastAPI, Depends, HTTPException\r\nfrom zkauth.integrations.fastapi import ZKAuthMiddleware, get_current_user\r\nfrom zkauth.models import User\r\n\r\napp = FastAPI(title=\"ZKAuth FastAPI Demo\")\r\n\r\n# Add ZKAuth middleware\r\napp.add_middleware(\r\n    ZKAuthMiddleware,\r\n    api_key=\"zka_live_your_api_key_here\",\r\n    base_url=\"https://zkauth-engine.vercel.app\"\r\n)\r\n\r\n@app.get(\"/protected\")\r\nasync def protected_route(user: User = Depends(get_current_user)):\r\n    return {\r\n        \"message\": \"Access granted\",\r\n        \"user\": {\r\n            \"id\": user.id,\r\n            \"email\": user.email,\r\n            \"created_at\": user.created_at\r\n        }\r\n    }\r\n\r\n@app.post(\"/auth/signup\")\r\nasync def signup(\r\n    email: str, \r\n    password: str, \r\n    cognitive_question: str, \r\n    cognitive_answer: str\r\n):\r\n    from zkauth import SignUpData\r\n    async with ZKAuthSDK(api_key=\"zka_live_your_api_key_here\") as client:\r\n        signup_data = SignUpData(\r\n            email=email,\r\n            password=password,\r\n            cognitive_question=cognitive_question,\r\n            cognitive_answer=cognitive_answer\r\n        )\r\n        result = await client.sign_up(signup_data)\r\n        if not result.success:\r\n            raise HTTPException(status_code=400, detail=result.error)\r\n        return {\"user\": result.user.dict(), \"token\": result.token}\r\n\r\n@app.post(\"/auth/signin\")\r\nasync def signin(email: str, password: str):\r\n    from zkauth import SignInData\r\n    async with ZKAuthSDK(api_key=\"zka_live_your_api_key_here\") as client:\r\n        signin_data = SignInData(email=email, password=password)\r\n        result = await client.sign_in(signin_data)\r\n        if not result.success:\r\n            raise HTTPException(status_code=401, detail=result.error)\r\n        return {\"user\": result.user.dict(), \"token\": result.token}\r\n```\r\n\r\n### Advanced Usage\r\n\r\n```python\r\nimport asyncio\r\nfrom zkauth import ZKAuthSDK\r\nfrom zkauth.exceptions import AuthenticationError, ValidationError\r\n\r\nasync def advanced_example():\r\n    # Initialize with custom configuration\r\n    client = ZKAuthSDK(\r\n        api_key=\"zka_live_your_api_key_here\",\r\n        base_url=\"https://zkauth-engine.vercel.app\",  # Optional: defaults to this\r\n        timeout=60.0,  # Request timeout in seconds\r\n        max_retries=5,  # Number of retry attempts\r\n        enable_device_fingerprinting=True  # Enable device security\r\n    )\r\n    \r\n    try:\r\n        # Health check\r\n        if not await client.health_check():\r\n            print(\"\u26a0\ufe0f ZKAuth service is not available\")\r\n            return\r\n        \r\n        # Register user with ZKP format and metadata\r\n        from zkauth import SignUpData\r\n        signup_data = SignUpData(\r\n            email=\"advanced@example.com\",\r\n            password=\"SecureP@ssw0rd123\",\r\n            cognitive_question=\"What city were you born in?\",\r\n            cognitive_answer=\"New York\",\r\n            metadata={\r\n                \"signup_source\": \"mobile_app\",\r\n                \"referral_code\": \"REF123\",\r\n                \"user_preferences\": {\r\n                    \"theme\": \"dark\",\r\n                    \"notifications\": True\r\n                }\r\n            }\r\n        )\r\n        result = await client.sign_up(signup_data)\r\n        \r\n        if result.success:\r\n            print(f\"\u2705 User registered: {result.user.email}\")\r\n            \r\n            # Get user information\r\n            user_info = await client.get_user_info()\r\n            print(f\"User ID: {user_info.id}\")\r\n            print(f\"Created: {user_info.created_at}\")\r\n            \r\n            # Get session information\r\n            session_info = await client.get_session_info()\r\n            print(f\"Session expires: {session_info.expires_at}\")\r\n            \r\n            # Change password\r\n            password_change = await client.change_password(\r\n                current_password=\"SecureP@ssw0rd123\",\r\n                new_password=\"NewSecureP@ssw0rd456\",\r\n                email=\"advanced@example.com\"\r\n            )\r\n            \r\n            if password_change.success:\r\n                print(\"\u2705 Password changed successfully\")\r\n        \r\n    except ValidationError as e:\r\n        print(f\"\u274c Validation error: {e}\")\r\n    except AuthenticationError as e:\r\n        print(f\"\u274c Authentication failed: {e}\")\r\n    except Exception as e:\r\n        print(f\"\u274c Unexpected error: {e}\")\r\n    finally:\r\n        await client.close()\r\n\r\n# Run the example\r\nasyncio.run(advanced_example())\r\n```\r\n\r\n## Features\r\n\r\n- \u2705 **Zero-knowledge proof authentication** - Real cryptographic ZK proofs using Groth16 protocol\r\n- \u2705 **Async/await support** - Built for modern Python async applications\r\n- \u2705 **Django and FastAPI integrations** - Ready-made middleware and decorators\r\n- \u2705 **Type hints with Pydantic models** - Full type safety and validation\r\n- \u2705 **Comprehensive error handling** - Structured exceptions for all scenarios\r\n- \u2705 **Session management** - Automatic token handling and refresh\r\n- \u2705 **Device fingerprinting** - Hardware-based security with fallbacks\r\n- \u2705 **Python 3.8+ support** - Compatible with modern Python versions\r\n- \u2705 **Production ready** - Retry logic, timeouts, and robust error handling\r\n\r\n## API Reference\r\n\r\n### Core Methods\r\n\r\n```python\r\n# Authentication with ZKP format\r\nawait client.sign_up(user_data: SignUpData) -> AuthResult\r\nawait client.sign_in(user_data: SignInData) -> AuthResult\r\nawait client.approve_device(approval_code: str) -> AuthResult\r\n\r\n# Session management\r\nawait client.get_user_info() -> User\r\nawait client.get_session_info() -> SessionInfo\r\nawait client.verify_token(token: str) -> bool\r\nawait client.refresh_token() -> Optional[str]\r\n\r\n# Account management\r\nawait client.change_password(current_password: str, new_password: str, email: str) -> AuthResult\r\nawait client.sign_out() -> None\r\n\r\n# Utility\r\nawait client.health_check() -> bool\r\nawait client.close() -> None  # Always call this or use async context manager\r\n```\r\n\r\n### Configuration\r\n\r\n```python\r\nclient = ZKAuthSDK(\r\n    api_key: str,                           # Required: Your ZKAuth API key\r\n    base_url: str = \"https://zkauth-engine.vercel.app\",  # Optional: Custom base URL\r\n    timeout: float = 30.0,                  # Optional: Request timeout in seconds\r\n    max_retries: int = 3,                   # Optional: Number of retry attempts\r\n    enable_device_fingerprinting: bool = True  # Optional: Enable device security\r\n)\r\n```\r\n\r\n### Error Handling\r\n\r\nAll methods return structured error responses:\r\n\r\n```python\r\nclass AuthResult:\r\n    success: bool\r\n    user: Optional[User] = None\r\n    token: Optional[str] = None\r\n    error: Optional[str] = None\r\n    requires_device_verification: bool = False\r\n```\r\n\r\n**Type Definitions:**\r\n```python\r\nclass SignUpData:\r\n    email: str\r\n    password: str\r\n    cognitive_question: str\r\n    cognitive_answer: str\r\n    metadata: Optional[Dict[str, Any]] = None\r\n\r\nclass SignInData:\r\n    email: str\r\n    password: str\r\n\r\nclass User:\r\n    id: str\r\n    email: str\r\n    created_at: datetime\r\n    last_login: Optional[datetime] = None\r\n    metadata: Dict[str, Any] = {}\r\n```\r\n\r\n**Exception Types:**\r\n- `ZKAuthError` - Base exception for all ZKAuth errors\r\n- `ValidationError` - Input validation errors (email format, password strength, cognitive questions)\r\n- `AuthenticationError` - Authentication failures (wrong credentials, expired tokens)\r\n- `NetworkError` - Network connectivity issues\r\n- `APIError` - Server-side errors with HTTP status codes\r\n\r\n## Getting Your API Key\r\n\r\n1. Visit the **[ZKAuth Developer Platform](https://zkauth-devleoper-dashboard.vercel.app)** \u2190 Register here!\r\n2. Sign up for a developer account\r\n3. Create a new project\r\n4. Generate your API keys (test and live)\r\n5. Use the live key (`zka_live_...`) for production\r\n\r\n> **Note**: The ZKAuth engine runs at `https://zkauth-engine.vercel.app` (used internally by the SDK), but developers register at the **Developer Platform** link above.\r\n\r\n## Development\r\n\r\n```bash\r\n# Install development dependencies\r\npip install -e \".[dev]\"\r\n\r\n# Run tests\r\npytest\r\n\r\n# Run tests with coverage\r\npytest --cov=zkauth\r\n\r\n# Format code\r\nblack zkauth/\r\nisort zkauth/\r\n\r\n# Type checking\r\nmypy zkauth/\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Zero-knowledge proof authentication SDK for Python",
    "version": "1.3.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/zkauth/zkauth-developer-platform/issues",
        "Documentation": "https://docs.zkauth.com",
        "Homepage": "https://github.com/zkauth/zkauth-developer-platform",
        "Repository": "https://github.com/zkauth/zkauth-developer-platform.git"
    },
    "split_keywords": [
        "zkauth",
        " zero-knowledge",
        " authentication",
        " cryptography",
        " privacy",
        " zk-snarks"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6e3854d90e28c19a1785486ed9052019eac0dd0781586b51d88011b4d24dce4b",
                "md5": "7864ea1022aa244c9559493e1205d47f",
                "sha256": "3013eb7155015207d6aa0b6d98c621b972870c6af11917c5d67705db4f7783e6"
            },
            "downloads": -1,
            "filename": "zkauth_sdk-1.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "7864ea1022aa244c9559493e1205d47f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 15443,
            "upload_time": "2025-08-13T12:23:00",
            "upload_time_iso_8601": "2025-08-13T12:23:00.687065Z",
            "url": "https://files.pythonhosted.org/packages/6e/38/54d90e28c19a1785486ed9052019eac0dd0781586b51d88011b4d24dce4b/zkauth_sdk-1.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f5e6599426536d1abe1add627e8ae46d3038f4f27d33c6bb92a14e224e0a8667",
                "md5": "482df9c8231f8b7bc1affd3713c224c5",
                "sha256": "4cd60ccb2032308f91d53cb1b45e3875ac6d174dac4857b57ee300d8b0c3b314"
            },
            "downloads": -1,
            "filename": "zkauth_sdk-1.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "482df9c8231f8b7bc1affd3713c224c5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 17515,
            "upload_time": "2025-08-13T12:23:02",
            "upload_time_iso_8601": "2025-08-13T12:23:02.080030Z",
            "url": "https://files.pythonhosted.org/packages/f5/e6/599426536d1abe1add627e8ae46d3038f4f27d33c6bb92a14e224e0a8667/zkauth_sdk-1.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-13 12:23:02",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "zkauth",
    "github_project": "zkauth-developer-platform",
    "github_not_found": true,
    "lcname": "zkauth-sdk"
}
        
Elapsed time: 1.29352s