moikapy
f6a2ba6261
fix(auxiliary): detect xAI OAuth 403 bad-credentials as auth error
...
xAI returns HTTP 403 (not 401) with unauthenticated:bad-credentials
when an OAuth2 access token has expired or is invalid. The existing
_is_auth_error() only checked for 401 status codes, so these tokens
were never refreshed and the 403 propagated as a generic permission
denied error.
Three fixes:
1. _is_auth_error: Recognize xAI's 403+bad-credentials pattern as
an auth failure, triggering token refresh instead of silent failure.
2. _refresh_provider_credentials: Add xai-oauth branch with
pool-level refresh (try_refresh_current with select to ensure
current entry) then fallback to singleton resolver with
force_refresh=True.
3. _recoverable_pool_provider: Map api.x.ai host to xai-oauth
pool for auto-resolved providers, matching existing pattern for
openai-codex/openrouter/nous/anthropic.
Includes 14 tests covering the new detection logic, host mapping,
and graceful fallback behavior.
Signed-off-by: moikapy <moikapy@devmoi.com >
2026-05-29 00:28:02 -07:00
..
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-02-26 13:54:20 +03:00
2026-05-28 10:31:59 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-05 17:23:45 -07:00
2026-05-28 22:26:25 -07:00
2026-04-19 22:43:09 -07:00
2026-05-28 22:26:25 -07:00
2026-05-29 00:28:02 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-28 06:50:14 -07:00
2026-05-28 22:26:25 -07:00
2026-05-18 10:14:38 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:09 -07:00
2026-05-28 04:53:27 -07:00
2026-04-14 01:43:45 -07:00
2026-05-28 21:40:39 -07:00
2026-05-16 17:18:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-27 22:14:53 -07:00
2026-05-28 20:34:40 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-20 01:56:41 -07:00
2026-04-29 20:05:32 -07:00
2026-05-16 02:24:48 -07:00
2026-04-19 18:12:55 -07:00
2026-05-28 23:45:42 -07:00
2026-05-28 22:26:25 -07:00
2026-04-30 10:31:47 -07:00
2026-05-02 01:29:57 -07:00
2026-05-10 06:44:53 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-21 07:48:53 -07:00
2026-05-17 02:29:41 -07:00
2026-04-20 22:14:29 -07:00
2026-03-15 20:21:21 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 07:28:24 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-25 03:40:47 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-18 20:04:57 -07:00
2026-05-28 22:26:25 -07:00
2026-04-24 05:35:17 -07:00
2026-04-24 03:40:00 -07:00
2026-05-10 07:14:14 -07:00
2026-04-21 21:30:10 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 00:20:11 -07:00
2026-04-29 06:35:42 -07:00
2026-05-23 17:38:19 -07:00
2026-04-22 14:46:10 -07:00
2026-05-11 16:49:13 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-07 22:23:28 -07:00
2026-05-05 13:40:01 -07:00
2026-05-28 22:26:25 -07:00
2026-04-24 03:00:33 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-16 13:02:19 -07:00
2026-05-28 22:26:25 -07:00
2026-05-25 06:06:51 -07:00
2026-04-26 04:53:42 -07:00
2026-05-28 22:26:25 -07:00
2026-05-05 10:13:34 -07:00
2026-05-28 22:26:25 -07:00
2026-05-12 20:49:20 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-21 05:52:46 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-24 18:10:47 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-05-28 22:26:25 -07:00
2026-04-29 21:07:47 -07:00
2026-05-21 16:40:04 +05:30
2026-05-21 19:08:38 -07:00
2026-05-18 10:53:08 -07:00
2026-05-28 22:26:25 -07:00
2026-04-20 20:53:51 -07:00
2026-05-28 22:26:25 -07:00
2026-05-17 23:20:37 -07:00
2026-05-05 04:33:38 -07:00
2026-05-28 22:26:25 -07:00
2026-05-25 14:52:24 -07:00
2026-05-19 00:12:12 -07:00
2026-05-13 06:46:23 -07:00
2026-05-25 01:41:19 -07:00
2026-05-24 18:04:54 -07:00
2026-05-08 14:55:40 -07:00
2026-04-25 08:21:14 -07:00
2026-05-27 00:43:32 -07:00
2026-05-13 16:39:41 -07:00
2026-05-04 05:05:43 -07:00
2026-05-24 15:01:28 -07:00