from __future__ import annotations
from typing import Any
from .base import AuthenticationBase
[docs]
class Passwordless(AuthenticationBase):
    """Passwordless connections endpoints.
    Args:
        domain (str): Your auth0 domain (e.g: my-domain.us.auth0.com)
    """
[docs]
    def email(
        self, email: str, send: str = "link", auth_params: dict[str, str] | None = None
    ) -> Any:
        """Start flow sending an email.
        Given the user email address, it will send an email with:
          - A link (default, send:"link"). You can then authenticate with
            this user opening the link and he will be automatically logged in
            to the application. Optionally, you can append/override
            parameters to the link (like scope, redirect_uri, protocol,
            response_type, etc.) using auth_params dict.
          - A verification code (send:"code"). You can then authenticate with
            this user using email as username and code as password.
        Complete the authentication using the get_token.passwordless_login method.
        Args:
            email (str): Email address.
            send (str, optional): Can be: 'link' or 'code'. Defaults to 'link'.
            auth_params (dict, optional): Parameters to append or override.
        """
        data: dict[str, Any] = {
            "client_id": self.client_id,
            "connection": "email",
            "email": email,
            "send": send,
        }
        if auth_params:
            data.update({"authParams": auth_params})
        return self.authenticated_post(
            f"{self.protocol}://{self.domain}/passwordless/start", data=data
        ) 
[docs]
    def sms(self, phone_number: str) -> Any:
        """Start flow sending an SMS message.
        Given the user phone number, it will send an SMS with
        a verification code. You can then authenticate with
        this user using phone number as username and code as password.
        Complete the authentication using the get_token.passwordless_login method.
        Args:
            phone_number (str): Phone number.
        """
        data = {
            "client_id": self.client_id,
            "connection": "sms",
            "phone_number": phone_number,
        }
        return self.authenticated_post(
            f"{self.protocol}://{self.domain}/passwordless/start", data=data
        )