o
    ˳i,                     @  s   d dl mZ d dlmZmZmZ d dlmZmZ ddl	m
Z
mZmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  ddl!m"Z" dd	l#m$Z$ dd
l%m&Z& G dd de&Z'dS )    )annotations)DictListOptional)AsyncClientQueryParams   )model_validateparse_link_responseparse_user_responsevalidate_uuid)AdminUserAttributesAuthMFAAdminDeleteFactorParams AuthMFAAdminDeleteFactorResponseAuthMFAAdminListFactorsParamsAuthMFAAdminListFactorsResponseCreateOAuthClientParamsGenerateLinkParamsGenerateLinkResponseInviteUserByEmailOptionsOAuthClientOAuthClientListResponseOAuthClientResponse
PageParamsSignOutScopeUpdateOAuthClientParamsUserUserListUserResponse   )AsyncGoTrueAdminMFAAPI)AsyncGoTrueAdminOAuthAPI)AsyncGoTrueBaseAPIc                   @  s   e Zd ZdddddddRddZdSdTddZ	dUdVddZdWd"d#ZdXd&d'Z	dYdZd,d-Zd[d/d0Z	d\d1d2Z
d]d^d6d7Zd_d:d;Zd`d>d?Z	dUdadBdCZdbdFdGZdcdIdJZdddLdMZdedNdOZdcdPdQZdS )fAsyncGoTrueAdminAPI NTurlheadershttp_clientverifyproxyr&   strr'   Optional[Dict[str, str]]r(   Optional[AsyncClient]r)   boolr*   Optional[str]returnNonec                C  s   |pi }t j| |||||d t | _| j| j_| j| j_t | _	| j
| j	_| j| j	_| j| j	_| j| j	_| j| j	_| j| j	_d S )Nr%   )r"   __init__r    mfa_list_factorslist_factors_delete_factordelete_factorr!   oauth_list_oauth_clientslist_clients_create_oauth_clientcreate_client_get_oauth_client
get_client_update_oauth_clientupdate_client_delete_oauth_clientdelete_client_regenerate_oauth_client_secretregenerate_client_secret)selfr&   r'   r(   r)   r*   http_headers rG   Y/home/ubuntu/.local/lib/python3.10/site-packages/supabase_auth/_async/gotrue_admin_api.pyr2   '   s&   		






zAsyncGoTrueAdminAPI.__init__globaljwtscoper   c                   s&   | j ddt|d|ddI dH  dS )z.
        Removes a logged-in session.
        POSTlogout)rK   T)queryrJ   no_resolve_jsonN)_requestr   )rE   rJ   rK   rG   rG   rH   sign_outE   s   zAsyncGoTrueAdminAPI.sign_outemailoptions"Optional[InviteUserByEmailOptions]r   c                   s<   |pi }| j dd||dd|ddI dH }t|S )z;
        Sends an invite link to an email address.
        rL   invitedata)rR   rV   redirect_tobodyrW   N)rP   getr   )rE   rR   rS   email_optionsresponserG   rG   rH   invite_user_by_emailQ   s   z(AsyncGoTrueAdminAPI.invite_user_by_emailparamsr   r   c                   sb   | j dd|d|d|d|d|di dd	|di d
dI dH }t|S )zX
        Generates email links and OTPs to be sent via a custom email provider.
        rL   zadmin/generate_linktyperR   password	new_emailrS   rV   )r_   rR   r`   ra   rV   rW   rX   N)rP   rZ   r
   rE   r^   r\   rG   rG   rH   generate_linkb   s   z!AsyncGoTrueAdminAPI.generate_link
attributesr   c                   s    | j dd|dI dH }t|S )z
        Creates a new user.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   admin/usersrY   N)rP   r   )rE   rd   r\   rG   rG   rH   create_userw   s   zAsyncGoTrueAdminAPI.create_userpageOptional[int]per_page
List[User]c                   s.   | j ddt||ddI dH }tt|jjS )z
        Get a list of users.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        GETre   rh   rj   )rN   N)rP   r   r	   r   contentusers)rE   rh   rj   r\   rG   rG   rH   
list_users   s   	
zAsyncGoTrueAdminAPI.list_usersuidc                   s*   t | | dd| I dH }t|S )z
        Get user by id.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rl   admin/users/Nr   rP   r   )rE   rq   r\   rG   rG   rH   get_user_by_id   s   
