Metadata-Version: 2.4
Name: fastapi-xkit
Version: 2.0.2
Summary: FastAPI production toolkit: Redis rate limiting, JWT auth, RBAC, audit logs to DB, OpenTelemetry middleware.
Author: FastAPI-XKit Contributors
License: MIT
Project-URL: Homepage, https://github.com/yourname/fastapi-xkit
Project-URL: Repository, https://github.com/yourname/fastapi-xkit
Keywords: fastapi,middleware,rate-limit,redis,jwt,rbac,audit,opentelemetry
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Developers
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: fastapi>=0.100.0
Requires-Dist: starlette>=0.27.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: uvicorn>=0.23.0
Requires-Dist: PyJWT>=2.8.0
Requires-Dist: redis>=5.0.0
Requires-Dist: sqlalchemy>=2.0.0
Requires-Dist: opentelemetry-api>=1.22.0
Requires-Dist: opentelemetry-sdk>=1.22.0
Requires-Dist: opentelemetry-instrumentation-asgi>=0.43b0
Requires-Dist: opentelemetry-exporter-otlp>=1.22.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: httpx>=0.24.0; extra == "dev"
Requires-Dist: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Dynamic: license-file

# fastapi-xkit

FastAPI-XKit is a production toolkit for FastAPI.

## Features (v0.2.0)
- Redis rate limiter backend
- JWT authentication dependency
- RBAC (role-based access control) dependency
- Audit logs written to SQL database (SQLAlchemy)
- OpenTelemetry ASGI instrumentation + OTLP exporter
- Request-ID middleware
- `/health` endpoint

## Install

```bash
pip install fastapi-xkit
```

## Quick Example

```python
from fastapi import FastAPI, Depends
from fastapixkit import FastAPIXKitConfig, setup_fastapixkit
from fastapixkit.security.jwt import require_jwt_user
from fastapixkit.security.rbac import require_role

app = FastAPI()

config = FastAPIXKitConfig(
    jwt_secret="supersecret",
    redis_url="redis://localhost:6379/0",
    audit_db_url="sqlite:///./audit.db",
    otel_enabled=False,
)

setup_fastapixkit(app, config)

@app.get("/secure")
def secure(user=Depends(require_jwt_user(config))):
    return {"user": user}

@app.get("/admin")
def admin(user=Depends(require_role(config, "admin"))):
    return {"ok": True, "admin": user}
```

## JWT payload format

Expected fields:
- `sub` (user id)
- `roles` (list of strings)

Example:
```json
{"sub":"123","roles":["admin","user"]}
```

## OpenTelemetry

If `otel_enabled=True`, the middleware exports traces to OTLP endpoint.

Default OTLP endpoint: `http://localhost:4318`

## Rate limiting

Redis counter per IP per minute.

## License

MIT
