
    j	                     @    d Z ddlZddlmZ ddlmZ dedededdfd	Zy)
z4Shared IG auth helper. Resilient to gql rate-limits.    N)Path)Clientclsession_path
session_idreturnc                 X   |j                         r#	 | j                  |       | j                          y	 | j	                  |       | j                  |       y# t        $ r Y /w xY w# t        $ r7}t        |      j                  dz   t        |      dd z   t        fddD              }|s t        j                  d|      }|st        d      |t        t        |j                  d                  }| j                  d	|i       	 | j                   j"                  j%                  d
|d       n# t        $ r Y nw xY w	 | j                         }	 t'        |dd      | _        n# t        $ r Y nw xY wn# t        $ r
 || _        Y nw xY w| j                  |       Y d}~yd}~ww xY w)a  Login that survives IG gql/web rate-limits.

    Strategy:
    1. Try to restore from cached settings file. Verify with a private-API call.
       This path skips the gql verify call entirely, so it survives rate limits.
    2. If cache is missing or stale, fresh login_by_sessionid. On success, dump
       settings so next run hits the cache path.
    3. If login_by_sessionid hits a gql rate-limit, recover: cookies are set,
       just manually populate user_id from sessionid + verify via private API.
    Nz:    c              3   &   K   | ]  }|v  
 y w)N ).0keywordmsgs     +/Users/daichi/keith-dm-scanner/_auth_lib.py	<genexpr>zsafe_login.<locals>.<genexpr>$   s      
 sN
s   )TooManyRedirectsGraphql
BadRequestfb_dtsgClientErrorzsomething went wrongz^(\d+)z(could not extract user_id from sessionid   user_id	sessionidz.instagram.com)domainusername)existsload_settingsaccount_info	Exceptionlogin_by_sessioniddump_settingstype__name__stranyresearchRuntimeErrorintgroupset_settingsprivatecookiessetgetattrr   )	r   r   r   egql_failuremuidinfor   s	           @r   
safe_loginr5      s    	\*OO
#'
j)
&  		  '1g%At4 
C
 

  IIi,IJPQQ#aggaj/"
C()	JJ"";
CS"T 			??$D%dJ=  	BK	 	&&?'s   !A "A( 	A%$A%(
F)2BF$(D43F$4	E =F$?E  F$E8E('E8(	E41E83E44E87F$8FF$
FF$$F))__doc__r&   pathlibr   
instagrapir   r$   r5   r       r   <module>r:      s2    : 	  8'6 8' 8'3 8'4 8'r9   