z"AsyncGoTrueAdminAPI.get_user_by_idc                   s.   t | | jdd| |dI dH }t|S )z
        Updates the user data.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        PUTrr   rf   Nrs   )rE   rq   rd   r\   rG   rG   rH   update_user_by_id   s   z%AsyncGoTrueAdminAPI.update_user_by_idFidshould_soft_deletec                   s2   t | d|i}| jdd| |dI dH  dS )z
        Delete a user. Requires a `service_role` key.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rx   DELETErr   rf   Nr   rP   )rE   rw   rx   rY   rG   rG   rH   delete_user   s    zAsyncGoTrueAdminAPI.delete_userr   r   c                   s<   t |d | dd|d dI d H }tt|jS )Nuser_idrl   rr   z/factors)r   rZ   rP   r	   r   rn   rb   rG   rG   rH   r4      s   
z!AsyncGoTrueAdminAPI._list_factorsr   r   c              	     sT   t |d t |d | dd|d d|d I d H }tt|jS )Nr|   rw   ry   rr   z	/factors/)r   rZ   rP   r	   r   rn   rb   rG   rG   rH   r6      s   
z"AsyncGoTrueAdminAPI._delete_factorPageParams | Noner   c                   s   |rt |j|jd}nd}| jdd|ddI dH }tt|j}|jd}|r-t	||_
|jd}|r~|d	D ]C}|d
}t|dkr}|d d}	t|	dkr}t	|	d dd d}
|d dd d}|dkrv|
|_q:|dkr}|
|_q:|S )a  
        Lists all OAuth clients with optional pagination.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rm   Nrl   admin/oauth/clientsT)rN   rO   zx-total-countlink,;r   r   zpage=r   &>="nextlast)r   rh   rj   rP   r	   r   rn   r'   rZ   inttotalsplitlenrstripstrip	next_page	last_page)rE   r^   rN   r\   resultr   linksr   parts
page_matchpage_numrelrG   rG   rH   r9      s:   

z'AsyncGoTrueAdminAPI._list_oauth_clientsr   r   c                   s*   | j dd|dI dH }ttt|jdS )z
        Creates a new OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   r~   rf   Nclient)rP   r   r	   r   rn   rb   rG   rG   rH   r;     s   z(AsyncGoTrueAdminAPI._create_oauth_client	client_idc                   s4   t | | dd| I dH }ttt|jdS )z
        Gets details of a specific OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rl   admin/oauth/clients/Nr   r   rP   r   r	   r   rn   rE   r   r\   rG   rG   rH   r=     s   
z%AsyncGoTrueAdminAPI._get_oauth_clientr   c                   s8   t | | jdd| |dI dH }ttt|jdS )z
        Updates an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        ru   r   rf   Nr   r   )rE   r   r^   r\   rG   rG   rH   r?   +  s   z(AsyncGoTrueAdminAPI._update_oauth_clientc                   s&   t | | dd| I dH  dS )z
        Deletes an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        ry   r   Nrz   )rE   r   rG   rG   rH   rA   ?  s   z(AsyncGoTrueAdminAPI._delete_oauth_clientc                   s6   t | | dd| dI dH }ttt|jdS )a  
        Regenerates the secret for an OAuth client.
        Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.

        This function should only be called on a server.
        Never expose your `service_role` key in the browser.
        rL   r   z/regenerate_secretNr   r   r   rG   rG   rH   rC   P  s   

z3AsyncGoTrueAdminAPI._regenerate_oauth_client_secret)r&   r+   r'   r,   r(   r-   r)   r.   r*   r/   r0   r1   )rI   )rJ   r+   rK   r   r0   r1   )N)rR   r+   rS   rT   r0   r   )r^   r   r0   r   )rd   r   r0   r   )NN)rh   ri   rj   ri   r0   rk   )rq   r+   r0   r   )rq   r+   rd   r   r0   r   )F)rw   r+   rx   r.   r0   r1   )r^   r   r0   r   )r^   r   r0   r   )r^   r}   r0   r   )r^   r   r0   r   )r   r+   r0   r   )r   r+   r^   r   r0   r   )r   r+   r0   r1   )__name__
__module____qualname__r2   rQ   r]   rc   rg   rp   rt   rv   r{   r4   r6   r9   r;   r=   r?   rA   rC   rG   rG   rG   rH   r#   &   s4    






-


r#   N)(
__future__r   typingr   r   r   httpxr   r   helpersr	   r
   r   r   typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   gotrue_admin_mfa_apir    gotrue_admin_oauth_apir!   gotrue_base_apir"   r#   rG   rG   rG   rH   <module>   s    P