o
    +j,                     @   s   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 ddl	m
Z
 d dlmZ d dlmZmZ d dlmZ G d	d
 d
ZG dd deZdS )    N)OptionalDict   )core)normalizeProxy)requests)	urlencodequote)BeautifulSoupc                   @   s2  e Zd ZU ddddddddd	d
dddddddddZeeeeef f ed< d3dedededdfddZdededej	fddZ
d4dee ded ed!edee f
d"d#Zdedee fd$d%Zded&edej	fd'd(Zdedefd)d*Zdefd+d,Zdee fd-d.Zdee fd/d0Zdefd1d2ZdS )5AccountBuildermainZUSDzlc-mainen_US
amazon.com)codecurrencylclc_valuedomainZacbcaZCADzlc-acbcaen_CAz	amazon.caZacbmxZMXNzlc-acbmxes_MXzamazon.com.mxUSZCAZMXCOUNTRY_MAPNcookiecountryproxyreturnc                 C   s   t |}|r||dnd | _|r6| | jv r6| j|  }| | _|d | _|| _| ||d | _d S | 	|}|| _
|d | _|d | _|d | _| | j| j| _d S )N)ZhttpZhttpsr   r   country_code)r   
proxy_dictupperr   countryCoder   r   '_AccountBuilder__buildSessionForCountrysessionbuildCookieDataZcookieNonBuildcreateCookieJarFromString)selfr   r   r   ZpxtargetZcookieBuilded r'   amazon/metadata.py__init__   s   





zAccountBuilder.__init__target_domainc                 C   s   t jttj| jd}|dD ]+}d|vrqtt	j
|dd\}}|jj|||dd |dkr<|jj||ddd qd|_|jd	d
i |S )zHBuild session with cookies set on both amazon.com and the target domain.ZimpersonateZproxies;=r   /r   pathr   T
Connection
keep-alivecurlSessionrandomchoicer   ZIMPERSONATE_BROWSERSr   splitmapstrstripZcookiessetZallow_redirectsheadersupdate)r%   r   r*   r"   pairnamevaluer'   r'   r(   Z__buildSessionForCountry   s   z'AccountBuilder.__buildSessionForCountryr   haystackstartendindexc                 C   s<   |d u rd S z| ||  |d W S  ty   Y d S w )Nr   )r8   	Exception)r%   rB   rC   rD   rE   r'   r'   r(   extractBetween-   s   zAccountBuilder.extractBetweenc                 C   s&   t d|t j}|r|d S d S )Nz\b(main|acb[a-z]{2})\br   )researchIgrouplower)r%   r   mr'   r'   r(   extractRegionCode5   s   z AccountBuilder.extractRegionCoder   c                 C   sx   t jttj| jd}|dD ]}d|vrqtt	j
|dd\}}|jj|||dd qd|_|jdd	i |S )
Nr+   r,   r-   r   r.   r/   Tr1   r2   r3   )r%   r   r   r"   r?   r@   rA   r'   r'   r(   r$   9   s   z(AccountBuilder.createCookieJarFromStringc           
         sh  |  | }|sdddS dd | j D }||vr%dd| ddS ||  dd	 | j D d
hB }g }|dD ]\}| }|sFq=d|vrP|| q=|dd\}}| }t|tddD ]}	|d|	 r||d t|	   d  } nqc|dkr d }| d kr d }|| d|  q=d	|}d| d t
 fdd| j D dS )NFz Region code not found in cookie.statusmessagec                 S   s   i | ]}|d  |qS r   r'   .0vr'   r'   r(   
<dictcomp>H   s    z2AccountBuilder.buildCookieData.<locals>.<dictcomp>zUnsupported region code: .c                 S   s   h | ]}|d  qS rR   r'   rS   r'   r'   r(   	<setcomp>L   s    z1AccountBuilder.buildCookieData.<locals>.<setcomp>Zacbucr,   r-   r   T)keyreverse-r   z
i18n-prefsr   r   r   z; r   c                 3   s     | ]\}}| kr|V  qd S )Nr'   )rT   krU   r   r'   r(   	<genexpr>e   s    z1AccountBuilder.buildCookieData.<locals>.<genexpr>)rP   r   r   r   )rN   r;   r   valuesr8   appendsortedlenendswithjoinnextitems)
r%   r   Zregion_codeZcountry_mapZ	all_codespartsr?   r@   rA   r   r'   r]   r(   r#   D   sD   


zAccountBuilder.buildCookieDatac              
   C   s|  ddddddddddddddddddddddddd}| | j |d	 }d
| j d| j dddd}z| jj d| j d|dd}|j}W n
 tyV   Y dS w | |dd}| |ddd}| |dd}| |dd}	| |dd}
