
    =Ґi(                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z
ddlmZ ddlmZmZmZmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZ g d
Z G d dej:                        Zej>                   G d d             Z ej>                   G d d             Z! G d de      Z" G d de      Z# G d dej:                        Z$ G d deejJ                  d      Z&d%dZ'd&d'dZ(d(dZ)ejT                  rSejV                  e&e ge,f   Z-ej]                  d        G d d ej^                  d!"      Z0 G d# d$ej^                  d!"      Z1yy))z
PUBLIC API    )annotationsN)YoutubeDLCookieJar)IEContentProviderIEContentProviderErrorregister_preference_genericregister_provider_generic)_pot_providers_ptp_preferences)RequestResponse)traverse_obj)HTTPHeaderDict)
ExternalRequestFeaturePoTokenContextPoTokenProviderPoTokenProviderErrorPoTokenProviderRejectedRequestPoTokenRequestPoTokenResponseprovider_bug_report_messageregister_preferenceregister_providerc                      e Zd ZdZdZdZy)r   gvsplayersubsN)__name__
__module____qualname__GVSPLAYERSUBS     ^/var/www/descvideos/venv/lib/python3.12/site-packages/yt_dlp/extractor/youtube/pot/provider.pyr   r   '   s    
CFDr$   r   c                  Z   e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   d
Zded<   dZded<   dZ	ded<   dZ
ded<   dZded<   dZded<   d
Zded<    ej                  e      Zded<   dZded<    ej                  e      Zded<   dZded<   dZded<   dZded<   d
Zded<   d Zy) r   r   contextInnertubeContextinnertube_contextN
str | Noneinnertube_hostsession_index
player_urlFboolis_authenticatedvideo_webpageinternal_client_namevisitor_datadata_sync_idvideo_id_gvs_bind_to_video_id)default_factoryr   request_cookiejarrequest_proxyr   request_headerszfloat | Nonerequest_timeoutrequest_source_addressTrequest_verify_tlsbypass_cachec                    t        j                  | t        | j                        t	        j
                  | j                              S )N)r9   r)   )dataclassesreplacer   r9   copydeepcopyr)   )selfs    r%   rA   zPoTokenRequest.copyL   s8    ""*4+?+?@"mmD,B,BC
 	
r$   )r   r   r   __annotations__r+   r,   r-   r/   r0   r1   r2   r3   r4   r5   r?   fieldr   r7   r8   r   r9   r:   r;   r<   r=   rA   r#   r$   r%   r   r   -   s     ''!%NJ% $M:$!J
!"d" $M:$'+*+  $L*##L*#Hj"'4' ->K,=,=N`,a)a $M:$&7k&7&7&WO^W$(O\()-J-## L$
r$   r   c                  &    e Zd ZU ded<   dZded<   y)r   strpo_tokenNz
int | None
expires_at)r   r   r   rD   rI   r#   r$   r%   r   r   T   s    M!J
!r$   r   c                      e Zd ZdZy)r   z5Reject the PoTokenRequest (cannot handle the request)Nr   r   r   __doc__r#   r$   r%   r   r   Z   s    ?r$   r   c                      e Zd ZdZy)r   z+An error occurred while fetching a PO TokenNrK   r#   r$   r%   r   r   ^   s    5r$   r   c                     e Zd Z ej                         Z ej                         Z ej                         Z ej                         Z ej                         Z	 ej                         Z
 ej                         Z ej                         Zy)r   N)r   r   r   enumautoPROXY_SCHEME_HTTPPROXY_SCHEME_HTTPSPROXY_SCHEME_SOCKS4PROXY_SCHEME_SOCKS4APROXY_SCHEME_SOCKS5PROXY_SCHEME_SOCKS5HSOURCE_ADDRESSDISABLE_TLS_VERIFICATIONr#   r$   r%   r   r   b   sq    !		"#$))+$499;#$))+$499;TYY[N(tyy{r$   r   c                      e Zd ZU dZded<   dZded<   dZded<   ddZej                  d	        Z
dd
ZddZej                  dd       ZdddZy)r   r#   ztuple[PoTokenContext] | None_SUPPORTED_CONTEXTSztuple[str] | None_SUPPORTED_CLIENTSz$tuple[ExternalRequestFeature] | None$_SUPPORTED_EXTERNAL_REQUEST_FEATURESc           
        | j                         st        | j                   d      | j                  =|j                  | j                  vr%t        d|j                   d| j                         | j
                  _t        |j                  d      }|| j
                  vr;t        d| d| j                   ddj                  | j
                        xs d       | j                  |       y )	Nz is not availablezPO Token Context "z" is not supported by )client
