Fix: pass expiry to Credentials so auto-refresh fires when token expired

This commit is contained in:
daniel
2026-05-08 16:03:09 -05:00
parent 9d21d5d2e5
commit 8a25eb2d5a

View File

@@ -28,9 +28,12 @@ def _secrets():
def _get_creds(actor_id: str) -> Credentials:
from datetime import datetime
secret_name = 'agent-claw/google-credentials/' + actor_id.replace(':', '-')
print(f'[google] fetching creds actor={actor_id}')
data = json.loads(_secrets().get_secret_value(SecretId=secret_name)['SecretString'])
expiry_str = data.get('expiry')
expiry = datetime.fromisoformat(expiry_str.replace('Z', '+00:00')) if expiry_str else None
creds = Credentials(
token=data.get('token'),
refresh_token=data.get('refresh_token'),
@@ -38,12 +41,17 @@ def _get_creds(actor_id: str) -> Credentials:
client_id=data.get('client_id'),
client_secret=data.get('client_secret'),
scopes=data.get('scopes'),
expiry=expiry,
)
if creds.expired and creds.refresh_token:
print(f'[google] creds loaded, expired={creds.expired}')
if (creds.expired or not creds.valid) and creds.refresh_token:
print('[google] refreshing token')
creds.refresh(Request())
data['token'] = creds.token
if creds.expiry:
data['expiry'] = creds.expiry.isoformat()
_secrets().put_secret_value(SecretId=secret_name, SecretString=json.dumps(data))
print('[google] token refreshed and saved')
return creds