Infrastructure for building and deploying prod-ready services
Project description
svc-infra
Production-ready FastAPI infrastructure in one import.
Overview
Stop rebuilding auth, billing, webhooks, and background jobs for every project.
Key Features
- Auth - JWT, sessions, OAuth/OIDC, MFA, API keys
- Billing - Usage tracking, subscriptions, invoices, Stripe sync
- Database - PostgreSQL + MongoDB, migrations, inbox/outbox
- Jobs - Background tasks, scheduling, retries, DLQ
- Webhooks - Subscriptions, HMAC signing, delivery retries
- Observability - Prometheus, Grafana dashboards, OTEL
Why svc-infra?
Every FastAPI project needs the same things: authentication, database setup, background jobs, caching, webhooks, billing... You've written this code before. Multiple times.
svc-infra packages battle-tested infrastructure used in production, so you can focus on your actual product:
from svc_infra.api.fastapi.ease import easy_service_app
app = easy_service_app(name="MyAPI", release="1.0.0")
# Health checks, CORS, security headers, structured logging
# Prometheus metrics, OpenTelemetry tracing
# Request IDs, idempotency middleware
# That's it. Ship it.
Quick Install
pip install svc-infra
What's Included
| Feature | What You Get | One-liner |
|---|---|---|
| Auth | JWT, sessions, OAuth/OIDC, MFA, API keys | add_auth_users(app) |
| Billing | Usage tracking, subscriptions, invoices, Stripe sync | add_billing(app) |
| Database | PostgreSQL + MongoDB, migrations, inbox/outbox | add_sql_db(app) |
| Jobs | Background tasks, scheduling, retries, DLQ | easy_jobs() |
| Webhooks | Subscriptions, HMAC signing, delivery retries | add_webhooks(app) |
| Cache | Redis/memory, decorators, namespacing | init_cache() |
| Observability | Prometheus, Grafana dashboards, OTEL | Built-in |
| Storage | S3, local, memory backends | add_storage(app) |
| Multi-tenancy | Tenant isolation, scoped queries | Built-in |
| Rate Limiting | Per-user, per-endpoint, headers | Built-in |
30-Second Example
Build a complete SaaS backend:
from fastapi import Depends
from svc_infra.api.fastapi.ease import easy_service_app
from svc_infra.api.fastapi.db.sql.add import add_sql_db
from svc_infra.api.fastapi.auth import add_auth_users, current_active_user
from svc_infra.jobs.easy import easy_jobs
from svc_infra.webhooks.fastapi import require_signature
# Create app with batteries included
app = easy_service_app(name="MySaaS", release="1.0.0")
# Add infrastructure
add_sql_db(app) # PostgreSQL with migrations
add_auth_users(app) # Full auth system
queue, scheduler = easy_jobs() # Background jobs
# Your actual business logic
@app.post("/api/process")
async def process_data(user=Depends(current_active_user)):
job = queue.enqueue("heavy_task", {"user_id": user.id})
return {"job_id": job.id, "status": "queued"}
# Webhook endpoint with signature verification
@app.post("/webhooks/stripe")
async def stripe_webhook(payload=Depends(require_signature(lambda: ["whsec_..."]))):
queue.enqueue("process_payment", payload)
return {"received": True}
That's a production-ready API with auth, database, background jobs, and webhook handling.
Feature Highlights
Authentication & Security
Full auth system with zero boilerplate:
from svc_infra.api.fastapi.auth import add_auth_users, current_active_user
add_auth_users(app) # Registers /auth/* routes automatically
@app.get("/me")
async def get_profile(user=Depends(current_active_user)):
return {"email": user.email, "mfa_enabled": user.mfa_enabled}
Includes: JWT tokens, session cookies, OAuth/OIDC (Google, GitHub, etc.), MFA/TOTP, password policies, account lockout, key rotation.
Usage-Based Billing
Track usage and generate invoices:
from svc_infra.billing import BillingService
billing = BillingService(session=db, tenant_id="tenant_123")
# Record API usage (idempotent)
billing.record_usage(metric="api_calls", amount=1, idempotency_key="req_abc")
# Generate monthly invoice
invoice = billing.generate_monthly_invoice(
period_start=datetime(2025, 1, 1),
period_end=datetime(2025, 2, 1),
)
Includes: Usage events, aggregation, plans & entitlements, subscriptions, invoices, Stripe sync hooks.
Background Jobs
Redis-backed job queue with retries:
from svc_infra.jobs.easy import easy_jobs
queue, scheduler = easy_jobs() # Auto-detects Redis or uses memory
# Enqueue work
queue.enqueue("send_email", {"to": "user@example.com", "template": "welcome"})
# Schedule recurring tasks
scheduler.add("cleanup", interval_seconds=3600, target="myapp.tasks:cleanup")
# Run the worker
svc-infra jobs run
Includes: Visibility timeout, exponential backoff, dead letter queue, interval scheduler, CLI worker.
Webhooks
Send and receive webhooks with proper security:
from svc_infra.webhooks import add_webhooks, WebhookService
add_webhooks(app) # Adds subscription management routes
# Publish events
webhook_service.publish("invoice.paid", {"invoice_id": "inv_123"})
# Verify incoming webhooks
@app.post("/webhooks/external")
async def receive(payload=Depends(require_signature(lambda: ["secret1", "secret2"]))):
return {"ok": True}
Includes: Subscription store, HMAC-SHA256 signing, delivery retries, idempotent processing.
Observability
Production monitoring out of the box:
app = easy_service_app(name="MyAPI", release="1.0.0")
# Prometheus metrics at /metrics
# Health checks at /healthz, /readyz, /startupz
# Request tracing with OpenTelemetry
# Generate Grafana dashboards
svc-infra obs dashboard --service myapi --output ./dashboards/
Includes: Prometheus metrics, Grafana dashboard generator, OTEL integration, SLO helpers.
Configuration
Everything is configurable via environment variables:
# Database
SQL_URL=postgresql://user:pass@localhost/mydb
MONGO_URL=mongodb://localhost:27017
# Auth
AUTH_JWT__SECRET=your-secret-key
AUTH_SMTP_HOST=smtp.sendgrid.net
# Jobs
JOBS_DRIVER=redis
REDIS_URL=redis://localhost:6379
# Storage
STORAGE_BACKEND=s3
STORAGE_S3_BUCKET=my-uploads
# Observability
ENABLE_OBS=true
METRICS_PATH=/metrics
See the Environment Reference for all options.
Documentation
| Module | Description | Guide |
|---|---|---|
| API | FastAPI bootstrap, middleware, versioning | docs/api.md |
| Auth | Sessions, OAuth/OIDC, MFA, API keys | docs/auth.md |
| Billing | Usage tracking, subscriptions, invoices | docs/billing.md |
| Database | SQL + MongoDB, migrations, patterns | docs/database.md |
| Jobs | Background tasks, scheduling | docs/jobs.md |
| Webhooks | Publishing, signing, verification | docs/webhooks.md |
| Cache | Redis/memory caching, TTL helpers | docs/cache.md |
| Storage | S3, local, memory file storage | docs/storage.md |
| Observability | Metrics, tracing, dashboards | docs/observability.md |
| Security | Password policy, headers, MFA | docs/security.md |
| Tenancy | Multi-tenant isolation | docs/tenancy.md |
| CLI | Command-line tools | docs/cli.md |
Running the Example
See all features working together:
git clone https://github.com/nfraxlab/svc-infra.git
cd svc-infra
# Setup and run
make setup-template # Creates DB, runs migrations
make run-template # Starts at http://localhost:8001
Visit http://localhost:8001/docs to explore the API.
Related Packages
svc-infra is part of the nfrax infrastructure suite:
| Package | Purpose |
|---|---|
| svc-infra | Backend infrastructure (auth, billing, jobs, webhooks) |
| ai-infra | AI/LLM infrastructure (agents, tools, RAG, MCP) |
| fin-infra | Financial infrastructure (banking, portfolio, insights) |
License
MIT License - use it for anything.
Built by nfraxlab
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file svc_infra-1.5.0.tar.gz.
File metadata
- Download URL: svc_infra-1.5.0.tar.gz
- Upload date:
- Size: 352.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6688effc84a1f4223fbcb995a5a7ede1835d2f88a1cf7867c951b55b5d9ac4c2
|
|
| MD5 |
d5149f4c6b5ad3d284bbc364aafd09e6
|
|
| BLAKE2b-256 |
7545e720102bab63cda2fbe4aad993b5325381c9be9f2e043336f8618dc533b9
|
File details
Details for the file svc_infra-1.5.0-py3-none-any.whl.
File metadata
- Download URL: svc_infra-1.5.0-py3-none-any.whl
- Upload date:
- Size: 496.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c86a0bb961bf44e0a35d754cb4fffafe95660a8a395919a6088ad3dc46aecbef
|
|
| MD5 |
ab6e8fcf8f22e5c214cb6b0828961440
|
|
| BLAKE2b-256 |
e132792399c038d4399eae325d4a66e06a610cc92e3ed7a96d158bf51f9359cc
|