Skip to main content

Sherlock Domains Agentic SDK for python

Project description

Sherlock Domains Python SDK

Installation

Install latest from the GitHub repository:

$ pip install git+https://github.com/Fewsats/sherlock-python.git
$ pip install sherlock-domains

How to use

Create a Sherlock instance with a private key for the agent to use. If no key is provided, a new one will be generated and saved to the default config file.

s = Sherlock()
s
Sherlock(pubkey=90ba884688884277e49080712f386eebc88806efa8345ca937f75fe80950156d)

You can search for a domain and request to purchase it. Purchasing a domain requires contact information as mandated by ICANN.

sr = s.search("trakwiska.com")
# Don't print the whole lists
sr['available'] = sr['available'][:1]
sr['unavailable'] = sr['unavailable'][:1]
sr
{'id': '1cf56223-b390-4694-a35e-97fae6f9da20',
 'created_at': '2025-01-12T10:18:34.485Z',
 'available': [{'name': 'trakwiska.com',
   'tld': 'com',
   'tags': [],
   'price': 1105,
   'currency': 'USD',
   'available': True}],
 'unavailable': []}

Contact information is needed for registering a new domain with the ICANN.

c = Contact(**{
    "first_name": "Test",
    "last_name": "User",
    "email": "test@example.com",
    "address": "123 Test St",
    "city": "Test City",
    "state": "CA",
    "country": "US",
    "postal_code": "12345",
})

s.set_contact_information(
    cfn=c.first_name,
    cln=c.last_name,
    cem=c.email,
    cadd=c.address,
    cct=c.city,
    cst=c.state,
    cpc=c.postal_code,
    ccn=c.country
)
{'message': 'Contact information updated successfully'}

Finalizing a pruchase involves a payment. Sherlock Domains currently supports two payment methods: Credit Card (credit_card) and the Lightning Netowrk (lightning).

By default the credit card method is used. The method will then return a checkout URL that can be used to complete the payment. In the case of lightning the response will contain a lightning invoice.

s.purchase_domain(sr['id'], "trakwiska.com")
{'payment_method': {'checkout_url': 'https://checkout.stripe.com/c/pay/cs_live_a1ZgD6QnimFpPsmTi3HwY5SwliDbvvp6lLQe9petJgzcbVyQAY0woeeO7g#fidkdWxOYHwnPyd1blppbHNgWjA0S3VzXDdBbTFNVlJzfDVRQVQ2dVdBTnJTSH1QMGs2dHRsanJMbkY0PTxKbUtRaWowT2NwMGM8RlVBbGRqSWo3UFYwcVdqR3F9N2BtM2ZTPXc1Z3dQXGc2NTVPYVVSQkM8bycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl',
  'lightning_invoice': None},
 'expires_at': '2025-01-12T10:48:35.611Z'}

You can now use the checkout URL to complete the purchase and the domain will be registered to your agent.

You can view the domains you own with:

s.domains()
[{'id': 'd9b2cc30-c15d-44b9-9d39-5d33da504484',
  'domain_name': 'h402.org',
  'created_at': '2024-12-28T18:58:49.899Z',
  'expires_at': '2024-12-31T18:58:42Z',
  'auto_renew': False,
  'locked': True,
  'private': True,
  'nameservers': [],
  'status': 'active'}]

Below is a list of all the tools that the client offers to manage the domains and purchases.

