defmodule Tomba do
alias Validation.Domainvalidation
alias Validation.Keyvalidation
use HTTPotion.Base
@moduledoc """
Documentation for `Tomba`.
Tomba: Tomba.io is an Email Finder for B2B sales and email marketing
This is the Lua client library for the [Email Finder](https://tomba.io) API.
It allows you to lookup the following details :
- [Domain Search](https://tomba.io/domain-search) (Search emails are based on the website You give one domain name and it returns all the email addresses found on the internet.)
- [Email Finder](https://tomba.io/email-finder) (This API endpoint generates or retrieves the most likely email address from a domain name, a first name and a last name..)
- [Email Verifier](https://tomba.io/email-verifier) (checks the deliverability of a given email address, verifies if it has been found in our database, and returns their sources.)
- [Email Sources](https://developer.tomba.io/#email-sources) (Find email address source somewhere on the web .)
- [Company Domain autocomplete](https://developer.tomba.io/#autocomplete) (Company Autocomplete is an API that lets you auto-complete company names and retrieve logo and domain information.)
"""
# DEFAULT BASE URL
@default_base_url "https://api.tomba.io/v1/"
def default_base_url, do: @default_base_url
# Account path
@account_path "/me"
def account_path, do: @account_path
# Usage path
@usage_path "/usage"
def usage_path, do: @usage_path
# Logs path
@logs_path "/logs"
def logs_path, do: @logs_path
# Search path
@search_path "/domain-search"
def search_path, do: @search_path
# Finder path
@finder_path "/email-finder"
def finder_path, do: @finder_path
# Verifier path
@verifier_path "/email-verifier"
def verifier_path, do: @verifier_path
# Email Sources path
@sources_path "/email-sources"
def sources_path, do: @sources_path
# Email Count path
@count_path "/email-count"
def count_path, do: @count_path
# Domain status path
@status_path "/domain-status"
def status_path, do: @status_path
# Autocomplete path
@autocomplete_path "/domains-suggestion"
def autocomplete_path, do: @autocomplete_path
defstruct key: "",
secret: "",
baseUrl: ""
@doc """
Tomba Constructor
## Parameters
* `key` - Tomba api key.
* `secret` - Tomba secret key.
"""
def new(key, secret) do
Keyvalidation.validate(key)
Keyvalidation.validate(secret)
%Tomba{
key: key,
secret: secret,
baseUrl: @default_base_url
}
end
@doc """
call to server
## Parameters
* `this` - Tomba
* `path` - A string specific path.
* `params`- query params
"""
def call(this, path, params) do
header = [
"User-Agent": "Tomba elixir-client",
"Content-Type": "application/json",
"X-Tomba-Key": this.key,
"X-Tomba-Secret": this.secret
]
req = HTTPotion.get(this.baseUrl <> path, query: params, headers: header)
if req.status_code != 200 do
{:error, Jason.decode!(req.error, keys: :atoms)}
else
{:ok, Jason.decode!(req.body, keys: :atoms)}
end
end
@doc """
Returns information about the current account.
## Parameters
* `this` - Tomba
## Examples
```ex
{:ok, result} = Tomba.account(Tomba)
```
"""
def account(this) do
call(this, @account_path, nil)
end
@doc """
Search emails are based on the website You give one domain name and it returns all the email addresses found on the internet.
## Parameters
* `this` - Tomba
* `domain` - A string specific domain.
## Examples
```ex
{:ok, result} = Tomba.domain_search(Tomba,"tomba.io")
```
"""
def domain_search(this, domain) do
Domainvalidation.validate(domain)
call(this, @search_path, %{"domain" => domain})
end
@doc """
Returns total email addresses we have for one domain.
## Parameters
* `this` - Tomba
* `domain` - A string specific domain.
## Examples
```ex
{:ok, result} = Tomba.count(Tomba,"tomba.io")
```
"""
def count(this, domain) do
Domainvalidation.validate(domain)
call(this, @count_path, %{"domain" => domain})
end
@doc """
Returns domain status if is webmail or disposable.
## Parameters
* `this` - Tomba
* `domain` - A string specific path.
## Examples
```ex
{:ok, result} = Tomba.status(Tomba,"gmail.com")
```
"""
def status(this, domain) do
Domainvalidation.validate(domain)
call(this, @status_path, %{"domain" => domain})
end
@doc """
Company Autocomplete is an API that lets you auto-complete company names and retrieve logo and domain information.
## Parameters
* `this` - Tomba
* `query` - A string name company or website.
## Examples
```ex
{:ok, result} = Tomba.autocomplete(Tomba,"google")
```
"""
def autocomplete(this, query) do
call(this, @autocomplete_path, %{"query" => query})
end
@doc """
Generates or retrieves the most likely email address from a domain name, a first name and a last name.
## Parameters
* `this` - Tomba
* `domain` - A string domain name of the company, used for emails. For example, "tomba.com".
* `fname` - A string The person's first name. It doesn't need to be in lowercase.
* `lname` - A string The person's last name. It doesn't need to be in lowercase.
## Examples
```ex
{:ok, result} = Tomba.email_finder(Tomba,"stripe.com", "fname", "lname")
```
"""
def email_finder(this, domain, fname, lname) do
Domainvalidation.validate(domain)
call(this, @finder_path, %{"domain" => domain, "fisrt_name" => fname, "last_name" => lname})
end
@doc """
Verify the deliverability of an email address.
## Parameters
* `this` - Tomba
* `email` - A string email address you want to verify.
## Examples
```ex
{:ok, result} = Tomba.email_verifier(Tomba,"b.mohamed@tomba.io")
```
"""
def email_verifier(this, email) do
call(this, @verifier_path <> email, nil)
end
@doc """
Find email address source somewhere on the web.
## Parameters
* `this` - Tomba
* `email` - A string email address you want to find sources.
## Examples
```ex
{:ok, result} = Tomba.email_sources(Tomba,"b.mohamed@tomba.io")
```
"""
def email_sources(this, email) do
call(this, @sources_path <> email, nil)
end
@doc """
Check your monthly requests.
## Parameters
* `this` - Tomba
## Examples
```ex
{:ok, result} = Tomba.usage(Tomba)
```
"""
def usage(this) do
call(this, @usage_path, nil)
end
@doc """
Returns a your last 1,000 requests you made during the last 3 months.
## Parameters
* `this` - Tomba
## Examples
```ex
{:ok, result} = Tomba.logs(Tomba)
```
"""
def logs(this) do
call(this, @logs_path, nil)
end
end