6 releases (3 breaking)
0.4.0 | Jun 10, 2024 |
---|---|
0.3.0 | May 27, 2024 |
0.2.2 | Mar 25, 2024 |
0.2.1 | Jan 8, 2024 |
0.1.0 | Oct 26, 2023 |
#16 in #domain-name
215KB
5K
SLoC
EPP client library for async Rust
Description
instant-epp is a client library written in Rust for Internet domain registration and management for domain registrars. We have implemented support for the following standards:
- RFC 5730 - Extensible Provisioning Protocol (EPP)
- RFC 5731 - Extensible Provisioning Protocol (EPP) Domain Name Mapping
- RFC 5732 - Extensible Provisioning Protocol (EPP) Host Mapping
- RFC 5733 - Extensible Provisioning Protocol (EPP) Contact Mapping
- RFC 5734 - Extensible Provisioning Protocol (EPP) Transport over TCP
- RFC 3915 - Domain Registry Grace Period Mapping
- ConsoliDate mapping
- Namestore Extension Mapping
- Low Balance Mapping
This library is used in production at Instant Domains.
History
instant-epp was originally created by @masalachai as epp-client in the summer of 2021. By fall, Instant Domains employees started contributing to the project. In February of 2023, after most of the contributions to epp-client had come from Instant Domains for the intervening years, we decided to fork the project, replacing its dependency on quick-xml with instant-xml in the process. Many thanks to @masalachai for starting epp-client!
Getting started
You can create a mut variable of type EppClient
with the domain registry config.
use std::collections::HashMap;
use std::net::ToSocketAddrs;
use std::time::Duration;
use instant_epp::EppClient;
use instant_epp::domain::DomainCheck;
use instant_epp::common::NoExtension;
#[tokio::main]
async fn main() {
// Create an instance of EppClient
let timeout = Duration::from_secs(5);
let mut client = match EppClient::connect("registry_name".to_string(), ("example.com".to_owned(), 7000), None, timeout).await {
Ok(client) => client,
Err(e) => panic!("Failed to create EppClient: {}", e)
};
// Make a EPP Hello call to the registry
let greeting = client.hello().await.unwrap();
println!("{:?}", greeting);
// Execute an EPP Command against the registry with distinct request and response objects
let domain_check = DomainCheck { domains: &["eppdev.com", "eppdev.net"] };
let response = client.transact(&domain_check, "transaction-id").await.unwrap();
response
.res_data()
.unwrap()
.list
.iter()
.for_each(|chk| println!("Domain: {}, Available: {}", chk.inner.id, chk.inner.available));
}
The output would look like this:
Domain: eppdev.com, Available: 1
Domain: eppdev.net, Available: 1
Dependencies
~4–14MB
~185K SLoC