s.as_tools().map(lambda t: t.__name__)
(#10) ['_me','_set_contact_information','_get_contact_information','_search','_purchase_domain','_domains','_dns_records','_create_dns_record','_update_dns_record','_delete_dns_record']

AI agents

We will show how to enable your AI assistant to handle payments using Claudette, Answer.ai convenient wrapper for Claude. You’ll need to export your ANTHROPIC_API_KEY.

from claudette import Chat, models
model = models[1]; model
'claude-3-5-sonnet-20240620'

Create a Sherlock instance with a public & private key for the agent to use.

Sherlock supports returning all the tools with s.as_tools().

sp = 'You are a helpful assistant that has access to a domain purchase API.'
chat = Chat(model, sp=sp, tools=s.as_tools())

pr = f"Search if domain 'the-favourite-game.com' is available? If it is request a purchase and process the payment using credit card method."
r = chat.toolloop(pr, trace_func=print)
r
    Message(id='msg_01GDaASzv3hXmVmLDfGnWhuc', content=[TextBlock(text="Certainly! I'll search for the domain 'the-favourite-game.com' and if it's available, I'll proceed with the purchase request using the credit card payment method. Let's start with the search.", type='text'), ToolUseBlock(id='toolu_01EFjFzK2qEawqkk4mAwWEBc', input={'q': 'the-favourite-game.com'}, name='_search', type='tool_use')], model='claude-3-5-sonnet-20240620', role='assistant', stop_reason='tool_use', stop_sequence=None, type='message', usage=In: 2409; Out: 104; Cache create: 0; Cache read: 0; Total: 2513)
    Message(id='msg_01L5CpUP3V68U7AeXzEsm13y', content=[TextBlock(text="Great news! The domain 'the-favourite-game.com' is available for purchase. The price is 1105 cents (USD), which is equivalent to $11.05.\n\nNow that we've confirmed its availability, let's proceed with the purchase request using the credit card payment method. However, before we can do that, we need to make sure that the contact information is set up. Let's check the current contact information:", type='text'), ToolUseBlock(id='toolu_015xMutz4kRNa9XZ4NzQjM33', input={}, name='_get_contact_information', type='tool_use')], model='claude-3-5-sonnet-20240620', role='assistant', stop_reason='tool_use', stop_sequence=None, type='message', usage=In: 3171; Out: 132; Cache create: 0; Cache read: 0; Total: 3303)
    Message(id='msg_01KURGeMFh5g84jc2yEft2Vo', content=[TextBlock(text='It looks like the contact information is already set up. Now we can proceed with the purchase request:', type='text'), ToolUseBlock(id='toolu_01UrmsXutPMGjyxGsaJ7XMoQ', input={'sid': 'bc716dd3-bda0-4f76-883d-c7765e6630d8', 'domain': 'the-favourite-game.com', 'payment_method': 'credit_card'}, name='_purchase_domain', type='tool_use')], model='claude-3-5-sonnet-20240620', role='assistant', stop_reason='tool_use', stop_sequence=None, type='message', usage=In: 3390; Out: 142; Cache create: 0; Cache read: 0; Total: 3532)
    Message(id='msg_01CcGr8dCULHyD5kXtj4qD5W', content=[TextBlock(text="Great! The purchase request has been processed successfully. Here's a summary of what happened:\n\n1. We searched for 'the-favourite-game.com' and found it available for $11.05.\n2. We confirmed that the contact information was already set up.\n3. We submitted a purchase request for the domain using the credit card payment method.\n\nThe system has generated a checkout URL for you to complete the payment. To finalize the purchase, you'll need to visit this URL:\n\nhttps://checkout.stripe.com/c/pay/cs_live_a1MsmAFratyStXFA0DRrk2nrvWwrFNcKtjibmMhSg9cg9VDboK4OxXUVY0#fidkdWxOYHwnPyd1blppbHNgWjA0S3VzXDdBbTFNVlJzfDVRQVQ2dVdBTnJTSH1QMGs2dHRsanJMbkY0PTxKbUtRaWowT2NwMGM8RlVBbGRqSWo3UFYwcVdqR3F9N2BtM2ZTPXc1Z3dQXGc2NTVPYVVSQkM8bycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl\n\nPlease note that this checkout URL will expire on 2025-01-12T10:48:44.614Z. Make sure to complete the payment before this time to secure your domain.\n\nIs there anything else you'd like me to help you with regarding this domain purchase or any other domain-related tasks?", type='text')], model='claude-3-5-sonnet-20240620', role='assistant', stop_reason='end_turn', stop_sequence=None, type='message', usage=In: 3886; Out: 475; Cache create: 0; Cache read: 0; Total: 4361)
Great! The purchase request has been processed successfully. Here’s a
summary of what happened:

1.  We searched for ‘the-favourite-game.com’ and found it available for
    \$11.05.
2.  We confirmed that the contact information was already set up.
3.  We submitted a purchase request for the domain using the credit card
    payment method.

The system has generated a checkout URL for you to complete the payment.
To finalize the purchase, you’ll need to visit this URL:

https://checkout.stripe.com/c/pay/cs_live_a1MsmAFratyStXFA0DRrk2nrvWwrFNcKtjibmMhSg9cg9VDboK4OxXUVY0#fidkdWxOYHwnPyd1blppbHNgWjA0S3VzXDdBbTFNVlJzfDVRQVQ2dVdBTnJTSH1QMGs2dHRsanJMbkY0PTxKbUtRaWowT2NwMGM8RlVBbGRqSWo3UFYwcVdqR3F9N2BtM2ZTPXc1Z3dQXGc2NTVPYVVSQkM8bycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl

Please note that this checkout URL will expire on
2025-01-12T10:48:44.614Z. Make sure to complete the payment before this
time to secure your domain.

Is there anything else you’d like me to help you with regarding this
domain purchase or any other domain-related tasks?

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sherlock_domains-0.1.0.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sherlock_domains-0.1.0-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file sherlock_domains-0.1.0.tar.gz.

File metadata

  • Download URL: sherlock_domains-0.1.0.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.10

File hashes

Hashes for sherlock_domains-0.1.0.tar.gz
Algorithm Hash digest
SHA256 567e54ee315871da106a84b633483a8872e2a6249a4c9a74e16fda54477957c0
MD5 6dcec671b062f116d90b7a426653647b
BLAKE2b-256 4c6ac01408e84745d439b042c77d3946656d29594a875edf70104bfe3b6f077e

See more details on using hashes here.

File details

Details for the file sherlock_domains-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sherlock_domains-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b81e83797753f7b5bf520a51aa03d782b787c8f4f79d09793557bf53b667d9e5
MD5 90770e9d5c44cefa048aa57503530a5c
BLAKE2b-256 c6b24e4df29d7f04583cfac4e0211772631b15276a11be7ddb94af00c70d9a0e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page