incognia_api 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f17e031979fde13ac3ac30d9cc3ebf9369da407eef0aec67e0313dcfa9c1ecd3
4
- data.tar.gz: ecbd6959f1546fa24d5d85d5f7e95e8980539ab2fddca46838e46076571bc8b4
3
+ metadata.gz: a57edb1d744307af54b8b03d93f7b607f919cf41a66f71d92e3df45db1569b13
4
+ data.tar.gz: e572c70ff386ddb53c47a7921ff4b9ad1439a27188322c23d2098af1d2f77e03
5
5
  SHA512:
6
- metadata.gz: 0f9945bb733db1fb2015636f85b3342684635a027ff70d8bd493887365085b893877ca4ea77d3f8c4e937cccfd2c4cf580bcf8223505bbfdebf5b61ada4684fe
7
- data.tar.gz: 4f85f0ab80d4f9ca47509a6ff9edf78514990de7d0d25a3cd6c8e2a90fdbc904516d554189ad29651aae120b20ee5afe61e7ecfa80bb3f0b511c0882664d0cdb
6
+ metadata.gz: 942653d86e52ced892b20eaf9684fc0ed43535742f6d265c5b886caa5491bfdaedc56521d38c5ae8ed142d4f8196a13ee117d632c3dd7906977e8bdc3ff2687a
7
+ data.tar.gz: 15f3d172105df2645d60f94850abee3e280eb5ae425431e9409fb782eb49de21f1003c8d8fe6f8b7ae19e870c9738da97e980631adf8133c12f29ff021578a59
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.3.0] - 2024-10-30
4
+
5
+ - Add support for general configuration and use Incognia::Api as a static class
6
+
3
7
  ## [1.2.0] - 2024-08-26
4
8
 
5
9
  - Removes the requirement to send installation id to register signup, login and payment
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- incognia_api (1.2.0)
4
+ incognia_api (1.3.0)
5
5
  faraday (~> 1.10)
6
6
  faraday_middleware (~> 1.2)
7
7
 
data/README.md CHANGED
@@ -35,16 +35,18 @@ Or install it yourself as:
35
35
 
36
36
  ### Configuration
37
37
 
