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.6.0.tar.gz (39.5 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.6.0-py3-none-any.whl (57.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for extrasuite-0.6.0.tar.gz
Algorithm Hash digest
SHA256 658e1f0d22abe087915e3d8a4590e5d231689fc432097dfea9862329a0537d01
MD5 d41336121eee5afb3f186e20a20fcded
BLAKE2b-256 8aa97125c1a848cd40f46eadbc08315aed098b84ca1923712d202bff79d519f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for extrasuite-0.6.0.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.6.0-py3-none-any.whl.

File metadata

  • Download URL: extrasuite-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 57.3 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 10aa7cc2864fb56fb2f12f34d7b4cf9c8144c05031966cb5da1a3475568f0cb9
MD5 9581deb19195c58b068e1c12f08d5c65
BLAKE2b-256 44489d1ffcd004086f37fb8643005b74ea1a04fa337096e7144efd92d96bdad1

See more details on using hashes here.

Provenance

The following attestation bundles were made for extrasuite-0.6.0-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