datadome_fraud_sdk_ruby 0.1.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 562e73467299bca33309183c1e8f84e26571346082000ca19767295d4bcdb558
4
- data.tar.gz: 9f60b87c715a36bc402d76018b9b96f7d30a901d8f1e07b6488f7537c2251f87
3
+ metadata.gz: 92c514d743f75302d1d5feafa93f424f0835edf132d509586bbda5ecb7a88a46
4
+ data.tar.gz: 7ede40dea73ad22e61f486122f157e977856ca11ca9e7222de4294ef4e4c7262
5
5
  SHA512:
6
- metadata.gz: 7163115049e8696367c168e69a36a1fa36f80f6bb64e72baeaab93c9614136feefe89954ec9e415913d51db72eb152670f91e2dac7f5223c5ddc225286d43979
7
- data.tar.gz: 6600c8180c52163a5039c47d4ae5895142e57b63a602ae13bef327e4a8137e393a64540bdc00e2bcf8a549b38640c9915e77beb3cc75495ab7ab7a514300eafc
6
+ metadata.gz: 7d955b2b2051ecf0107fbd2a7f47d79471c6fa7774b61109c347a3a034fa1a2e1b972b08592332e89519686574f7d1c6f5468186210c3e0f0aef057f7357a882
7
+ data.tar.gz: ba94a9908561d38ef52605aedbccd8c567f8362cc188f688d4b40416b3353fec52efdef3135864830d4f304191c61ed1b23d607947f3cb3387e4bef3e14fcd53
data/README.md CHANGED
@@ -1,2 +1,3 @@
1
- # fraud-sdk-ruby
2
- Fraud Protection for Ruby
1
+ # DataDome Fraud Protection - Ruby SDK
2
+
3
+ Documentation: https://docs.datadome.co/docs/account-protect
data/lib/constants.rb CHANGED
@@ -1,2 +1,2 @@
1
- SDK_VERSION = '0.1.0'
1
+ SDK_VERSION = '1.1.0'
2
2
  SDK_NAME = 'datadome_fraud_sdk_ruby'
@@ -12,26 +12,26 @@ require_relative "model/api/response"
12
12
  class DataDome
13
13
  attr_accessor :timeout, :endpoint, :logger
14
14
 
15
- def initialize(timeout = 1500, endpoint = "account-api.datadome.co", logger = Logger.new(STDOUT))
15
+ def initialize(timeout: 1500, endpoint: "account-api.datadome.co", logger: Logger.new(STDOUT))
16
16
  @timeout = timeout
17
17
  @endpoint = endpoint
18
18
  @logger = logger
19
19
  end
20
20
 
21
- def validate(request, event)
22
- if event.status == StatusType::UNDEFINED
23
- event.status = StatusType::SUCCEEDED
21
+ def validate(request:, event:)
22
+ if event.status == DataDomeStatusType::UNDEFINED
23
+ event.status = DataDomeStatusType::SUCCEEDED
24
24
  end
25
25
 
26
26
  payload = build_payload(request, event)
27
27
 
28
28
  begin
29
- api_response = sendRequest(OperationType::VALIDATE, event.action, payload)
29
+ api_response = send_request(DataDomeOperationType::VALIDATE, event.action, payload)
30
30
 
31
31
  begin
32
32
  body = JSON.parse(api_response.body) unless api_response.body.nil?
33
33
  rescue JSON::ParserError => e
34
- @logger.error("DataDome: error parsing JSON from Fraud API #{e.message}")
34
+ @logger.error("DataDome: error parsing JSON from Fraud API /validate #{e.message}")
35
35
  return DataDomeResponseError.new(DataDomeResponseAction::ALLOW, DataDomeResponseStatus::FAILURE, "DataDome: error parsing JSON from Fraud API", e.message)
36
36
  end
37
37
 
@@ -41,7 +41,7 @@ class DataDome
41
41
  datadome_response.action = DataDomeResponseAction::DENY
42
42
  end
43
43
  else
44
- @logger.error("DataDome: error on Fraud API response #{body["errors"]}")
44
+ @logger.error("DataDome: error on Fraud API /validate response #{body["errors"]}")
45
45
  return DataDomeResponseError.new(DataDomeResponseAction::ALLOW, DataDomeResponseStatus::FAILURE, body["message"], body["errors"])
46
46
  end
47
47
  rescue Faraday::TimeoutError => e
@@ -53,25 +53,25 @@ class DataDome
53
53
  datadome_response
54
54
  end
55
55
 
56
- def collect(request, event)
57
- if event.status == StatusType::UNDEFINED
58
- event.status = StatusType::FAILED
56
+ def collect(request:, event:)
57
+ if event.status == DataDomeStatusType::UNDEFINED
58
+ event.status = DataDomeStatusType::FAILED
59
59
  end
60
60
 
61
61
  payload = build_payload(request, event)
62
62
 
63
63
  begin
