app/services/gmail_service.py:53:    """Return {client_id, client_secret, redirect_uri} for OAuth flows.
app/services/gmail_service.py:57:    if config and config.client_id:
app/services/gmail_service.py:59:            "client_id": config.client_id,
app/services/gmail_service.py:61:            "redirect_uri": config.redirect_uri or f"{settings.BASE_URL}/auth/google/callback",
app/services/gmail_service.py:71:            "client_id": inst["client_id"],
app/services/gmail_service.py:73:            "redirect_uri": f"{settings.BASE_URL}/auth/google/callback",
app/services/gmail_service.py:88:    if not inst or not inst.get("client_id") or not inst.get("client_secret"):
app/services/gmail_service.py:89:        raise GmailOauthError("JSON must contain an 'installed' or 'web' object with client_id and client_secret")
app/services/gmail_service.py:92:        "client_id": inst["client_id"],
app/services/gmail_service.py:94:        "redirect_uris": inst.get("redirect_uris", []),
app/services/gmail_service.py:109:        "client_id": client["client_id"],
app/services/gmail_service.py:110:        "redirect_uri": client["redirect_uri"],
app/services/gmail_service.py:125:        "client_id": client["client_id"],
app/services/gmail_service.py:127:        "redirect_uri": client["redirect_uri"],
app/services/gmail_service.py:141:        "client_id": client["client_id"],
app/services/gmail_service.py:204:                client_id=(client_config or {}).get("client_id"),
app/services/gmail_service.py:387:                return {"client_id": cfg.client_id, "client_secret": cfg.client_secret,
app/services/gmail_service.py:388:                        "redirect_uri": cfg.redirect_uri or f"{settings.BASE_URL}/auth/google/callback"}
app/services/gmail_service.py:398:            return {"client_id": cfg.client_id, "client_secret": cfg.client_secret,
app/services/gmail_service.py:399:                    "redirect_uri": cfg.redirect_uri or f"{settings.BASE_URL}/auth/google/callback"}
