Class: VerifIP::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/verifip/client.rb

Overview

Client for the VerifIP IP fraud scoring API.

Examples:

client = VerifIP::Client.new(api_key: "vip_your_key")
result = client.check("185.220.101.1")
puts result.fraud_score  # => 70

Constant Summary collapse

DEFAULT_BASE_URL =
"https://api.verifip.com"
DEFAULT_TIMEOUT =
30
DEFAULT_MAX_RETRIES =
3
RETRYABLE_STATUSES =
[429, 500, 502, 503, 504].freeze
USER_AGENT =
"verifip-ruby/#{VerifIP::VERSION}"

Instance Method Summary collapse

Constructor Details

#initialize(api_key:, base_url: DEFAULT_BASE_URL, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES) ⇒ Client

Create a new VerifIP client.

Parameters:

  • api_key (String)

    your VerifIP API key (starts with “vip_”)

  • base_url (String) (defaults to: DEFAULT_BASE_URL)

    API base URL (default: api.verifip.com)

  • timeout (Integer) (defaults to: DEFAULT_TIMEOUT)

    request timeout in seconds (default: 30)

  • max_retries (Integer) (defaults to: DEFAULT_MAX_RETRIES)

    max retry attempts on 429/5xx (default: 3)

Raises:

  • (ArgumentError)


33
34
35
36
37
38
39
40
41
42
# File 'lib/verifip/client.rb', line 33

def initialize(api_key:, base_url: DEFAULT_BASE_URL, timeout: DEFAULT_TIMEOUT, max_retries: DEFAULT_MAX_RETRIES)
  raise ArgumentError, "api_key is required" if api_key.nil? || api_key.empty?

  @api_key         = api_key
  @base_url        = base_url.chomp("/")
  @timeout         = timeout
  @max_retries     = max_retries
  @rate_limit_info = nil
  @mutex           = Mutex.new
end

Instance Method Details

#check(ip) ⇒ CheckResponse

Check a single IP address for fraud risk.

Parameters:

  • ip (String)

    IPv4 or IPv6 address

Returns:

Raises:



51
52
53
54
55
56
# File 'lib/verifip/client.rb', line 51

def check(ip)
  raise ArgumentError, "ip is required" if ip.nil? || ip.empty?

  data = request(:get, "/v1/check?ip=#{URI.encode_uri_component(ip)}", auth: true)
  CheckResponse.from_hash(data)
end

#check_batch(ips) ⇒ BatchResponse

Check multiple IP addresses in a single request.

Requires Starter plan or higher. Maximum 100 IPs per request.

Parameters:

  • ips (Array<String>)

    list of IPv4/IPv6 addresses (1-100)

Returns:

Raises:

  • (ArgumentError)


64
65
66
67
68
69
70
71
# File 'lib/verifip/client.rb', line 64

def check_batch(ips)
  raise ArgumentError, "ips list is required and cannot be empty" if ips.nil? || ips.empty?
  raise ArgumentError, "Maximum 100 IPs per batch request" if ips.size > 100

  body = JSON.generate({ ips: ips })
  data = request(:post, "/v1/check/batch", body: body, auth: true)
  BatchResponse.from_hash(data)
end

#healthHealthResponse

Check API server health status. Does not require authentication.

Returns:



76
77
78
79
# File 'lib/verifip/client.rb', line 76

def health
  data = request(:get, "/health", auth: false)
  HealthResponse.from_hash(data)
end

#inspectObject



82
# File 'lib/verifip/client.rb', line 82

def inspect = to_s

#rate_limit_infoRateLimitInfo?

Returns most recently observed rate limit info.

Returns:

  • (RateLimitInfo, nil)

    most recently observed rate limit info



23
24
25
# File 'lib/verifip/client.rb', line 23

def rate_limit_info
  @mutex.synchronize { @rate_limit_info }
end

#to_sObject



81
# File 'lib/verifip/client.rb', line 81

def to_s = "VerifIP::Client(base_url=#{@base_url})"