+
    iK                        ^ RI t ^ RIt^ RIt^ RIHt ^ RIHtHtHt ^RI	H
t
 ]
! 4        ]P                  ! R4      t]P                  ! RR4      t]P                  ! RR	4      t]! ]P                  ! R
R4      4      t]! ]P                  ! RR4      4      tR R ltR R ltR R ltR R lt]R8X  d   ] P0                  ! ]! 4       4       R# R# )    N)Dict)ClientSession	WSMsgTypeweb)load_agent_runtime_dotenvzmcube.proxyMCUBE_WEBHOOK_UPSTREAMzhttp://127.0.0.1:8002MCUBE_WS_UPSTREAM_HOSTz	127.0.0.1MCUBE_WS_UPSTREAM_PORT9001MCUBE_PROXY_PORT8088c                X    V ^8  d   QhR\         P                  R\         P                  /#    requestreturnr   RequestStreamResponse)formats   "^E:\live-kit-agent\livekit_voicebot\backend\agent_runtime\src\mcube_integration\proxy_server.py__annotate__r      s$      s{{ s/A/A     c           
       "   \          V P                   2pV P                  4       G Rj  xL
 p/ pV P                  P	                  4        F   w  rEVP                  4       R9   d   K  WSV&   K"  	  \        4       ;_uu_4       GRj  xL
 pTP                  V P                  TTV'       d   TMRRR7      ;_uu_4       GRj  xL
 pVP                  4       G Rj  xL
 p\        P                  ! VP                  VR7      p	T	uuRRR4      GRj  xL
  uuRRR4      GRj  xL
  #  L L Lh LR L L  + GRj  xL 
 '       g   i     M; iRRR4      GRj  xL 
  R#   + GRj  xL 
 '       g   i     R# ; i5i)z~