64
- api_response = sendRequest(OperationType::COLLECT, event.action, payload)
64
+ api_response = send_request(DataDomeOperationType::COLLECT, event.action, payload)
65
65
 
66
66
  if api_response.success?
67
67
  datadome_response = DataDomeResponseSuccess.new(nil, DataDomeResponseStatus::OK, nil, nil, nil)
68
68
  else
69
69
  begin
70
70
  body = JSON.parse(api_response.body)
71
- @logger.error("DataDome: error on Fraud API response #{body["errors"]}")
71
+ @logger.error("DataDome: error on Fraud API /collect response #{body["errors"]}")
72
72
  datadome_response = DataDomeResponseError.new(nil, DataDomeResponseStatus::FAILURE, body["message"], body["errors"])
73
73
  rescue JSON::ParserError => e
74
- @logger.error("DataDome: error parsing JSON from Fraud API #{e.message}")
74
+ @logger.error("DataDome: error parsing JSON from Fraud API /collect #{e.message}")
75
75
  return DataDomeResponseError.new(nil, DataDomeResponseStatus::FAILURE, "DataDome: error parsing JSON from Fraud API", e.message)
76
76
  end
77
77
  end
@@ -86,7 +86,7 @@ class DataDome
86
86
 
87
87
  private
88
88
 
89
- def sendRequest(operation, event, payload)
89
+ def send_request(operation, event, payload)
90
90
  api_response = client.post("/v1/" + operation + "/" + event) do |req|
91
91
  req.body = payload.to_json
92
92
  end
data/lib/model/address.rb CHANGED
@@ -1,21 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Address
4
- attr_accessor :name, :line1, :line2, :city, :countryCode, :country, :regionCode, :zipCode
3
+ class DataDomeAddress
4
+ attr_accessor :name, :line1, :line2, :city, :countryCode, :regionCode, :zipCode
5
5
 
6
- def initialize(name = nil, line1 = nil, line2 = nil, city = nil, countryCode = nil, country = nil, regionCode = nil, zipCode = nil)
6
+ def initialize(name: nil, line1: nil, line2: nil, city: nil, countryCode: nil, regionCode: nil, zipCode: nil)
7
7
  @name = name
8
8
  @line1 = line1
9
9
  @line2 = line2
10
10
  @city = city
11
11
  @countryCode = countryCode
12
- @country = country
13
12
  @regionCode = regionCode
14
13
  @zipCode = zipCode
15
14
  end
16
15
 
17
16
  def to_s
18
- "Address: name=#{name}, line1=#{line1}, line2=#{line2}, city=#{city}, countryCode=#{countryCode}, country=#{country}, regionCode=#{regionCode}, zipCode=#{zipCode}"
17
+ "DataDomeAddress: name=#{name}, line1=#{line1}, line2=#{line2}, city=#{city}, countryCode=#{countryCode}, regionCode=#{regionCode}, zipCode=#{zipCode}"
19
18
  end
20
19
 
21
20
  def to_json(options = {})
@@ -25,7 +24,6 @@ class Address
25
24
  line2: line2,
26
25
  city: city,
27
26
  countryCode: countryCode,
28
- country: country,
29
27
  regionCode: regionCode,
30
28
  zipCode: zipCode,
31
29
  }.to_json
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "../../constants"
4
4
 
5
- class DatadomeModule
5
+ class DataDomeModule
6
6
  attr_accessor :requestTimeMicros, :name, :version
7
7
 
8
8
  def initialize
@@ -21,16 +21,16 @@ class DatadomeModule
21
21
  end
22
22
 
23
23
  class DataDomeHeaders
24
- attr_accessor :addr, :clientIp, :contentype, :host, :port, :xRealIP, :xForwardedForIp,
24
+ attr_accessor :addr, :clientIp, :contentType, :host, :port, :xRealIP, :xForwardedForIp,
25
25
  :acceptEncoding, :acceptLanguage, :accept, :method, :protocol, :serverHostname,
26
26
  :referer, :userAgent, :from, :request, :origin, :acceptCharset, :connection,
27
- :clientId, :secCHUA, :secCHUAMobile, :secCHUAPlatform, :secCHUAArch,
27
+ :clientID, :secCHUA, :secCHUAMobile, :secCHUAPlatform, :secCHUAArch,
28
28
  :secCHUAFullVersionList, :secCHUAModel, :secCHDeviceMemory
29
29
 
30
30
  def initialize(request)
31
31
  @addr = request.remote_ip
32
32
  @clientIp = request.headers["HTTP_CLIENT_IP"]
33
- @contentype = truncate(request.headers["Content-Type"], 64)
33
+ @contentType = truncate(request.headers["Content-Type"], 64) # this value is a meta-variable of the request
34
34
  @host = truncate(request.headers["HTTP_HOST"], 512)
35
35
  @port = request.port || 0
36
36
  @xRealIP = truncate(request.headers["HTTP_X_REAL_IP"], 128)
