Release v2.2.1
What's new
ChangelogConsumer Python SDK (#241)
Pull-based event loop for tb_entity_change_log. Register handlers with .on(entity_type, operation, handler), automatic Debezium envelope unwrapping, checkpoint persistence, exponential backoff, and configurable startup modes.
from fraiseql import ChangelogConsumer, ChangelogEvent
consumer = ChangelogConsumer(base_url="http://localhost:4000", consumer_id="my-worker")
@consumer.on("User", "INSERT")
async def on_user_created(event: ChangelogEvent):
print(f"New user: {event.data}")
await consumer.run()Server-side: GET /api/changelog, GET/PUT /api/changelog/checkpoint/:consumer_id
Claims enrichment for /auth/me (#242)
TOML-configured SQL query executed after JWT verification to augment the /auth/me response with application-specific fields. Named parameters ($sub, $email) bound via sqlx — never interpolated. Per-sub cache with configurable TTL. Optional column renaming.
[auth.me.enrichment]
query = "SELECT role, plan_tier FROM users WHERE auth_sub = $sub"
cache_ttl_secs = 300
[auth.me.enrichment.map]
role = "user_role"
plan_tier = "plan"Observer delivery status HTTP API (#243)
GET /api/observers/delivery/status, per-observer breakdown, DLQ listing with pagination, single and bulk retry endpoints. Completes the at-least-once delivery feature set.
Fixed
- Pre-existing clippy warnings in
fraiseql-errorandfraiseql-db
Full Changelog: v2.2.0...v2.2.1