"""GL IAM Token Refresh Example."""
import asyncio
from gl_iam import IAMGateway
from gl_iam.core.types import PasswordCredentials
from gl_iam.providers.postgresql import PostgreSQLProvider, PostgreSQLConfig
DATABASE_URL = "postgresql+asyncpg://postgres:postgres@localhost:5432/gliam"
async def main():
# Setup
config = PostgreSQLConfig(database_url=DATABASE_URL)
provider = PostgreSQLProvider(config)
gateway = IAMGateway.from_fullstack_provider(provider)
# Login to get tokens
auth_result = await gateway.authenticate(
credentials=PasswordCredentials(email="alice@example.com", password="SecurePass123"),
organization_id="default",
)
user, token = auth_result.unwrap()
print(f"Original token: {token.access_token[:30]}...")
# Refresh the token
result = await gateway.refresh_session(
refresh_token=token.refresh_token,
organization_id="default",
)
if result.is_ok:
new_token = result.unwrap()
print(f"New token: {new_token.access_token[:30]}...")
print("Token refreshed successfully!")
else:
print(f"Refresh failed: {result.error.message}")
await provider.close()
if __name__ == "__main__":
asyncio.run(main())