Implement automatic Garmin token refresh and fix expiry tracking
- Add OAuth1 to OAuth2 token exchange using Garmin's exchange endpoint - Track refresh token expiry (~30 days) instead of access token expiry (~21 hours) - Auto-refresh access tokens in cron sync before they expire - Update Python script to output refresh_token_expires_at - Add garminRefreshTokenExpiresAt field to User type and database schema - Fix token input UX: show when warning active, not just when disconnected - Add Cache-Control headers to /api/user and /api/garmin/status to prevent stale data - Add oauth-1.0a package for OAuth1 signature generation The system now automatically refreshes OAuth2 tokens using the stored OAuth1 token, so users only need to re-run the Python auth script every ~30 days (when refresh token expires) instead of every ~21 hours (when access token expires). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -45,13 +45,16 @@ oauth1_adapter = TypeAdapter(OAuth1Token)
|
||||
oauth2_adapter = TypeAdapter(OAuth2Token)
|
||||
|
||||
expires_at_ts = garth.client.oauth2_token.expires_at
|
||||
refresh_expires_at_ts = garth.client.oauth2_token.refresh_token_expires_at
|
||||
tokens = {
|
||||
"oauth1": oauth1_adapter.dump_python(garth.client.oauth1_token, mode='json'),
|
||||
"oauth2": oauth2_adapter.dump_python(garth.client.oauth2_token, mode='json'),
|
||||
"expires_at": datetime.fromtimestamp(expires_at_ts).isoformat()
|
||||
"expires_at": datetime.fromtimestamp(expires_at_ts).isoformat(),
|
||||
"refresh_token_expires_at": datetime.fromtimestamp(refresh_expires_at_ts).isoformat()
|
||||
}
|
||||
|
||||
print("\n--- Copy everything below this line ---")
|
||||
print(json.dumps(tokens, indent=2))
|
||||
print("--- Copy everything above this line ---")
|
||||
print(f"\nTokens expire: {tokens['expires_at']}")
|
||||
print(f"\nAccess token expires: {tokens['expires_at']}")
|
||||
print(f"Refresh token expires: {tokens['refresh_token_expires_at']} (re-run script before this date)")
|
||||
|
||||
Reference in New Issue
Block a user