fix: auto-retry on 403 bearer-invalid after idle - #111
Conversation
When the server invalidates the bearer token after an idle period, the first request fails with 403 'The bearer token included in the request is invalid'. Previously this was immediately classified as a permanent auth failure. Now on the first 403 bearer-invalid, the plugin: 1. Forces a token refresh (CLI sync or OIDC refresh) 2. Retries the same request transparently If the retry also fails, existing permanent-failure handling applies. Fixes tickernelz#82
|
Maintainer review found a retry-state propagation bug: after the first bearer-invalid retry, I pushed Verified on the exact updated PR head:
|
|
Follow-up maintainer fix Final exact-head verification: typecheck passed, build passed, 35 tests passed, package dry-run passed, diff check passed, and GitGuardian passed. |
Problem
After a period of inactivity, the first API request fails with:
The token in the plugin DB matches the kiro-cli token, is not expired, and
kiro-cli whoamisucceeds. This is a server-side bearer invalidation that resolves on the next attempt. Users currently have to manually retry or do a full logout/login cycle.Related: #82
Solution
On the first encounter of a 403 with "bearer token included in the request is invalid", the plugin now:
If the retry also fails with bearer-invalid, the existing permanent-failure classification applies unchanged.
Changes
src/core/request/request-handler.ts: Added inline bearer-invalid detection before the error-handler, with a one-shotforceRefresh+continuesrc/core/auth/token-refresher.ts: AddedforceRefresh()method that attempts CLI sync first, then falls back to OIDC refreshsrc/core/request/error-handler.ts: AddedbearerRetriedcontext flag andforceRefreshreturn field for defense-in-depth (error-handler path)Testing