clientNamezClient "z. Supported clients: , none)
is_availabler   PROVIDER_NAMErZ   r'   r[   r   r)   join4_PoTokenProvider__validate_external_request_features)rC   requestclient_names      r%   __validate_requestz"PoTokenProvider.__validate_request   s     "0D4F4F3GGX1YZZ $$0t'?'??0$W__$55KDL^L^K_`b b "".&))+CEK$"9"994{m+A$BTBTAU V**.))D4K4K*L*VPV)WYZ Z 	11':r$   c                0   t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  dj                         D ci c]  \  }}|| j                  xs g v r|| c}}S c c}}w )N)httphttpssocks4socks4asocks5socks5h)	r   rQ   rR   rS   rT   rU   rV   itemsr\   )rC   schemefeatures      r%   _supported_proxy_schemesz(PoTokenProvider._supported_proxy_schemes   s    
 /@@/BB0DD1FF0DD1FF$ eg
 4DDJK GO
 	
 
s   /Bc           
     P   | j                   y |j                  rt        j                  j	                  |j                        j
                  }|j                         | j                  vr;t        d| j                   d| ddj                  | j                        xs d       |j                  r5t        j                  | j                   vrt        d| j                   d      |j                  s6t        j                  | j                   vrt        d| j                   d      y y )NzExternal requests by "z(" provider do not support proxy scheme "z". Supported proxy schemes: r`   ra   z0" provider do not support setting source addressz;" provider do not support ignoring TLS certificate failures)r\   r8   urllibparseurlparserq   lowerrs   r   rc   rd   r;   r   rW   r<   rX   )rC   rf   rq   s      r%   $__validate_external_request_featuresz4PoTokenProvider.__validate_external_request_features   s0   44<  \\**7+@+@AHHF||~T%B%BB4,T-?-?,@ A--3H4Pyy!>!>?I6JLM M **&55T=f=ff0(););(< =8 9: :
 **&??tGpGpp0(););(< =C DE E q +r$   c                F    | j                  |       | j                  |      S )N)"_PoTokenProvider__validate_request_real_request_potrC   rf   s     r%   request_potzPoTokenProvider.request_pot   s!    (%%g..r$   c                     y)zTo be implemented by subclassesNr#   r}   s     r%   r|   z!PoTokenProvider._real_request_pot   s     	r$   Nc                   |j                         }|t        |j                  |j                        |_        |j                  xs |j
                  rd|j
                  ini |_        |j                  3|j                  j                  d|j                        |j                  d<   |dur(| j                  j                  |rt        |      nd       | j                  j                  j                  |      S )a  Make a request using the internal HTTP Client.
        Use this instead of calling requests, urllib3 or other HTTP client libraries directly!

        YouTube cookies will be automatically applied if this request is made to YouTube.

        @param request: The request to make
        @param pot_request: The PoTokenRequest to use. Request parameters will be merged from it.
        @param note: Custom log message to display when making the request. Set to `False` to disable logging.

        Tips:
        - Disable proxy (e.g. if calling local service): Request(..., proxies={'all': None})
        - Set request timeout:  Request(..., extensions={'timeout': 5.0})
        all	cookiejarFzRequesting webpage)rA   r   r9   headersproxiesr8   r7   
extensionsgetloggerinforG   ie_downloaderurlopen)rC   rf   pot_requestnotekwargsreqs         r%   _request_webpagez PoTokenProvider._request_webpage   s     lln
 "()D)DckkRCK++rP[PiPi5+2K2K*LoqCK,,8.1nn.@.@kNkNk.l{+uKK$SY4HIww""**3//r$   )rf   r   )rf   r   returnr   )NN)rf   r   r   zPoTokenRequest | Noner   r   )r   r   r   rZ   rD   r[   r\   r{   	functoolscached_propertyrs   re   r~   abcabstractmethodr|   r   r#   r$   r%   r   r   m   sw     9;5: -/). RT(*NS;, 
 
E8/ 	 0r$   r   PTP)suffixc                B    t        | t        t        j                        S )z Register a PoTokenProvider class)provider
base_classregistry)r   r   r	   value)r   s    r%   r   r      s    $"%% r$   c                    | j                   }|j                         }|r|j                  d      r|d   j                         |dd  z   }|r| d| S |S )N).!?r       )BUG_REPORT_MESSAGErstripendswithtitle)r   beforemsgs      r%   r   r      sX    

%
%C]]_FV___5!fllns12w& &fXQse/C/r$   c                 @    t        t        t        j                  g|  S )z+Register a preference for a PoTokenProvider)r   r   r
   r   )	providerss    r%   r   r      s%    & 
 r$   
Preferencec                  |    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   d	ed<   ded<   ded<   y)
ClientInfor*   hlgl
remoteHost
deviceMakedeviceModelvisitorData	userAgentrG   r_   clientVersionosName	osVersionNr   r   r   rD   r#   r$   r%   r   r     sA    r$   r   F)totalc                  ,    e Zd ZU ded<   ded<   ded<   y)r(   r   r^   dictrf   userNr   r#   r$   r%   r(   r(     s    
r$   r(   )r   type[PoTokenProvider]);)r   r   )r   r   r   z)typing.Callable[[Preference], Preference])2rL   
__future__r   r   rA   r?   rO   r   typingurllib.parseru   yt_dlp.cookiesr   &yt_dlp.extractor.youtube.pot._providerr   r   r   r   &yt_dlp.extractor.youtube.pot._registryr	   r
   yt_dlp.networkingr   r   yt_dlp.utilsr   yt_dlp.utils.networkingr   __all__Enumr   	dataclassr   r   r   r   r   ABCr   r   r   r   TYPE_CHECKINGCallableintr   append	TypedDictr   r(   r#   r$   r%   <module>r      sA    " 
       -  T / % 2TYY  #
 #
 #
L " " "
@%; @61 6+TYY +z0' z0z0 
/>!BC!GHJNN< V%%U 6++5 % r$   