Overview

Known trade-offs

JWT access tokens are stateless#

Revoking a client does not invalidate tokens that were already issued. They expire naturally after 15 minutes.

If you need immediate revocation, add a revocation check in middleware.ts. The cost is a lookup on every request, which is exactly why it is not the default.

Quota enforcement is reactive#

The tool call executes before usage is reported. Under high concurrency a user can briefly exceed quota.

If you need hard enforcement, add a pre-call quota check in middleware.ts. The cost is latency on every call and a second failure mode before any work happens.

Where the open question still is#

Webhook out-of-order delivery is the one decision that is not fully closed. Stripe does not guarantee ordering, so a subscription update can arrive after the cancellation that supersedes it. The Dev.to write-up covers where that stands.

Related: security decisions, billing decisions.