| |dd}| |dd}|s|sdS ddd| j d| j dd d!d"d#d$}i d%|pd&d'd&d(|d) d*|d+ d,|d- d.|d/ d0|d1 d2|d3 d4| d5d&d6|d7 d8|	pd&d9d:d;d<d=d<d>d?d@d<dAdB|
pd&|pd&|pd&|pd&|pd&dC}| jjd| j dD||dEdF}|| _	| |jdGdp+| |jdGdp+| |jdHd}|r4|| _
dIS |  | _
|jdJkS )KNZAFz
Ahmad WaliZ
0700123456zStreet 1 Wazir Akbar KhanZKabulZ1001)r    fullNamephoneline1citystate
postalCoder   r   zwww.https://www.z/a/addresses?ref_=ya_d_c_addroMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36Z1536)ZhostZrefererz
user-agentzviewport-widthz//a/addresses/add?ref=ya_address_book_add_button   )Zurlr=   timeoutFz6name="address-ui-widgets-form-load-start-time" value=""z=AddView&hostPageRID=&r   z9type="hidden" name="address-ui-widgets-csrfToken" value="zQtype="hidden" name="address-ui-widgets-previous-address-form-state-token" value="z"customerID":"z?name="address-ui-widgets-address-wizard-interaction-id" value="z&type='hidden' name='csrfToken' value=''z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.81ZdocumentZnavigatezsame-origin)
User-AgentZAcceptZOriginZRefererzUpgrade-Insecure-RequestszSec-Fetch-DestzSec-Fetch-ModezSec-Fetch-SiteZ	csrfToken Z	addressIDzaddress-ui-widgets-countryCoder    z'address-ui-widgets-enterAddressFullNamerh   z$address-ui-widgets-enterAddressLine1rj   z)address-ui-widgets-enterAddressPostalCoderm   z,address-ui-widgets-enterAddressStateOrRegionrl   z#address-ui-widgets-enterAddressCityrk   z/address-ui-widgets-enterAddressDistrictOrCountyZdistrictz*address-ui-widgets-enterAddressPhoneNumberri   z4address-ui-widgets-previous-address-form-state-tokenz(address-ui-widgets-addressFormButtonTextZsavez)address-ui-widgets-addressFormHideHeadingtruez'address-ui-widgets-enableAddressDetailsz(address-ui-widgets-returnLegacyAddressIDZfalsez-address-ui-widgets-enableDeliveryInstructionszaddress-ui-widgets-clientNameZYourAccountAddressBook)z(address-ui-widgets-obfuscated-customerIdzaddress-ui-widgets-csrfTokenz'address-ui-widgets-form-load-start-timez1address-ui-widgets-clickstream-related-request-idz0address-ui-widgets-address-wizard-interaction-idz-/a/addresses/add?ref=ya_address_book_add_post   )r=   datarq   
addressId="addressId":"T   )getr    r   r   r"   textrF   rG   ZpostcountryData
_addressId%_AccountBuilder__getAddressIdFromBookZstatus_code)r%   ZCOUNTRY_DATArz   Zheaders1ZreqZrequest1Z
start_timeZ
request_idZ
csrf_tokenZaddress_jwtZcustomer_idZinteraction_idZcsrf_token_addressZheaders3Zpayload3respaddr_idr'   r'   r(   addBillingAddressh   s   



	


z AccountBuilder.addBillingAddressc                 C   s   zBddi}| j jd| j d|dd}| |jdd}|r |W S | |jd	d
}|r-|W S | |jdd
}|r:|W S | |jddW S  tyL   Y d S w )Nrv   ro   rn   z/a/addressesrp   )r=   rq   zdata-addressid="rr   r{   rs   z
addressID=r|   )r"   r~   r   rG   r   rF   )r%   r=   r   r   r'   r'   r(   Z__getAddressIdFromBook   s    z%AccountBuilder.__getAddressIdFromBookc                 C   s   t | dr| jr| jS |  S )Nr   )hasattrr   r   )r%   r'   r'   r(   getBillingAddressId   s   z"AccountBuilder.getBillingAddressIdc                 C   sH   |   }|sdddS |  }|s|  }|rdd| j|dS dddS )NFzFailed Adding Billing AddressrO   TzBilling Address Added)rP   rQ   rz   	addressId)r   r   r   )r%   Zaddedr   r'   r'   r(   handleBillingAddress   s   

z#AccountBuilder.handleBillingAddress)NN)r   )__name__
__module____qualname__r   r   r:   __annotations__r)   r4   r5   r!   r   intrG   rN   r$   dictr#   boolr   r   r   r   r'   r'   r'   r(   r   
   s   
 H($Yr   c                   @   s   e Zd ZdS )AmazonRegisterErrorN)r   r   r   r'   r'   r'   r(   r      s    r   )r6   rH   stringZjsontypingr   r   rw   r   Zhelpersr   Z	curl_cffir   r4   Zurllib.parser   r	   Zbs4r
   r   rF   r   r'   r'   r'   r(   <module>   s      Z