o
    i                     @  s  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mZm	Z	 ddl
mZmZmZmZ ddlmZ g dZG dd	 d	ejZejd
dG dd dZejd
dG dd dZejd
dG dd dZejd
dG dd dZejd
dG dd dZejG dd dZejG dd dZG dd deZG dd deZG dd deejd d!Zd,d$d%Z d-d)d*Z!ej"rej#ee$e ge%f Z&e'd+ dS dS ).z
PUBLIC API    )annotationsN)_jsc_preferences_jsc_providers)IEContentProviderIEContentProviderErrorregister_preference_genericregister_provider_generic)ExtractorError)JsChallengeProviderJsChallengeProviderError"JsChallengeProviderRejectedRequestJsChallengeProviderResponseJsChallengeRequestJsChallengeResponseJsChallengeTypeNChallengeInputNChallengeOutputSigChallengeInputSigChallengeOutputregister_preferenceregister_providerc                   @  s   e Zd ZdZdZdS )r   nsigN)__name__
__module____qualname__NSIG r   r   Y/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/youtube/jsc/provider.pyr   $   s    r   T)frozenc                   @  s*   e Zd ZU ded< ded< dZded< dS )r   r   typez#NChallengeInput | SigChallengeInputinputNz
str | Nonevideo_id)r   r   r   __annotations__r#   r   r   r   r   r   )   s   
 r   c                   @  *   e Zd ZU ded< ejedZded< dS )r   str
player_urldefault_factory	list[str]
challengesNr   r   r   r$   dataclassesfieldlistr+   r   r   r   r   r   0      
 r   c                   @  r%   )r   r&   r'   r(   r*   r+   Nr,   r   r   r   r   r   6   r0   r   c                   @  "   e Zd ZU ejedZded< dS )r   r(   dict[str, str]resultsNr   r   r   r-   r.   dictr3   r$   r   r   r   r   r   <      
 r   c                   @  r1   )r   r(   r2   r3   Nr4   r   r   r   r   r   A   r6   r   c                   @  s.   e Zd ZU ded< dZded< dZded< dS )r   r   requestNzJsChallengeResponse | NoneresponsezException | Noneerror)r   r   r   r$   r8   r9   r   r   r   r   r   F   s   
 r   c                   @  s   e Zd ZU ded< ded< dS )r   r   r!   z%NChallengeOutput | SigChallengeOutputoutputN)r   r   r   r$   r   r   r   r   r   M   s   
 r   c                      s*   e Zd ZdZd	ddd
 fddZ  ZS )r   z9Reject the JsChallengeRequest (cannot handle the request)NF)_skipped_componentsexpectedboolc                  s   t  || || _d S )N)super__init__r;   )selfmsgr<   r;   	__class__r   r   r?   V   s   
z+JsChallengeProviderRejectedRequest.__init__)NF)r<   r=   )r   r   r   __doc__r?   __classcell__r   r   rB   r   r   S   s    r   c                   @  s   e Zd ZdZdS )r   z-An error occurred while solving the challengeN)r   r   r   rD   r   r   r   r   r   [   s    r   c                   @  sF   e Zd ZU dZded< dddZdddZejdddZ	dd Z
dS )r
   r   ztuple[JsChallengeType] | None_SUPPORTED_TYPESr7   r   c                 C  sN   |   st| j d| jd ur#|j| jvr%td|j d| j d S d S )Nz is not availablezJS Challenge type "z" is not supported by )is_availabler   PROVIDER_NAMErF   r!   )r@   r7   r   r   r   __validate_requestd   s   
z&JsChallengeProvider.__validate_requestrequestslist[JsChallengeRequest]return9typing.Generator[JsChallengeProviderResponse, None, None]c                 c  sn    g }|D ]'}z|  | || W q ty, } zt||dV  W Y d}~qd}~ww | |E dH  dS )z3Solve multiple JS challenges and return the results)r7   r9   N)&_JsChallengeProvider__validate_requestappendr   r   _real_bulk_solve)r@   rJ   validated_requestsr7   er   r   r   
bulk_solvep   s   
zJsChallengeProvider.bulk_solvec                 C  s   t | j d)z:Subclasses can override this method to handle bulk solvingz  does not implement bulk solving)NotImplementedErrorrH   )r@   rJ   r   r   r   rP   |   s   z$JsChallengeProvider._real_bulk_solvec              
   C  s>   z
| j j||ddW S  ty } ztd| |d }~ww )NT)r#   r'   fatalz(Failed to load player for JS challenge: )ie_load_playerr	   r   )r@   r#   r'   rR   r   r   r   _get_player   s   zJsChallengeProvider._get_playerN)r7   r   )rJ   rK   rL   rM   )r   r   r   rF   r$   rN   rS   abcabstractmethodrP   rX   r   r   r   r   r
   _   s   
 

r
   JCP)suffixprovidertype[JsChallengeProvider]c                 C  s   t | ttjdS )z$Register a JsChallengeProvider class)r]   
base_classregistry)r   r
   r   value)r]   r   r   r   r      s
   r   	providersrL   )typing.Callable[[Preference], Preference]c                  G  s   t ttjg| R  S )z6Register a preference for a JsChallengeProvider class.)r   r
   r   ra   )rb   r   r   r   r      s   r   
Preference)r]   r^   )rb   r^   rL   rc   )(rD   
__future__r   rY   r-   enumtyping&yt_dlp.extractor.youtube.jsc._registryr   r   &yt_dlp.extractor.youtube.pot._providerr   r   r   r   yt_dlp.utilsr	   __all__Enumr   	dataclassr   r   r   r   r   r   r   r   r   ABCr
   r   r   TYPE_CHECKINGCallabler/   intrd   rO   r   r   r   r   <module>   sD    





.
		