# 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"
}