Forward all HTTP requests to the webhook server upstream.
Used for: /webhooks/mcube, /api/mcube/outbound-call, /health, etc.
NF)headersdataallow_redirects)statusbody>   hostupgrade
connection)WEBHOOK_UPSTREAMrel_urlreadr   itemslowerr   r   methodr   Responser   )
r   upstream_urlr   r   kvsessionresp	resp_body
proxy_resps
   &         r   _proxy_httpr1      s)    
 '''89LD G%%'77999
	 ( '??NN4! # 
 
 
 "iik)I{{J 
 
 
    
 *
 
 
 
 
 s   (E=D%AE=D'E=	7E  D)E D1	D+'D1	 E D-
E E=D/ E='E=)E +D1	-E /E=1E
7D:8
E
E
E E=EE= E:	&E)'
E:	2E:	4	E=c                X    V ^8  d   QhR\         P                  R\         P                  /# r   r   )r   s   "r   r   r   6   s(     @ @S[[ @S-?-? @r   c           
       aa"   \         P                  ! 4       oSP                  V 4      G Rj  xL
  \        V P                  4      pR\
         R\         V 2p\        P                  RW4       \        4       ;_uu_4       GRj  xL
 pVP                  V4      ;_uu_4       GRj  xL
 oVV3R lpVV3R lp\        P                  ! V! 4       V! 4       RR7      G Rj  xL
  RRR4      GRj  xL
  RRR4      GRj  xL
  SP                  4       G Rj  xL
  S#  L L L{ LD L6  + GRj  xL 
 '       g   i     LM; i LD  + GRj  xL 
 '       g   i     L[; i LJ5i)	zq
Proxy WebSocket traffic from the public URL to the MCube WS bridge.
Expects paths like: /bid/websocket/{callId}
Nzws://:z$proxy ws connect path=%s upstream=%sc                    <"    S  R j  xL
  p V P                   \        P                  8X  d'    SP                  V P                  4      G R j  xL
  KO  V P                   \        P                  8X  d'    SP                  V P                  4      G R j  xL
  K  V P                   \        P                  8X  g   K  SP                  4       G R j  xL
    SP                  4       G R j  xL
  R #  L L  \
         d2       SP                  4       G R j  xL 
  R #   \
         d     R # i ; ii ; i L  \
         d2       SP                  4       G R j  xL 
  R #   \
         d     R # i ; ii ; i L L  \
         d     R # i ; iED~  SP                  4       G R j  xL 
  R #   \
         d     R # i ; i   SP                  4       G R j  xL 
  i   \
         d     i i ; i; i5iN
typer   TEXTsend_strr   	ExceptioncloseBINARY
send_bytesCLOSEmsg	ws_serverws_upstreams    r   to_upstream_proxy_ws.<locals>.to_upstreamE   s    %. # #c88y~~5'&1&:&:388&D D D !XX)9)99'&1&<&<SXX&F F F !XX8"-"3"3"555")//111%# !E#, ' &)//111$ '
 !G#, ' &)//111$ ' 6
 2$ ' &/")//111$ )//111$   G+F; F
C0F
!F; C4C2C4!F; 6D5D3D5F; <F; E4F; E8 )E6*E8 .G+0F
2C44D0?F; D DD G+D,(G++D,,G+/D00F; 3D55E1 F; E EE G+E-)G+,E--G+0E11F; 6E8 8FG+FG+
F; F) !F$"F) 'G+)F84G+7F88G+;G(=GGGG(G%"G($G%%G((G+c                    <"    S  R j  xL
  p V P                   \        P                  8X  d'    SP                  V P                  4      G R j  xL
  KO  V P                   \        P                  8X  d'    SP                  V P                  4      G R j  xL
  K  V P                   \        P                  8X  g   K  SP                  4       G R j  xL
    SP                  4       G R j  xL
  R #  L L  \
         d2       SP                  4       G R j  xL 
  R #   \
         d     R # i ; ii ; i L  \
         d2       SP                  4       G R j  xL 
  R #   \
         d     R # i ; ii ; i L L  \
         d     R # i ; iED~  SP                  4       G R j  xL 
  R #   \
         d     R # i ; i   SP                  4       G R j  xL 
  i   \
         d     i i ; i; i5ir6   r7   r@   s    r   	to_server_proxy_ws.<locals>.to_server]   s    %0 # #c88y~~5'&/&8&8&B B B !XX)9)99'&/&:&:388&D D D !XX8"+//"333"'oo///!# !C#, ' &'oo///$ ' !E#, ' &
'oo///$ ' 4 0$ # &1'oo///$ 'oo///$ rF   T)return_exceptions)r   WebSocketResponsepreparestrr$   WS_UPSTREAM_HOSTWS_UPSTREAM_PORTloginfor   
ws_connectasynciogatherr<   )r   r$   upstream_ws_urlr-   rD   rH   rB   rC   s   &     @@r   	_proxy_wsrV   6   s
    
 %%'I


G
$$$ '//"G./q1A0B7)LOHH3WN'%%o666+0, ..	tTTT_ 76 d //
u % 6^ U_ 7666 d s   *E&D AE&D"E&
E(D$)E,5D*	!D&"D*	&E1D(2E6E&EE&E$E&"E&$E&D*	(E*E0D31
E<E>EE&E!	E
E!	E!		E&c                8    V ^8  d   QhR\         P                  /# )r   r   )r   Application)r   s   "r   r   r   y   s      COO r   c                  ^   \         P                  ! 4       p V P                  P                  R R\        4       V P                  P                  R R\        4       V P                  P                  R R\        4       V P                  P                  R R\        4       R
 FK  pV P                  P                  RV R2\
        4       V P                  P                  RV R2\
        4       KM  	  V P                  P                  RR\
        4       V P                  P                  RR	\
        4       V # )*z/webhooks/mcubez/webhooks/{tail:.*}z/api/mcube/outbound-callz/api/mcube/{tail:.*}GETz
/{call_id}z/{call_id}/{tail:.*}z"/{business_id}/websocket/{call_id}z,/{business_id}/websocket/{call_id}/{tail:.*})z/bid/websocketz/ws)r   rX   router	add_router1   rV   )appprefixs     r   
create_appr`   y   s    
//
CJJ/=JJ3[AJJ8+FJJ4kB ,

Uvhl$;YG

Uvh.F$GS , JJ DiPJJ NPYZJr   c                    V ^8  d   QhRR/# )r   r   N )r   s   "r   r   r      s     
! 
!D 
!r   c                    "   \         P                  ! \         P                  R 7       \        4       p \        P
                  ! V 4      pVP                  4       G Rj  xL
  \        P                  ! VR\        R7      pVP                  4       G Rj  xL
  \        P                  R\        4       \        P                  ! 4       P                  4       G Rj  xL
  R#  L LM L
5i))levelNz0.0.0.0)r    portzmcube proxy listening on :%s)loggingbasicConfigINFOr`   r   	AppRunnersetupTCPSite
PROXY_PORTstartrP   rQ   rS   Eventwait)r^   runnersites      r   mainrr      s     gll+
,C]]3F
,,.;;vIJ?D
**,HH+Z8 --/


     !s7   AC"C4C"CAC"C C"C" C"__main__)rS   rf   ostypingr   aiohttpr   r   r   env_loadr   	getLoggerrP   getenvr#   rN   intrO   rl   r1   rV   r`   rr   __name__runrb   r   r   <module>r}      s      	  1 1 /  &9957NO 995{C ryy!96BC  -v67
@@F*
! zKK r   