Ë
    µŒjÛ"  ã                   ór   — d dl Z d dlZd dlZd dlZd dlmZmZmZmZ d dl	Z	d dl
mZ d dlmZ  G d„ de«      Zy)é    N)ÚIteratorÚListÚLiteralÚOptional)ÚDocument)Ú
BaseLoaderc                   ó„   — e Zd ZdZdddddddœdeded   d	ed
ededeee      dedee	   fd„Z
dee   fd„Zdee   fd„Zy)ÚMintbaseDocumentLoadera–  Load elements from a blockchain smart contract.

    The supported blockchains are: Near mainnet, Near testnet.

    If no BlockchainType is specified, the default is Near mainnet.

    The Loader uses the Mintbase API to interact with the blockchain.
    MB_API_KEY environment variable must be set to use this loader.

    The API returns 100 NFTs per request and can be paginated using the
    startToken parameter.

    If get_all_tokens is set to True, the loader will get all tokens
    on the contract.  Note that for contracts with a large number of tokens,
    this may take a long time (e.g. 10k tokens is 100 requests).
    Default value is false for this reason.

    The max_execution_time (sec) can be set to limit the execution time
    of the loader.

    Future versions of this loader can:
        - Support additional Mintbase APIs (e.g. getTokens, etc.)

    Example:
        .. code-block:: python

            contractAddress = "nft.yearofchef.near"  # Year of chef contract address
            blockchainLoader = MintbaseDocumentLoader(
                contract_address=contractAddress, blockchain_type="mainnet",api_key="omni-site"
            )
    Ú NF)Úapi_keyÚtableÚselectÚfieldsÚget_all_tokensÚmax_execution_timeÚcontract_addressÚblockchain_type)ÚmainnetÚtestnetr   r   r   r   r   r   c                ó`  — || _         || _        t        j                  j	                  d«      xs || _        d| _        d| _        |xs g d¢| _        || _	        || _
        | j
                  st        d«      ‚t        j                  d| j                   «      st        d| j                   › �«      ‚y)	aÏ  

        Args:
            contract_address: The address of the smart contract.
            blockchainType: The blockchain type.
            api_key: The Mintbase API key.
            table: name of the table to query
            select: Conditions for querying
            fields: Information to display after query
            get_all_tokens: Whether to get all tokens on the contract.
            max_execution_time: The maximum execution time (sec).
        Ú
MB_API_KEYÚmb_views_nft_tokensz3where: {nft_contract_id: {_eq: "contract_address"}})'Úbase_uriÚburned_receipt_idÚburned_timestampÚcopiesÚdescriptionÚ
expires_atÚextraÚ	issued_atÚlast_transfer_receipt_idÚlast_transfer_timestampÚmediaÚ
media_hashÚmetadata_content_flagÚmetadata_idÚ	mint_memoÚminted_receipt_idÚminted_timestampÚminterÚnft_contract_content_flagÚnft_contract_created_atÚnft_contract_iconÚnft_contract_idÚnft_contract_is_mintbaseÚnft_contract_nameÚnft_contract_owner_idÚnft_contract_referenceÚnft_contract_specÚnft_contract_symbolÚownerÚ	referenceÚreference_blobÚreference_hashÚ	royaltiesÚroyalties_percentÚsplitsÚ	starts_atÚtitleÚtoken_idÚ
updated_atzMintbase API key not provided.z7^(([a-z\d]+[\-_])*[a-z\d]+\.)*([a-z\d]+[\-_])*[a-z\d]+$zInvalid contract address N)r   ÚblockchainTypeÚosÚenvironÚgetr   r   r   r   r   r   Ú
ValueErrorÚreÚmatch)	Úselfr   r   r   r   r   r   r   r   s	            úw/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/document_loaders/mintbase.pyÚ__init__zMintbaseDocumentLoader.__init__.   s«   € ð0 !1ˆÔØ-ˆÔÜ—z‘z—~‘~ lÓ3Ò>°wˆŒØ*ˆŒ
ØKˆŒØò (
ò (!
ˆŒðT -ˆÔØ"4ˆÔà�|Š|ÜÐ=Ó>Ð>ä�x‰xØFØ×!Ñ!ô
ô Ð8¸×9NÑ9NÐ8OÐPÓQÐQð	
ó    Úreturnc                 ó¶  — g }t        j                   «       }	 d}|j                  d| j                  «      }|j                  d| j                  «      }|j                  d| j                  «      }|j                  ddj                  | j                  «      «      }| j                  ddœ}|i d	d
œ}d| j                  › �}t        j                  ||t        j                  |«      ¬«      }|j                  dk7  rt        d|j                  › �«      ‚|j                  «       d   d   }|sn—|D ]H  }	t        |	«      }
|	d   }| j                  | j                  |dœ}|j!                  t#        |
|¬«      «       ŒJ | j$                  sn=| j&                  �/t        j                   «       |z
  | j&                  kD  rt)        d«      ‚�Œ§|st        d| j                  › �«      ‚|S )Núx
            query MyQuery {
            table(select) {
                fields
            }
            }
            r   r   r   r   Ú
úapplication/json©z
mb-api-keyzContent-TypeÚMyQuery©ÚqueryÚ	variablesÚoperationNameúhttps://graph.mintbase.xyz/©ÚheadersÚdataéÈ   ú Request failed with status code rY   r   r>   ©ÚsourceÚ
blockchainÚtokenId©Úpage_contentÚmetadataú/Execution time exceeded the allowed time limit.z#No NFTs found for contract address )ÚtimeÚreplacer   r   r   Újoinr   r   r@   ÚrequestsÚpostÚjsonÚdumpsÚstatus_coderD   ÚstrÚappendr   r   r   ÚRuntimeError)rG   ÚresultÚ
start_timeÚoperations_docrX   rY   ÚurlÚresponseÚitemsÚitemÚcontentr>   rb   s                rH   ÚloadzMintbaseDocumentLoader.load�   sã  € Øˆä—Y‘Y“[ˆ
àðˆNð ,×3Ñ3°H¸d¿k¹kÓJˆNØ+×3Ñ3Ø" D×$9Ñ$9óˆNð ,×3Ñ3°G¸T¿Z¹ZÓHˆNØ+×3Ñ3°H¸d¿i¹iÈÏÉÓ>TÓUˆNð &*§\¡\ÐCUÑVˆGð (ØØ!*ñˆDð 0°×0CÑ0CÐ/DÐEˆCä—}‘} S°'ÄÇ
Á
È4Ó@PÔQˆHà×#Ñ# sÒ*Ü Ø6°x×7KÑ7KÐ6LÐMóð ð —M‘M“O FÑ+Ð,AÑBˆEáØã�Ü˜d›)�Ø 
Ñ+�à"×3Ñ3Ø"&×"5Ñ"5Ø'ñ�ð
 —‘œh°GÀhÔOÕPð ð ×&Ò&Øð ×'Ñ'Ð3Ü—Y‘Y“[ :Ñ-°×1HÑ1HÒHä"Ð#TÓUÐUñw ñz ÜØ5°d×6KÑ6KÐ5LÐMóð ð ˆrJ   c              #   óh  K  — t        j                   «       }	 d}|j                  d| j                  «      }|j                  d| j                  «      }|j                  d| j                  «      }|j                  ddj                  | j                  «      «      }| j                  ddœ}|i d	d
œ}d| j                  › �}t        j                  ||t        j                  |«      ¬«      }|j                  dk7  rt        d|j                  › �«      ‚|j                  «       d   d   }|sy |D ];  }t        |«      }	|d   }
| j                  | j                  |
dœ}t!        |	|¬«      –— Œ= | j"                  sy | j$                  �/t        j                   «       |z
  | j$                  kD  rt'        d«      ‚�Œš­w)NrM   r   r   r   r   rN   rO   rP   rQ   rR   rV   rW   rZ   r[   rY   r   r>   r\   r`   rc   )rd   re   r   r   r   rf   r   r   r@   rg   rh   ri   rj   rk   rD   rl   r   r   r   rn   )rG   rp   rq   rX   rY   rr   rs   rt   ru   rv   r_   rb   s               rH   Ú	lazy_loadz MintbaseDocumentLoader.lazy_loadÊ   s±  è ø€ Ü—Y‘Y“[ˆ
àðˆNð ,×3Ñ3°H¸d¿k¹kÓJˆNØ+×3Ñ3Ø" D×$9Ñ$9óˆNð ,×3Ñ3°G¸T¿Z¹ZÓHˆNØ+×3Ñ3°H¸d¿i¹iÈÏÉÓ>TÓUˆNð &*§\¡\ÐCUÑVˆGð (ØØ!*ñˆDð 0°×0CÑ0CÐ/DÐEˆCä—}‘} S°'ÄÇ
Á
È4Ó@PÔQˆHà×#Ñ# sÒ*Ü Ø6°x×7KÑ7KÐ6LÐMóð ð —M‘M“O FÑ+Ð,AÑBˆEáØã�Ü˜d›)�Ø˜zÑ*�à"×3Ñ3Ø"&×"5Ñ"5Ø&ñ�ô
 ¨G¸hÔGÓGð ð ×&Ò&Øð ×'Ñ'Ð3Ü—Y‘Y“[ :Ñ-°×1HÑ1HÒHä"Ð#TÓUÐUñw ùs   ‚F0F2)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rl   r   r   r   ÚboolÚintrI   r   rw   r   ry   © rJ   rH   r
   r
      s»   „ ñðJ ØØØ&*Ø$Ø,0òQRàðQRð !Ð!5Ñ6ð	QRð
 ðQRð ðQRð ðQRð ˜˜c™Ñ#ðQRð ðQRð % S™MóQRðfG�d˜8‘nó GðR>V˜8 HÑ-ô >VrJ   r
   )ri   rA   rE   rd   Útypingr   r   r   r   rg   Úlangchain_core.documentsr   Ú)langchain_community.document_loaders.baser   r
   r€   rJ   rH   Ú<module>r„      s0   ðÛ Û 	Û 	Û ß 4Ó 4ã Ý -å @ô{V˜Zõ {VrJ   