Skip to main content
Glama

ONEDeFi MCP Server

by JMadhan1
validation.cpython-311.pyc14.1 kB
� �e�h�*����ddlZddlZddlmZddlmZmZeje��Z d�Z dd�Z d�Z d�Z d�Zd �Zdd �Zd �Zdd �Zdd �Zdd�Zdd�ZGd�de��Zd�Zd�ZdS)�N��wraps)�request�jsonifyc��|sdS|�d��sdSt|��dkrdS|dd�}tjd|��sdSdS)zValidate API key formatF�aya_�$�Nz^[A-Za-z0-9_-]+$T)� startswith�len�re�match)�api_key�key_parts �*/home/runner/workspace/utils/validation.py�validate_api_keyrsp�� ���u� � � �f� %� %���u� �7�|�|�b����u��q�r�r�{�H� �8�'�� 2� 2���u� �4�c��|rt|t��sdS|rL|���dvrt|��S|���dkrt |��St|��rdSt |��rdSdS)z"Validate blockchain address formatF��ethereum�polygon�solanaT)� isinstance�str�lower�validate_ethereum_address�validate_solana_address)�address� blockchains r�validate_addressr s��� ��*�W�c�2�2���u��4� � � � � �!8� 8� 8�,�W�5�5� 5� � � � � �8� +� +�*�7�3�3� 3�!��)�)���t� �� )� )���t� �5rc��|�d��sdSt|��dkrdS t|dd�d��dS#t$rYdSwxYw)zValidate Ethereum-style address�0xF�*�N�T)r r �int� ValueError)rs rrr.sw�� � � �d� #� #���u� �7�|�|�r����u�� �G�A�B�B�K������t�� �����u�u����s�A� A�Ac�~�ddl} |�|��}t|��dkS#t$rYdSwxYw)zValidate Solana addressrN� F)�base58� b58decoder � Exception)rr*�decodeds rrr=sV���M�M�M���"�"�7�+�+���7�|�|�r�!�!�� �����u�u����s �'.� <�<c��|sdS t|��}|dkrdSdt|��vr5tt|���d��d��nd}|dkrdSdS#tt f$rYdSwxYw)zValidate amount formatFr�.������T)�floatrr �splitr'� TypeError)�amount� float_amount�decimal_placess r�validate_amountr8Hs��� ���u���V�}�}� � �1� � ��5�=@�3�v�;�;�<N�<N��S��[�[�.�.�s�3�3�B�7�8�8�8�TU�� �B� � ��5��t�� � � "�����u�u����s�A/�AA/�/B�Bc�:�gd�}|o|���|vS)zValidate blockchain name�rrr)r)r�supported_blockchainss r�validate_blockchainr<_s+��=�=�=�� � E�*�*�*�,�,�0E�E�Erc�B�gd�gd�gd�d�}|sdS|r>|�|���g��}|���|vSt��}|���D]}|�|���|���|vS)zValidate protocol name)�uniswap� sushiswap�aave�compound)� quickswapr?r@)�raydium�orca�serumr:F)�getr�set�values�update)�protocolr�supported_protocols�blockchain_protocols� all_protocols� protocolss r�validate_protocolrOds���A�@�@�5�5�5�.�.�.���� ���u��8�2�6�6�z�7G�7G�7I�7I�2�N�N���~�~���#7�7�7��E�E�M�(�/�/�1�1�(�(� ����Y�'�'�'�'� �>�>� � �}� ,�,rc�z�|�dS t|��}d|cxkodkncS#ttf$rYdSwxYw)zValidate slippage percentageNTr�2F)r2r'r4)�slippage�slippage_floats r�validate_slippagerTzsf�����t���x�����N�(�(�(�(�b�(�(�(�(�(�� � � "�����u�u����s �%�:�:c��|rt|t��sdS|r�|���dvrI|�d��o3t |��dko t d�|dd�D����S|���dkr> d dl}|�|��}t |��d kS#t$rYdSwxYw|�d��r4t |��dkr!t d �|dd�D����S d dl}|�|��}t |��d kS#t$rYdSwxYw) z Validate transaction hash formatFrr"�Bc3�K�|]}|dvV�� dS��0123456789abcdefABCDEFN���.0�cs r� <genexpr>z,validate_transaction_hash.<locals>.<genexpr>�s(����J�J��q�4�4�J�J�J�J�J�Jrr$Nrr�@c3�K�|]}|dvV�� dSrXrZr[s rr^z,validate_transaction_hash.<locals>.<genexpr>�s(����F�F�Q�1�0�0�F�F�F�F�F�Fr) rrrr r �allr*r+r,)�tx_hashrr*r-s r�validate_transaction_hashrc�s��� ��*�W�c�2�2���u�� � � � � � �!8� 8� 8��&�&�t�,�,�K��w�<�<�2�%�K��J�J�g�a�b�b�k�J�J�J�J�J� L�� � � � �8� +� +� �� � � � �*�*�7�3�3���7�|�|�r�)�)��� � � ��u�u� �������$���G�C��L�L�B�$6�$6��F�F�'�!�"�"�+�F�F�F�F�F�F��� � � ��"�"�7�+�+���7�|�|�r�!�!�� �����u�u����s$�+C� C� C�+E� E�Ec����fd�}|S)z'Decorator to validate JSON request datac�@���t�����fd���}|S)Nc�"��tjstddi��dfStj��}|stddi��dfS� r6g}� D]}||vr|�|���|rtd|d���dfSg}d|vr@|�d��}t |d|��s|�d ��d|vr*t|d��s|�d ��d |vr@|�d��}t|d |��s|�d ��gd �}|D]4}||vr.t||��s|�d|�d����5gd�}|D]J}||vrD|�d��}t |||��s|�d|�d����Kd|vr*t|d��s|�d��|rtd|d���dfS� |i|��S)N�errorzRequest must be JSONi�zInvalid JSON datazMissing required fields)rg�missing_fields�wallet_addressrzInvalid wallet address format�Unsupported blockchainrJz(Unsupported protocol for this blockchain)r5� amount_in�amount_a�amount_bzInvalid z format)�token�token_in� token_out�token_a�token_bz address formatrRz1Invalid slippage value (must be between 0 and 50)�Validation failed)rg�validation_errors) r�is_jsonr�get_json�appendrFr r<rOr8rT) �args�kwargs�datarh�field�errorsr� amount_fields� token_fields�f�required_fieldss ��r�decorated_functionzDvalidate_json_request.<locals>.decorator.<locals>.decorated_function�s�����?� G���)?�@�A�A�3�F�F��#�%�%�D�� D���)<�=�>�>��C�C�� �!#��,�5�5�E��D�(�(�&�-�-�e�4�4�4��!��"�!:�*8�$�$������ �F� �4�'�'�!�X�X�l�3�3� �'��-=�(>� �K�K�C��M�M�"A�B�B�B��t�#�#�*�4� �+=�>�>�<��M�M�":�;�;�;��T�!�!�!�X�X�l�3�3� �(��j�)9�:�F�F�N��M�M�"L�M�M�M�L�K�K�M�&� A� A���D�=�=�*�4��;�7�7�A�� � �&?��&?�&?�&?�@�@�@��T�S�S�L�%� I� I���D�=�=�!%���,�!7�!7�J�+�D��K��D�D�I�� � �&G��&G�&G�&G�H�H�H���T�!�!�(��j�)9�:�:�W��M�M�"U�V�V�V�� ��0�)/� � ������ �1�d�%�f�%�%� %rr)rr�r�s` �r� decoratorz(validate_json_request.<locals>.decorator�sA���� �q���C &�C &�C &�C &�C &� ��C &�J"�!rrZ)r��optional_fieldsr�s` r�validate_json_requestr��s*���G"�G"�G"�G"�G"�P �rc���|sdSt|�����}d�d�|D����}|rt|��|kr |d|�}|S)zSanitize user input�c3�HK�|]}t|��dks|dv�|V��dS)r))� � � N)�ord)r\�chars rr^z!sanitize_input.<locals>.<genexpr>�s;����d�d��c�$�i�i�2�o�o��Qc�Ic�Ic��Ic�Ic�Ic�Ic�d�drN)r�strip�joinr )� input_string� max_length� sanitizeds r�sanitize_inputr��sz�� ���r��L�!�!�'�'�)�)�I����d�d��d�d�d�d�d�I��+�c�)�n�n�z�1�1��k�z�k�*� � �r�dc��� |rt|��nd}|rt|��nd}td|��}tdt||����}||fS#ttf$rYdSwxYw)zValidate pagination parameters�rQ)r�rQ)r&�max�minr'r4)�page�per_page� max_per_pages r�validate_pagination_paramsr�s��� � �'�s�4�y�y�y�a��$,�4�3�x�=�=�=�"���1�d�|�|���q�#�h� �5�5�6�6���X�~��� � � "�����u�u����s�AA�A/�.A/c�$��eZdZdZd�fd� Z�xZS)�ValidationErrorzCustom validation errorNc�~��||_||_||_t���|j��dS�N)�messager{�code�super�__init__)�selfr�r{r�� __class__s �rr�zValidationError.__init__s8����� ��� ��� � �������&�&�&�&�&r�NN)�__name__� __module__� __qualname__�__doc__r�� __classcell__)r�s@rr�r�sC�������!�!�'�'�'�'�'�'�'�'�'�'rr�c��g}d|vr|�d��n*t|d��s|�d��d|vr*t|d��s|�d��|rtdd����d S) zValidate portfolio request datarizwallet_address is required�Invalid wallet_address formatrrjrs�VALIDATION_ERROR�r�T)rwr r<r�)rzr|s r�validate_portfolio_requestr�s��� �F��t�#�#�� � �2�3�3�3�3� �d�#3�4� 5� 5�7�� � �5�6�6�6��t���"�4� �#5�6�6� 4� �M�M�2� 3� 3� 3� �L��1�8J�K�K�K�K� �4rc��gd�}g}|D]}||vr|�|�d����d|vr*t|d��s|�d��d|vr*t|d��s|�d��d|vr*t|d��s|�d��d |vr*t|d ��s|�d ��d |vr*t|d ��s|�d ��d |vr*t |d ��s|�d��|rt dd����dS)zValidate swap request data)rirrorprkz is requiredrir�rrjrozInvalid token_in addressrpzInvalid token_out addressrkzInvalid amount_in formatrRzInvalid slippage valuezSwap validation failed�SWAP_VALIDATION_ERRORr�T)rwr r<r8rTr�)rzr�r|r{s r�validate_swap_requestr�-s���\�\�\�O� �F� �2�2�� �� � � �M�M�U�0�0�0� 1� 1� 1���4���(8��>N�9O�(P�(P��� � �5�6�6�6��t���$7��\�8J�$K�$K��� � �.�/�/�/��T���"2�4� �3C�"D�"D��� � �0�1�1�1��d���#3�D��4E�#F�#F��� � �1�2�2�2��d���?�4� �3D�#E�#E��� � �0�1�1�1��T���"3�D��4D�"E�"E��� � �.�/�/�/� �V��6�=T�U�U�U�U� �4rr�r�)r�)r �logging� functoolsr�flaskrr� getLoggerr��loggerrr rrr8r<rOrTrcr�r�r�r,r�r�r�rZrr�<module>r�s��� � � � �����������"�"�"�"�"�"�"�"� �� �8� $� $�����&����& � � � � � ����.F�F�F� -�-�-�-�, � � �����@J�J�J�J�X����" � � � �'�'�'�'�'�i�'�'�'����$����r

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JMadhan1/OneDefi-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server