38
- Before using the API client, you must initialize it using credentials obtained
39
- from the [Incognia dashboard]():
38
+ Before using the API client, you must configure it using credentials obtained
39
+ from the [Incognia dashboard](https://dash.incognia.com/):
40
40
 
41
41
  ```ruby
42
- api = Incognia::Api.new(client_id: "your-client-id", client_secret:
43
- "your-client-secret")
42
+ Incognia.configure(client_id: ENV['INCOGNIA_CLIENT_ID'], client_secret: ENV['INCOGNIA_CLIENT_SECRET'])
44
43
 
44
+ # Incognia.configure(client_id: "your-client-id", client_secret: "your-client-secret")
45
45
  ```
46
46
 
47
- For sandbox credentials, refer to the [API testing guide]().
47
+ For sandbox credentials, refer to the [API testing guide](https://developer.incognia.com/).
48
+
49
+ :bulb: For Rails applications it's recommended to create an initializer file, for example `config/initializers/incognia.rb`.
48
50
 
49
51
 
50
52
  ### Registering a Signup
@@ -55,7 +57,7 @@ This method registers a new signup for the given request token and address, retu
55
57
  address = Incognia::Address.new(line: "West 34th Street, New York City, NY 10001")
56
58
  request_token = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
57
59
 
58
- assessment = api.register_signup(
60
+ assessment = Incognia::Api.register_signup(
59
61
  request_token: request_token,
60
62
  address: address
61
63
  )
@@ -71,7 +73,7 @@ address = Incognia::Address.new(line: "West 34th Street, New York City, NY 10001
71
73
  request_token = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
72
74
  external_id = "7b02736a-7718-4b83-8982-f68fb6f501fa"
73
75
 
74
- assessment = api.register_signup(
76
+ assessment = Incognia::Api.register_signup(
75
77
  request_token: request_token,
76
78
  address: address,
77
79
  external_id: external_id
@@ -88,7 +90,7 @@ This method registers a new login for the given request token and account, retur
88
90
  request_token = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
89
91
  account_id = 'account-identifier-123'
90
92
 
91
- assessment = api.register_login(
93
+ assessment = Incognia::Api.register_login(
92
94
  request_token: request_token,
93
95
  account_id: account_id,
94
96
  )
@@ -104,7 +106,7 @@ request_token = "WlMksW+jh5GPhqWBorsV8yDihoSHHpmt+DpjJ7eYxpHhuO/5tuHTuA..."
104
106
  account_id = 'account-identifier-123'
105
107
  external_id = 'some-external-identifier'
106
108
 
107
- assessment = api.register_login(
109
+ assessment = Incognia::Api.register_login(
108
110
  request_token: request_token,
109
111
  account_id: account_id,
110
112
  external_id: external_id,
@@ -120,7 +122,7 @@ This method registers a new payment for the given request token and account, ret
120
122
  containing the risk assessment and supporting evidence.
121
123
 
122
124
  ```ruby
123
- assessment = api.register_payment(
125
+ assessment = Incognia::Api.register_payment(
124
126
  request_token: 'request-token',
125
127
  account_id: 'account-id'
126
128
  )
@@ -180,7 +182,7 @@ payment_methods = [
180
182
  }
181
183
  ]
182
184
 
183
- assessment = api.register_payment(
185
+ assessment = Incognia::Api.register_payment(
184
186
  request_token: 'request-token',
185
187
  account_id: 'account-id',
186
188
  external_id: 'external-id',
@@ -206,7 +208,7 @@ request_token = 'request-token'
206
208
  account_id = 'account-id'
207
209
  occurred_at = DateTime.parse('2024-07-22T15:20:00Z')
208
210
 
209
- success = api.register_feedback(
211
+ success = Incognia::Api.register_feedback(
210
212
  event: Incognia::Constants::FeedbackEvent::ACCOUNT_TAKEOVER,
211
213
  occurred_at: occurred_at,
212
214
  request_token: request_token,
@@ -219,7 +221,7 @@ success = api.register_feedback(
219
221
  For custom fraud, set the value of `event` with the corresponding code:
220
222
 
221
223
  ```ruby
222
- success = api.register_feedback(
224
+ success = Incognia::Api.register_feedback(
223
225
  event: 'custom_fraud_name',
224
226
  occurred_at: occurred_at,
225
227
  request_token: request_token,
@@ -5,83 +5,99 @@ require 'faraday_middleware'
5
5
 
6
6
  module Incognia
7
7
  class Api
8
- # business layer: uses the Client to build domain objects
8
+ # business layer: uses the Client.instance to build domain objects
9
9
  # raises missing parameters errors
10
- attr_accessor :connection
11
10
 
12
11
  def initialize(client_id:, client_secret:)
13
- @connection = Client.new(client_id: client_id,
14
- client_secret: client_secret,
15
- host: "https://api.incognia.com/api")
16
- end
12
+ Incognia.configure(client_id: client_id, client_secret: client_secret)
17
13
 
18
- def register_signup(request_token: nil, address: nil, **opts)
19
- params = { request_token: request_token }.compact
20
- params.merge!(opts)
21
- params.merge!(address&.to_hash) if address
14
+ warn("Deprecation warning: The Incognia::Api instance will be removed. " +
15
+ "Please set up with `Incognia.configure` and use class methods instead.")
16
+ end
22
17
 
23
- response = connection.request(
24
- :post,
25
- 'v2/onboarding/signups',
26
- params
27
- )
18
+ def register_signup(**args); self.class.register_signup(**args) end
19
+ def register_login(**args); self.class.register_login(**args) end
20
+ def register_feedback(**args); self.class.register_feedback(**args) end
21
+ def register_payment(**args); self.class.register_payment(**args) end
22
+ def connection
23
+ warn("Deprecation warning: #connection and .connection are deprecated and will be private.")
28
24
 
29
- SignupAssessment.from_hash(response.body) if response.success?
25
+ self.class.connection
30
26
  end
31
27
 
32
- def register_login(account_id:, request_token: nil, **opts)
33
- params = {
34
- type: :login,
35
- account_id: account_id,
36
- request_token: request_token
37
- }.compact
38
- params.merge!(opts)
39
-
40
- response = connection.request(
41
- :post,
42
- 'v2/authentication/transactions',
43
- params
44
- )
45
-
46
- LoginAssessment.from_hash(response.body) if response.success?
47
- end
28
+ class << self
29
+ def register_signup(request_token: nil, address: nil, **opts)
30
+ params = { request_token: request_token }.compact
31
+ params.merge!(opts)
32
+ params.merge!(address&.to_hash) if address
48
33
 
49
- def register_feedback(event:, occurred_at: nil, expires_at: nil, timestamp: nil, **ids)
50
- if !timestamp.nil?
51
- warn("Deprecation warning: use occurred_at instead of timestamp")
34
+ response = connection.request(
35
+ :post,
36
+ 'v2/onboarding/signups',
37
+ params
38
+ )
39
+
40
+ SignupAssessment.from_hash(response.body) if response.success?
52
41
  end
53
42
 
54
- timestamp = timestamp.strftime('%s%L') if timestamp.respond_to? :strftime
55
- occurred_at = occurred_at.to_datetime.rfc3339 if occurred_at.respond_to? :to_datetime
56
- expires_at = expires_at.to_datetime.rfc3339 if expires_at.respond_to? :to_datetime
43
+ def register_login(account_id:, request_token: nil, **opts)
44
+ params = {
45
+ type: :login,
46
+ account_id: account_id,
47
+ request_token: request_token
48
+ }.compact
49
+ params.merge!(opts)
50
+
51
+ response = connection.request(
52
+ :post,
53
+ 'v2/authentication/transactions',
54
+ params
55
+ )
56
+
57
+ LoginAssessment.from_hash(response.body) if response.success?
58
+ end
57
59
 
58
- params = { event: event, timestamp: timestamp&.to_i, occurred_at: occurred_at, expires_at: expires_at }.compact
59
- params.merge!(ids)
60
+ def register_feedback(event:, occurred_at: nil, expires_at: nil, timestamp: nil, **ids)
61
+ if !timestamp.nil?
62
+ warn("Deprecation warning: use occurred_at instead of timestamp")
63
+ end
60
64
 
61
- response = connection.request(
62
- :post,
63
- '/api/v2/feedbacks',
64
- params
65
- )
65
+ timestamp = timestamp.strftime('%s%L') if timestamp.respond_to? :strftime
66
+ occurred_at = occurred_at.to_datetime.rfc3339 if occurred_at.respond_to? :to_datetime
67
+ expires_at = expires_at.to_datetime.rfc3339 if expires_at.respond_to? :to_datetime
66
68
 
67
- response.success?
68
- end
69
+ params = { event: event, timestamp: timestamp&.to_i, occurred_at: occurred_at, expires_at: expires_at }.compact
70
+ params.merge!(ids)
69
71
 
70
- def register_payment(account_id:, request_token: nil, **opts)
71
- params = {
72
- type: :payment,
73
- account_id: account_id,
74
- request_token: request_token
75
- }.compact
76
- params.merge!(opts)
77
-
78
- response = connection.request(
79
- :post,
80
- 'v2/authentication/transactions',
81
- params
82
- )
83
-
84
- PaymentAssessment.from_hash(response.body) if response.success?
72
+ response = connection.request(
73
+ :post,
74
+ '/api/v2/feedbacks',
75
+ params
76
+ )
77
+
78
+ response.success?
79
+ end
80
+
81
+ def register_payment(account_id:, request_token: nil, **opts)
82
+ params = {
83
+ type: :payment,
84
+ account_id: account_id,
85
+ request_token: request_token
86
+ }.compact
87
+ params.merge!(opts)
88
+
89
+ response = connection.request(
90
+ :post,
91
+ 'v2/authentication/transactions',
92
+ params
93
+ )
94
+
95
+ PaymentAssessment.from_hash(response.body) if response.success?
96
+ end
97
+
98
+ def connection
99
+ Client.instance
100
+ end
85
101
  end
86
102
  end
87
103
  end
@@ -1,32 +1,14 @@
1
1
  require "time"
2
+ require "singleton"
2
3
 
3
4
  module Incognia
4
5
  class Client
6
+ include Singleton
5
7
  # TODO:
6
8
  # (ok) http/adapter specific code
7
9
  # (ok) raises network/authentication errors
8
10
  # (ok) handles token refreshing ok
9
11
  # future: handles retrying
10
- attr_reader :connection
11
-
12
- def initialize(client_id:, client_secret:, host:)
13
- @client_id = client_id
14
- @client_secret = client_secret
15
- @host = host
16
-
17
- headers = { 'User-Agent' => "incognia-ruby/#{Incognia::VERSION} " \
18
- "({#{RbConfig::CONFIG['host']}}) " \
19
- "{#{RbConfig::CONFIG['arch']}} " \
20
- "Ruby/#{RbConfig::CONFIG['ruby_version']}" }
21
-
22
- @connection = Faraday.new(host, headers: headers) do |faraday|
23
- faraday.request :json
24
- faraday.response :json, content_type: /\bjson$/
25
- faraday.response :raise_error
26
-
27
- faraday.adapter Faraday.default_adapter
28
- end
29
- end
30
12
 
31
13
  def request(method, endpoint = nil, data = nil, headers = {})
32
14
  json_data = JSON.generate(data) if data
@@ -48,12 +30,29 @@ module Incognia
48
30
  @credentials
49
31
  end
50
32
 
33
+ def connection
34
+ return @connection if @connection
35
+
36
+ headers = { 'User-Agent' => "incognia-ruby/#{Incognia::VERSION} " \
37
+ "({#{RbConfig::CONFIG['host']}}) " \
38
+ "{#{RbConfig::CONFIG['arch']}} " \
39
+ "Ruby/#{RbConfig::CONFIG['ruby_version']}" }
40
+
41
+ @connection = Faraday.new(Incognia.config.host, headers: headers) do |faraday|
42
+ faraday.request :json
43
+ faraday.response :json, content_type: /\bjson$/
44
+ faraday.response :raise_error
45
+
46
+ faraday.adapter Faraday.default_adapter
47
+ end
48
+ end
49
+
51
50
  protected
52
51
 
53
52
  def request_credentials
54
53
  basic_auth = Faraday::Request
55
54
  .lookup_middleware(:basic_auth)
56
- .header(@client_id, @client_secret)
55
+ .header(Incognia.config.client_id, Incognia.config.client_secret)
57
56
 
58
57
  response = connection.send(:post, 'v2/token') do |r|
59
58
  r.headers[Faraday::Request::Authorization::KEY] = basic_auth
@@ -0,0 +1,17 @@
1
+ require 'singleton'
2
+
3
+ module Incognia
4
+ class Configuration
5
+ include Singleton
6
+
7
+ attr_accessor :client_id, :client_secret, :host
8
+
9
+ def configure(client_id:, client_secret:, host: nil)
10
+ @client_id = client_id
11
+ @client_secret = client_secret
12
+ @host = host || 'https://api.incognia.com/api'
13
+
14
+ self
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Incognia
4
- VERSION = "1.2.0"
4
+ VERSION = "1.3.0"
5
5
  end
data/lib/incognia_api.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "incognia_api/configuration"
3
4
  require_relative "incognia_api/version"
4
5
  require_relative "incognia_api/client"
5
6
  require_relative "incognia_api/util"
@@ -15,6 +16,14 @@ require_relative "incognia_api/resources/credentials"
15
16
  require_relative "incognia_api/constants/feedback_event"
16
17
 
17
18
  module Incognia
19
+ def self.configure(**args)
20
+ config.configure(**args)
21
+ end
22
+
23
+ def self.config
24
+ Configuration.instance
25
+ end
26
+
18
27
  class APIError < StandardError
19
28
  attr_reader :message, :errors, :status
20
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: incognia_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Cavalcanti
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-26 00:00:00.000000000 Z
11
+ date: 2024-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -63,6 +63,7 @@ files:
63
63
  - lib/incognia_api/address.rb
64
64
  - lib/incognia_api/api.rb
65
65
  - lib/incognia_api/client.rb
66
+ - lib/incognia_api/configuration.rb
66
67
  - lib/incognia_api/constants/feedback_event.rb
67
68
  - lib/incognia_api/resources/api_resource.rb
68
69
  - lib/incognia_api/resources/credentials.rb
@@ -77,7 +78,7 @@ metadata:
77
78
  homepage_uri: https://github.com/inloco/incognia-ruby
78
79
  source_code_uri: https://github.com/inloco/incognia-ruby
79
80
  changelog_uri: https://github.com/inloco/incognia-ruby/blob/master/
80
- post_install_message:
81
+ post_install_message:
81
82
  rdoc_options: []
82
83
  require_paths:
83
84
  - lib
@@ -92,8 +93,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  - !ruby/object:Gem::Version
93
94
  version: '0'
94
95
  requirements: []
95
- rubygems_version: 3.1.6
96
- signing_key:
96
+ rubygems_version: 3.4.19
97
+ signing_key:
97
98
  specification_version: 4
98
99
  summary: Official Ruby lib for communicating with Incognia API
99
100
  test_files: []