31:# Minimum scope required to send mail through the user's own account.
32:GMAIL_SCOPES = [
37:ALL_SCOPES = GMAIL_SCOPES + [USERINFO_SCOPE]
52:def resolve_client_config(config=None) -> dict:
53:    """Return {client_id, client_secret, redirect_uri} for OAuth flows.
61:            "redirect_uri": config.redirect_uri or f"{settings.BASE_URL}/auth/google/callback",
73:            "redirect_uri": f"{settings.BASE_URL}/auth/google/callback",
94:        "redirect_uris": inst.get("redirect_uris", []),
110:        "redirect_uri": client["redirect_uri"],
112:        "scope": " ".join(ALL_SCOPES),
113:        "access_type": "offline",       # needed to obtain a refresh token
114:        "prompt": "consent",            # ensure refresh token is granted
115:        "include_granted_scopes": "true",
127:        "redirect_uri": client["redirect_uri"],
177:                 client_config: dict, sending_method: str = "api", token_expiry=None):
179:        self.client_config = client_config
185:            client_id=client_config["client_id"],
186:            client_secret=client_config["client_secret"],
187:            scopes=GMAIL_SCOPES,
249:def build_gmail_client_from_account(account, oauth_token, client_config=None) -> GmailClient:
251:    cfg = client_config or resolve_client_config_for_account(account)
256:        client_config=cfg,
262:def resolve_client_config_for_account(account) -> dict:
272:                        "redirect_uri": cfg.redirect_uri or f"{settings.BASE_URL}/auth/google/callback"}
273:    return resolve_client_config(None)
