Files
openrouter-python-sdk-retry…/examples/oauth_pkce_example.py
2025-11-13 13:12:32 -05:00

68 lines
2.2 KiB
Python

"""
Example of using OAuth PKCE helper functions
This example demonstrates how to:
1. Generate a SHA-256 code challenge and verifier
2. Create an authorization URL for OAuth flow
"""
from openrouter import OpenRouter
from openrouter.utils import (
oauth_create_sha256_code_challenge,
oauth_create_authorization_url,
CreateSHA256CodeChallengeRequest,
CreateAuthorizationUrlRequestWithPKCE,
)
def main():
# Step 1: Generate a code challenge and verifier
# You can optionally provide your own code_verifier, or let it generate one
result = oauth_create_sha256_code_challenge()
print("Code Challenge:", result.code_challenge)
print("Code Verifier:", result.code_verifier)
print()
# Or provide your own code verifier (must be 43-128 chars, [A-Za-z0-9-._~])
custom_result = oauth_create_sha256_code_challenge(
CreateSHA256CodeChallengeRequest(
code_verifier="my-custom-verifier-that-is-at-least-43-characters-long-abcdefghij"
)
)
print("Custom Code Challenge:", custom_result.code_challenge)
print("Custom Code Verifier:", custom_result.code_verifier)
print()
# Step 2: Create an authorization URL
client = OpenRouter(api_key="your-api-key")
# Create authorization URL with PKCE
auth_url = oauth_create_authorization_url(
client,
CreateAuthorizationUrlRequestWithPKCE(
callback_url="https://your-app.com/callback",
code_challenge=result.code_challenge,
code_challenge_method="S256",
limit=10.0, # Optional credit limit
)
)
print("Authorization URL:", auth_url)
print()
# Step 3: User would visit the authorization URL and authorize the app
# Step 4: After authorization, the callback URL receives an authorization code
# Step 5: Exchange the code for an API key using the SDK's exchange method
# code = "authorization-code-from-callback"
# api_key_response = client.o_auth.exchange_auth_code_for_api_key(
# code=code,
# code_verifier=result.code_verifier,
# code_challenge_method="S256",
# )
# print("API Key:", api_key_response.key)
if __name__ == "__main__":
main()