Skip to main content

Client library for ExtraSuite - secure OAuth token exchange for CLI tools

Project description

extrasuite

Python client library for ExtraSuite - secure OAuth token exchange for AI agents and CLI tools.

Installation

pip install extrasuite

Quick Start

CLI Authentication

# Login (opens browser for OAuth)
python -m extrasuite.client login

# Or using the console script
extrasuite login

# Logout (clears cached credentials)
python -m extrasuite.client logout

Programmatic Usage

from extrasuite.client import authenticate

# Get a token - opens browser for authentication if needed
token = authenticate()

# Use the token with Google APIs
import gspread
from google.oauth2.credentials import Credentials

creds = Credentials(token.access_token)
gc = gspread.authorize(creds)
sheet = gc.open("My Spreadsheet").sheet1

Configuration

Authentication can be configured via:

  1. Constructor parameters (highest priority)
  2. Environment variables
  3. Gateway config file ~/.config/extrasuite/gateway.json (created by skill installation)

Environment Variables

Variable Description
EXTRASUITE_AUTH_URL URL to start authentication flow
EXTRASUITE_EXCHANGE_URL URL to exchange auth code for token
SERVICE_ACCOUNT_PATH Path to service account JSON file (alternative auth)

Using CredentialsManager

For more control, use the CredentialsManager class directly:

from extrasuite.client import CredentialsManager

manager = CredentialsManager(
    auth_url="https://your-server.example.com/api/token/auth",
    exchange_url="https://your-server.example.com/api/token/exchange",
)

token = manager.get_token()
print(f"Service account: {token.service_account_email}")
print(f"Expires in: {token.expires_in_seconds()} seconds")

Service Account Mode

For non-interactive environments, you can use a service account file:

from extrasuite.client import CredentialsManager

manager = CredentialsManager(service_account_path="/path/to/service-account.json")
token = manager.get_token()

Note: Service account mode requires the google-auth package:

pip install google-auth

Token Storage

Tokens are securely stored in the OS keyring:

  • macOS: Keychain
  • Windows: Credential Locker
  • Linux: Secret Service (via libsecret)

How It Works

  1. When you call authenticate() or get_token(), the client checks the OS keyring for a cached token
  2. If no valid cached token exists, it starts a local HTTP server and opens your browser
  3. After authentication with the ExtraSuite server, the browser redirects back with an auth code
  4. The client exchanges the auth code for a short-lived access token
  5. The token is cached in the OS keyring for subsequent calls

Tokens are short-lived (1 hour) and automatically refreshed when expired.

API Reference

authenticate()

Convenience function to get a token with minimal code.

from extrasuite.client import authenticate

token = authenticate(
    auth_url=None,           # Optional: override auth URL
    exchange_url=None,       # Optional: override exchange URL
    service_account_path=None,  # Optional: use service account instead
    force_refresh=False,     # Force re-authentication
)

Token

The token object returned by authentication.

token.access_token          # The OAuth2 access token string
token.service_account_email # Email of the service account
token.expires_at            # Unix timestamp when token expires
token.is_valid()            # Check if token is still valid
token.expires_in_seconds()  # Seconds until expiration

Requirements

  • Python 3.10+
  • Dependencies: keyring, certifi

For Google Sheets/Docs/Slides integration:

pip install gspread google-auth

License

MIT - Copyright (c) 2026 Think41 Technologies Pvt. Ltd.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

extrasuite-0.5.3.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

extrasuite-0.5.3-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file extrasuite-0.5.3.tar.gz.

File metadata

  • Download URL: extrasuite-0.5.3.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for extrasuite-0.5.3.tar.gz
Algorithm Hash digest
SHA256 885def4d653974ae565266f265d99e7d824448dd8be5f9a5dcdf16664c73aae8
MD5 20f46cc17efef74fff6935348adc4c2d
BLAKE2b-256 76871110deb442fa4ecb105e817c35c4cd510910986aff4f167fb8ba6d41e52e

See more details on using hashes here.

Provenance

The following attestation bundles were made for extrasuite-0.5.3.tar.gz:

Publisher: publish-extrasuite.yml on think41/extrasuite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file extrasuite-0.5.3-py3-none-any.whl.

File metadata

  • Download URL: extrasuite-0.5.3-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for extrasuite-0.5.3-py3-none-any.whl
Algorithm Hash digest
SHA256 42978ab32d429ce9e59e87ec4ede0d8b3763d367538b9c9b0a377396e929a8ab
MD5 c72e05ee84590fe6708ab559ae5c6a4b
BLAKE2b-256 fb528da97c74ba135d0ea1dbf782bf74ed5045ee5c5d2b2b92874face3d44bec

See more details on using hashes here.

Provenance

The following attestation bundles were made for extrasuite-0.5.3-py3-none-any.whl:

Publisher: publish-extrasuite.yml on think41/extrasuite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page