Expand description
OAuth 2.0 Authorization Code + PKCE flow for Anthropic (Claude Pro/Max).
Implements the same flow as Claude Code and Pi coding agent:
- Generate PKCE verifier + challenge
- Start localhost callback server
- Open browser to claude.ai/oauth/authorize
- Capture redirect with auth code
- Exchange code for access + refresh tokens
- Save to ~/.pi/agent/auth.json (shared with Pi)
Re-exports§
pub use broker::broker_from_source;pub use broker::global_broker;pub use broker::global_broker_install_count;pub use broker::preflight_cloud_capability;pub use broker::set_global_broker;pub use broker::AccessToken;pub use broker::BrokerError;pub use broker::CredentialBroker;pub use broker::CredentialKind;pub use broker::LocalBroker;pub use broker::ProviderStatus;pub use broker::ProxyByteStream;pub use broker::ProxyMethod;pub use broker::ProxyRequest;pub use broker::ProxyResponse;pub use broker::RemoteBroker;pub use broker::StaticKeyStatus;pub use broker::MAX_PROXY_REQUEST_BYTES;pub use broker::MAX_PROXY_RESPONSE_BYTES;pub use broker::MAX_UPSTREAM_ERROR_BYTES;pub use broker::PROXY_REQUEST_TIMEOUT;pub use cloud::AuthIdentity;pub use cloud::AwsBedrockConfig;pub use cloud::AzureOpenAiConfig;pub use cloud::BrokerMessage;pub use cloud::BrokerOperation;pub use cloud::BrokerTool;pub use cloud::CloudProviderId;pub use cloud::GoogleVertexConfig;pub use cloud::InvokeOptions;pub use cloud::InvokeRequest;pub use cloud::MessageRole;pub use cloud::ProviderId;pub use github_copilot::login as login_github_copilot;pub use kimi_code::login as login_kimi_code;pub use provider::BrokerCredentialStrategy;pub use provider::OAuthProviderDescriptor;pub use provider::OAuthProviderId;pub use provider::OAuthProviderRegistry;pub use static_providers::static_provider;pub use static_providers::StaticProviderSpec;pub use static_providers::LOCAL_PROVIDER_KEY;
Modules§
- aws_
bedrock - Provider-local IAM Identity Center and Bedrock broker boundary. The transport trait is intentionally typed: it cannot sign arbitrary URLs or vend credentials.
- azure_
openai - Provider-local Azure OpenAI OAuth, catalog, and broker request contracts. No function in this module performs network I/O or returns credentials.
- broker
- The credential broker — the mandatory boundary between runtimes and
provider secrets (Checkpoint 1 decision,
docs/decisions/credential-broker-checkpoint-1.md). - cloud
- Shared, credential-free cloud provider contracts.
- cloud_
login - Provider-specific interactive cloud login protocols. Credentials remain persisted only through the broker-owned auth store.
- github_
copilot - GitHub Copilot OAuth (device authorization + broker-owned session mint).
- google_
gemini - Google Gemini (Code Assist) OAuth: authorization-code + PKCE.
- google_
vertex - Provider-local Google Vertex AI installed-app OAuth primitives.
- kimi_
code - Kimi Code OAuth (RFC 8628 device authorization; direct bearer, no mint).
- provider
- Typed OAuth provider identity, descriptors, registry validation, and dispatch.
- providers
- static_
providers - Static-key provider connection metadata, owned by the credential broker.
Structs§
- Auth
File - Broker
Client - HTTP client for a credential broker. Presents the machine’s own bearer token (NOT the provider credential) and receives a short-lived access token.
- Broker
Token - An access token as returned by the broker’s
GET /token. - Callback
Result - Result from the OAuth callback.
- Callback
Server Handle - OAuth
Credentials - Token
Cache - Thread-safe, per-provider cache of broker access tokens. Cloneable handle over shared state. Holds ONLY short-lived access tokens, never a refresh token, never persisted to disk.
Enums§
- Callback
Outcome - Credential
Source - Where a client gets its provider credentials.
Constants§
- DEFAULT_
MARGIN_ MS - Default refetch margin: 5 minutes (mirrors
is_token_expired).
Traits§
- Token
Fetcher - “Get a fresh access token from somewhere.” Abstracted so the cache/resolve
logic is unit-testable without real HTTP. The real impl is
BrokerClient.
Functions§
- auth_
file_ path - Get the path to auth.json (~/.synaps-cli/auth.json).
- build_
auth_ url - Build the full authorize URL for the browser.
- ensure_
fresh_ provider_ token - Ensure an OAuth provider (including Anthropic) has a fresh token.
- ensure_
fresh_ token - Acquire the Anthropic refresh gate, check token freshness, refresh if needed, and persist the result atomically. Returns the current (possibly refreshed) credentials.
- exchange_
code_ for_ tokens - Exchange an authorization code for access + refresh tokens.
- extract_
codex_ account_ id - generate_
code_ challenge - Compute S256 code challenge from verifier.
- generate_
code_ verifier - Generate a cryptographically random code verifier (43-128 chars, base64url).
- generate_
state - Generate a random state parameter.
- is_
expired_ with_ margin - True if
expires_msis already past, or withinmargin_msof now. - is_
token_ expired - Check if the current token is expired.
- load_
auth - Load credentials from auth.json.
- load_
cloud_ state - Load an opaque broker-owned cloud provider state object.
- load_
provider_ auth - Load one provider’s OAuth credential from auth.json.
- load_
static_ key - Load one provider’s broker-owned static API key from auth.json.
- login
- Run the full OAuth login flow. Returns saved credentials.
- login_
openai_ codex - login_
xai - open_
browser - Open a URL in the default browser.
- refresh_
token - Refresh an expired OAuth token.
- resolve_
access_ token - Provider-aware token resolution honoring the credential source — kept as a
compatibility adapter for CLI callers (
synaps status). Delegates to the typed credential broker: the local in-process broker or the authenticated remote transport. Vends the access token only. - resolve_
remote - Resolve a provider token via cache-or-fetch, returning the full
BrokerToken(access + expiry). The runtime needs the expiry to drive its in-memory refresh trigger. NEVER touches a refresh token orauth.json. - resolve_
remote_ token - Like
resolve_remotebut returns only the access token string. - save_
auth - Save credentials to auth.json.
- save_
cloud_ state - Atomically persist opaque cloud state while preserving every unrelated field.
- save_
provider_ auth - Save one provider credential while preserving other auth.json entries.
- save_
static_ key - Persist a broker-owned static API key while preserving every other auth.json entry and any provider metadata.
- start_
callback_ server - start_
callback_ server_ at