Skip to content

v0.44.0

Choose a tag to compare

@rustyconover rustyconover released this 28 Aug 14:45
· 139 commits to main since this release

Client-driven OAuth login (device-code flow)

New vgi_rpc.http.VgiOAuthAuth: an httpx2.Auth that transparently obtains
and refreshes a bearer token on a 401 carrying an RFC 9728 challenge. Ports
the DuckDB VGI extension's production OAuth client (vgi_oauth.cpp) to
Python — RFC 8628 device-code polling (full error taxonomy + retry caps),
RFC 8414 authorization-server discovery, silent token refresh with skew,
the secret-less-proxy token_endpoint override, and a thread-safe
per-instance login state machine.

PKCE (browser-driven authorization-code flow) is not yet implemented —
flow="pkce", or "auto" against a PKCE-only server, raises a clear
NotImplementedError.

Also fixes a real bug in the existing WWW-Authenticate header parsers:
parse_client_id()/parse_client_secret() used a bare regex search that
also matched inside device_code_client_id="..."/device_code_client_secret="...",
so a challenge advertising both would misreport the device client as the
ordinary one. Replaced with a real RFC 7235 auth-param parser
(parse_www_authenticate_params).

OAuthResourceMetadataResponse gains a token_endpoint field (present on
the wire, previously silently dropped by the JSON parser).

Other changes since v0.43.2

  • fix(rpc): treat clean socket EOF as normal disconnect
  • feat(launcher): resolve_and_connect — launch-or-reuse with retry-on-stale-connect