@@ -48,7 +48,7 @@ class DataDomeHeaders
48
48
  @origin = truncate(request.headers["HTTP_ORIGIN"], 512)
49
49
  @acceptCharset = truncate(request.headers["HTTP_ACCEPT_CHARSET"], 128)
50
50
  @connection = truncate(request.headers["HTTP_CONNECTION"], 128)
51
- @clientId = request.cookies["datadome"]
51
+ @clientID = request.cookies["datadome"]
52
52
  @secCHUA = truncate(request.headers["HTTP_SEC_CH_UA"], 128)
53
53
  @secCHUAMobile = truncate(request.headers["HTTP_SEC_CH_UA_MOBILE"], 8)
54
54
  @secCHUAPlatform = truncate(request.headers["HTTP_SEC_CH_UA_PLATFORM"], 32)
@@ -69,7 +69,7 @@ class DataDomeRequest
69
69
  attr_accessor :module, :header
70
70
 
71
71
  def initialize(request)
72
- @module = DatadomeModule.new
72
+ @module = DataDomeModule.new
73
73
  @header = DataDomeHeaders.new(request)
74
74
  end
75
75
 
@@ -11,7 +11,7 @@ module DataDomeResponseStatus
11
11
  TIMEOUT = "timeout"
12
12
  end
13
13
 
14
- class Error
14
+ class DataDomeError
15
15
  attr_accessor :field, :error
16
16
  end
17
17
 
data/lib/model/events.rb CHANGED
@@ -1,12 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ActionType
3
+ module DataDomeActionType
4
4
  LOGIN = "login"
5
5
  REGISTER = "registration"
6
- PAYMENT = "payment"
7
6
  end
8
7
 
9
- module StatusType
8
+ module DataDomeStatusType
10
9
  SUCCEEDED = "succeeded"
11
10
  FAILED = "failed"
12
11
  UNDEFINED = "undefined"
@@ -15,7 +14,7 @@ end
15
14
  class DataDomeEvent
16
15
  attr_accessor :action, :status, :account
17
16
 
18
- def initialize(action, account, status = StatusType::UNDEFINED)
17
+ def initialize(action, account, status = DataDomeStatusType::UNDEFINED)
19
18
  @action = action
20
19
  @account = account
21
20
  @status = status
@@ -28,17 +27,17 @@ class DataDomeEvent
28
27
  end
29
28
  end
30
29
 
31
- class LoginEvent < DataDomeEvent
32
- def initialize(account, status = StatusType::UNDEFINED)
33
- super(ActionType::LOGIN, account, status)
30
+ class DataDomeLoginEvent < DataDomeEvent
31
+ def initialize(account:, status: DataDomeStatusType::UNDEFINED)
32
+ super(DataDomeActionType::LOGIN, account, status)
34
33
  end
35
34
  end
36
35
 
37
- class RegistrationEvent < DataDomeEvent
36
+ class DataDomeRegistrationEvent < DataDomeEvent
38
37
  attr_accessor :user, :session
39
38
 
40
- def initialize(account, user, session = nil, status = StatusType::UNDEFINED)
41
- super(ActionType::REGISTER, account, status)
39
+ def initialize(account:, user:, session: nil, status: DataDomeStatusType::UNDEFINED)
40
+ super(DataDomeActionType::REGISTER, account, status)
42
41
  @session = session
43
42
  @user = user
44
43
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module OperationType
3
+ module DataDomeOperationType
4
4
  VALIDATE = "validate"
5
5
  COLLECT = "collect"
6
6
  end
data/lib/model/session.rb CHANGED
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "time"
4
+
3
5
  class DataDomeSession
4
- def initialize(id, createdAt = Time.now.strftime("%s%6N").to_i)
6
+ attr_reader :id, :createdAt
7
+
8
+ def initialize(id:, createdAt: Time.now.iso8601)
5
9
  @id = id
6
10
  @createdAt = createdAt
7
11
  end
data/lib/model/user.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  require "time"
4
4
  require_relative "./address"
5
5
 
6
- module Title
6
+ module DataDomeTitle
7
7
  EMPTY = nil
8
8
  MR = "mr"
9
9
  MRS = "mrs"
@@ -11,7 +11,7 @@ module Title
11
11
  end
12
12
 
13
13
  class DataDomeUser
14
- def initialize(id, title = nil, firstName = nil, lastName = nil, createdAt = Time.now.iso8601, phone = nil, email = nil, address = nil)
14
+ def initialize(id:, title: nil, firstName: nil, lastName: nil, createdAt: Time.now.iso8601, phone: nil, email: nil, address: nil)
15
15
  @id = id
16
16
  @title = title
17
17
  @firstName = firstName
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datadome_fraud_sdk_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DataDome
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-17 00:00:00.000000000 Z
11
+ date: 2024-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.8'
26
+ version: '0'
27
27
  description: DataDome Fraud Protection - Ruby SDK
28
28
  email: support@datadome.co
29
29
  executables: []