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)