
    h                        d dl Z d dlmZmZmZ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 d dlmZ deeef   deeef   fdZdedee
   fd	Zded
edee
   fdZdedee   dee
   fdZdededee   fdZdededee   fdZdededee
   fdZdededee   fdZded
edefdZded
efdZd Zded
edee
   fdZdededede
fdZ dededede
fdZ!y)    N)AnyDictIterableListOptionalSetUnion)LiteLLM_MCPServerTableLiteLLM_ObjectPermissionTableLiteLLM_TeamTableNewMCPServerRequestSpecialMCPServerNameUpdateMCPServerRequestUserAPIKeyAuth)PrismaClientdatareturnc                     ddl m} | j                         }d|vrt        | dd      |d<   | j                   || j                        |d<   | j
                   || j
                        |d<   |S )a  
    Helper function to prepare MCP server data for database operations.
    Handles JSON field serialization for mcp_info and env fields.

    Args:
        data: NewMCPServerRequest or UpdateMCPServerRequest object

    Returns:
        Dict with properly serialized JSON fields
    r   )
safe_dumpsaliasNmcp_infoenv)*litellm.litellm_core_utils.safe_json_dumpsr   
model_dumpgetattrr   r   )r   r   	data_dicts      e/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/_experimental/mcp_server/db.py_prepare_mcp_server_datar      sw     F !Ii$T7D9	' }}  *4== 9	* xx%dhh/	%     prisma_clientc           	         K   | j                   j                  j                          d{   }|D cg c]  }t        di |j	                          c}S 7 +c c}w w)z4
    Returns all of the mcp servers from the db
    N )dblitellm_mcpservertable	find_manyr
   r   )r    mcp_servers
mcp_servers      r   get_all_mcp_serversr(   2   s^      &((??IIKKK MX>H9!6!6!89  Ls    (AAA AAA	server_idc                 r   K   | j                   j                  j                  d|i       d{   }|S 7 w)z@
    Returns the matching mcp server from the db iff exists
    r)   whereN)r#   r$   find_unique)r    r)   r'   s      r   get_mcp_serverr.   ?   sI      55AAY B 
 	
  	
   ,757
server_idsc                 v   K   | j                   j                  j                  dd|ii       d{   }|S 7 w)zJ
    Returns the matching mcp servers from the db with the server_ids
    r)   inr+   N)r#   r$   r%   )r    r0   r&   s      r   get_mcp_serversr3   O   sN      55??dJ/ @ 
 	
  	
s   .979tokenc                    K   | j                   j                  j                  d|iddi       d{   }g }|"|j                  |j                  j                  }|xs g S 7 0w)zH
    Returns the mcp servers from the db for the verification token
    r4   object_permissionTr,   includeN)r#   litellm_verificationtokenr-   r6   r&   )r    r4   verification_token_recordr&   s       r   $get_mcp_servers_by_verificationtokenr;   _   s      88DD $T	 E 
 	
  (*K!-%77C/AAMM"!	
   /A$A"1A$team_idc                    K   | j                   j                  j                  d|iddi       d{   }g }|"|j                  |j                  j                  }|xs g S 7 0w)z=
    Returns the mcp servers from the db for the team id
    r=   r6   Tr7   N)r#   litellm_teamtabler-   r6   r&   )r    r=   team_recordr&   s       r   get_mcp_servers_by_teamrA   y   s      00<<7 $T	 = 
 	
  (*K;#@#@#L!33??"	
r<   userc                   K   t               }g }|j                  r|t        | |j                         d{   }|j                  |       t        j
                  |v r;|j                  /t        | |j                         d{   }|j                  |       t        |      dkD  rt        | |       d{   }|S 7 7 ;7 
w)z
    Get all the mcp servers filtered by the given user has access to.

    Following Least-Privilege Principle - the requestor should only be able to see the mcp servers that they have access to.
    Nr   )
setapi_keyr;   updater   all_team_serversr=   rA   lenr3   )r    rB   mcp_server_idsr&   token_mcp_serversteam_mcp_serverss         r   get_all_mcp_servers_for_userrL      s       #uNK ||"F4<<#
 
 	/0 !11^C(%<t||&   !!"23
>Q+M>JJ%
  Ks4   2CB;ACB=2C4B?5C=C?Cmcp_server_idc                 ~   K   | j                   j                  j                  dd|iiddd       d{   }|S 7 w)z
    Get all the object permissions records and the associated team and verficiationtoken records that have access to the mcp server
    r&   hasT)teamsverification_tokensr7   N)r#   litellm_objectpermissiontabler%   )r    rM   object_permission_recordss      r   $get_objectpermissions_for_mcp_serverrT      s[      <<FF}5 '+	 G 
 	
  %$	
s   2=;=c                 ~   K   | j                   j                  j                  dd|ii       d{   }|g S |S 7 
w)zE
    Get all the virtual keys that have access to the mcp server
    r&   rO   r+   N)r#   r9   r%   )r    r)   virtual_keyss      r   get_virtualkeys_for_mcp_serverrW      sV      '))CCMME9-
 N  L 	s   .=;=c                    K   yw)z-
    Remove the mcp server from the team
    Nr"   )r    r)   s     r   delete_mcp_server_from_teamrY            	   c                     K   yw)z4
    Remove the mcp server from the virtual key
    Nr"   r"   r   r   !delete_mcp_server_from_virtualkeyr]      rZ   r[   c                 r   K   | j                   j                  j                  d|i       d{   }|S 7 w)z
    Delete the mcp server from the db by server_id

    Returns the deleted mcp server record if it exists, otherwise None
    r)   r+   N)r#   r$   delete)r    r)   deleted_servers      r   delete_mcp_serverra      sF      )++BBII
 J  N
 r/   
touched_byc                    K   |j                   "t        t        j                               |_         t	        |      }||d<   ||d<   | j
                  j                  j                  |       d{   }|S 7 w)z2
    Create a new mcp server record in the db
    N
created_by
updated_by)r   )r)   struuiduuid4r   r#   r$   create)r    r   rb   r   new_mcp_servers        r   create_mcp_serverrk      s}      ~~TZZ\* ).I )Il(Il(++BBII J  N 	s   A-A8/A60A8c                    K   t        |      }||d<   | j                  j                  j                  d|j                  i|       d{   }|S 7 w)z2
    Update a new mcp server record in the db
    re   r)   )r,   r   N)r   r#   r$   rF   r)   )r    r   rb   r   updated_mcp_servers        r   update_mcp_serverrn     sa      ).I )Il,//FFMMDNN+)  N    	s   AA	A
A)"rg   typingr   r   r   r   r   r   r	   litellm.proxy._typesr
   r   r   r   r   r   r   litellm.proxy.utilsr   rf   r   r(   r.   r3   r;   rA   rL   rT   rW   rY   r]   ra   rk   rn   r"   r   r   <module>rr      s    B B B   -
#%;;
<	#s(^D

	
 !
,/$% -5c]	
 ! (+	#Y4*-	#Y.!!
! 

 !!H%%03%	
'(%*,/	"	\ 	c 		,/$% ':HK.'=KNr   