ibanity 1.8.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/gem-push.yml +1 -1
- data/CHANGELOG.md +21 -1
- data/README.md +11 -0
- data/ibanity.gemspec +1 -0
- data/lib/ibanity/api/base_resource.rb +2 -2
- data/lib/ibanity/api/flat_resource.rb +20 -0
- data/lib/ibanity/api/isabel_connect/access_token.rb +1 -0
- data/lib/ibanity/api/isabel_connect/refresh_token.rb +3 -1
- data/lib/ibanity/api/isabel_connect/token.rb +46 -0
- data/lib/ibanity/api/ponto_connect/payment_activation_request.rb +10 -0
- data/lib/ibanity/api/ponto_connect/reauthorization_request.rb +10 -0
- data/lib/ibanity/api/ponto_connect/sandbox/financial_institution_transaction.rb +8 -0
- data/lib/ibanity/api/webhooks/key.rb +11 -0
- data/lib/ibanity/api/webhooks/ponto_connect.rb +24 -0
- data/lib/ibanity/api/webhooks/xs2a.rb +24 -0
- data/lib/ibanity/client.rb +13 -8
- data/lib/ibanity/error.rb +2 -0
- data/lib/ibanity/version.rb +1 -1
- data/lib/ibanity/webhook.rb +94 -0
- data/lib/ibanity.rb +21 -2
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc2cf04d1de0868831487eb4923e738c4484f536f3e4a2749d326e0a18cc3f23
|
4
|
+
data.tar.gz: 2e4706bc1712469f99ebfac2afd3a8a8c56f50d97544a31cb9356f50a91bb5f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cc32d999ac1ce54089ef7be839778017a204efa1e0fea3e900c6934f653c9646ab837c60b2105b0f67b552ad96742448c68d9b884f4ab888eb14fb580fe15ae
|
7
|
+
data.tar.gz: 47f4dd5ba11dafe5018a85404bf377dac5fc81ec666674f96c8d6e8f2acddb3fc9c653aef8954890108646fde1409ccef4459845ccc88069a11dfb7e58efcb91
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 2.0
|
4
|
+
|
5
|
+
* [Isabel Connect] Upgrade to version 2 of the API.
|
6
|
+
|
7
|
+
## 1.11
|
8
|
+
|
9
|
+
* Allow to tweak RestClient's timeout.
|
10
|
+
|
11
|
+
## 1.10
|
12
|
+
|
13
|
+
* [Ponto Connect] Add support for payment activation requests.
|
14
|
+
|
15
|
+
* [Webhooks] Add support for webhook signature validation, keys endpoint, and events.
|
16
|
+
|
17
|
+
## 1.9
|
18
|
+
|
19
|
+
* [Ponto Connect] Add account reauthorization requests
|
20
|
+
|
21
|
+
* [Isabel Connect] Deprecate `Ibanity::IsabelConnect::AccessToken` and `Ibanity::IsabelConnect::RefreshToken`, please use `Ibanity::IsabelConnect::Token` instead
|
22
|
+
|
3
23
|
## 1.8
|
4
24
|
|
5
25
|
* [XS2A] Update sandbox transactions
|
@@ -40,7 +60,7 @@
|
|
40
60
|
|
41
61
|
### Enhancements
|
42
62
|
|
43
|
-
* Default signature algorithm is now ["hs2019"](https://tools.ietf.org/html/draft-cavage-http-signatures-12#appendix-E.2)
|
63
|
+
* Default signature algorithm is now ["hs2019"](https://tools.ietf.org/html/draft-cavage-http-signatures-12#appendix-E.2)
|
44
64
|
* Add support for periodic and bulk payments
|
45
65
|
* Add snake-case transformation for deeply nested data structures
|
46
66
|
|
data/README.md
CHANGED
@@ -4,6 +4,17 @@
|
|
4
4
|
|
5
5
|
The Ibanity Ruby Library provides convenient wrappers around the Ibanity API. The object attributes are dynamically defined based on the API response, supporting minor API changes seamlessly.
|
6
6
|
|
7
|
+
Supported API version per product:
|
8
|
+
|
9
|
+
Product | Version
|
10
|
+
-- | --
|
11
|
+
XS2A | 1
|
12
|
+
Ponto Connect | 1
|
13
|
+
Isabel Connect | 2
|
14
|
+
Consent | 1
|
15
|
+
|
16
|
+
In case you need to connect to an older version of an API, please consult `CHANGELOG.md` for more info on which version of the gem supports which version of the API.
|
17
|
+
|
7
18
|
## Documentation
|
8
19
|
|
9
20
|
Visit our [Ruby API docs](https://documentation.ibanity.com/api/ruby).
|
data/ibanity.gemspec
CHANGED
@@ -130,8 +130,8 @@ module Ibanity
|
|
130
130
|
resource = relationship.dig("links", "meta", "type")
|
131
131
|
klass = relationship_klass(resource)
|
132
132
|
method_name = Ibanity::Util.underscore(key)
|
133
|
-
define_singleton_method(method_name) do |headers: nil|
|
134
|
-
klass.list_by_uri(uri: url, headers: headers, customer_access_token: customer_access_token)
|
133
|
+
define_singleton_method(method_name) do |headers: nil, **query_params|
|
134
|
+
klass.list_by_uri(uri: url, headers: headers, query_params: query_params, customer_access_token: customer_access_token)
|
135
135
|
end
|
136
136
|
else
|
137
137
|
resource = key
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Ibanity
|
2
|
+
class FlatResource < OpenStruct
|
3
|
+
def self.list_by_uri(uri:, key:)
|
4
|
+
raw_response = Ibanity.client.get(uri: uri)
|
5
|
+
items = raw_response[key].map { |raw_item| new(raw_item) }
|
6
|
+
Ibanity::Collection.new(
|
7
|
+
klass: self,
|
8
|
+
items: items,
|
9
|
+
links: nil,
|
10
|
+
paging: nil,
|
11
|
+
synchronized_at: nil,
|
12
|
+
latest_synchronization: nil
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(raw)
|
17
|
+
super(raw)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -2,6 +2,7 @@ module Ibanity
|
|
2
2
|
module IsabelConnect
|
3
3
|
class AccessToken < Ibanity::OAuthResource
|
4
4
|
def self.create(refresh_token:, idempotency_key: nil)
|
5
|
+
warn "WARNING: Ibanity::IsabelConnect::AccessToken.create is deprecated, please use Ibanity::IsabelConnect::Token.create instead"
|
5
6
|
uri = Ibanity.isabel_connect_api_schema["oAuth2"]["accessTokens"]
|
6
7
|
arguments = [
|
7
8
|
["grant_type", "refresh_token"],
|
@@ -2,6 +2,7 @@ module Ibanity
|
|
2
2
|
module IsabelConnect
|
3
3
|
class RefreshToken < Ibanity::OAuthResource
|
4
4
|
def self.create(authorization_code:, redirect_uri:, idempotency_key: nil)
|
5
|
+
warn "WARNING: Ibanity::IsabelConnect::RefreshToken.create is deprecated, please use Ibanity::IsabelConnect::Token.create instead"
|
5
6
|
uri = Ibanity.isabel_connect_api_schema["oAuth2"]["refreshTokens"]["create"]
|
6
7
|
arguments = [
|
7
8
|
["grant_type", "authorization_code"],
|
@@ -13,8 +14,9 @@ module Ibanity
|
|
13
14
|
payload = URI.encode_www_form(arguments)
|
14
15
|
create_by_uri(uri: uri, payload: payload, idempotency_key: idempotency_key)
|
15
16
|
end
|
16
|
-
|
17
|
+
|
17
18
|
def self.delete(token:)
|
19
|
+
warn "WARNING: Ibanity::IsabelConnect::RefreshToken.delete is deprecated, please use Ibanity::IsabelConnect::Token.delete instead"
|
18
20
|
uri = Ibanity.isabel_connect_api_schema["oAuth2"]["refreshTokens"]["revoke"]
|
19
21
|
arguments = [
|
20
22
|
["token", token],
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module IsabelConnect
|
3
|
+
class Token < Ibanity::OAuthResource
|
4
|
+
def self.create(refresh_token: nil, authorization_code: nil, redirect_uri: nil, idempotency_key: nil)
|
5
|
+
uri = Ibanity.isabel_connect_api_schema["oAuth2"]["token"]
|
6
|
+
arguments =
|
7
|
+
if refresh_token
|
8
|
+
[
|
9
|
+
["grant_type", "refresh_token"],
|
10
|
+
["refresh_token", refresh_token]
|
11
|
+
]
|
12
|
+
elsif authorization_code
|
13
|
+
[
|
14
|
+
["grant_type", "authorization_code"],
|
15
|
+
["code", authorization_code],
|
16
|
+
["redirect_uri", redirect_uri]
|
17
|
+
]
|
18
|
+
end
|
19
|
+
create_by_uri(
|
20
|
+
uri: uri,
|
21
|
+
payload: URI.encode_www_form(arguments),
|
22
|
+
idempotency_key: idempotency_key,
|
23
|
+
headers: self.headers
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.delete(refresh_token:)
|
28
|
+
uri = Ibanity.isabel_connect_api_schema["oAuth2"]["revoke"]
|
29
|
+
arguments = [
|
30
|
+
["token", refresh_token]
|
31
|
+
]
|
32
|
+
payload = URI.encode_www_form(arguments)
|
33
|
+
create_by_uri(uri: uri, payload: payload, headers: self.headers)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def self.headers
|
39
|
+
{
|
40
|
+
"Authorization": "Basic " + Base64.strict_encode64("#{Ibanity.client.isabel_connect_client_id}:#{Ibanity.client.isabel_connect_client_secret}"),
|
41
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
42
|
+
}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module PontoConnect
|
3
|
+
class PaymentActivationRequest < Ibanity::BaseResource
|
4
|
+
def self.create(access_token:, **attributes)
|
5
|
+
uri = Ibanity.ponto_connect_api_schema["paymentActivationRequests"]
|
6
|
+
create_by_uri(uri: uri, resource_type: "paymentActivationRequest", attributes: attributes, customer_access_token: access_token)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module PontoConnect
|
3
|
+
class ReauthorizationRequest < Ibanity::BaseResource
|
4
|
+
def self.create(account_id:, access_token:, **attributes)
|
5
|
+
uri = Ibanity.ponto_connect_api_schema["account"]["reauthorizationRequests"].gsub("{accountId}", account_id)
|
6
|
+
create_by_uri(uri: uri, resource_type: "reauthorizationRequest", attributes: attributes, customer_access_token: access_token)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -25,6 +25,14 @@ module Ibanity
|
|
25
25
|
.sub("{financialInstitutionTransactionId}", "")
|
26
26
|
create_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, customer_access_token: access_token)
|
27
27
|
end
|
28
|
+
|
29
|
+
def self.update(access_token:, id:, financial_institution_id:, financial_institution_account_id:, **attributes)
|
30
|
+
uri = Ibanity.ponto_connect_api_schema["sandbox"]["financialInstitution"]["financialInstitutionAccount"]["financialInstitutionTransactions"]
|
31
|
+
.sub("{financialInstitutionId}", financial_institution_id)
|
32
|
+
.sub("{financialInstitutionAccountId}", financial_institution_account_id)
|
33
|
+
.sub("{financialInstitutionTransactionId}", id)
|
34
|
+
update_by_uri(uri: uri, resource_type: "financialInstitutionTransaction", attributes: attributes, customer_access_token: access_token)
|
35
|
+
end
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module Webhooks
|
3
|
+
module PontoConnect
|
4
|
+
module Synchronization
|
5
|
+
class SucceededWithoutChange < Ibanity::BaseResource
|
6
|
+
end
|
7
|
+
|
8
|
+
class Failed < Ibanity::BaseResource
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Account
|
13
|
+
class DetailsUpdated < Ibanity::BaseResource
|
14
|
+
end
|
15
|
+
|
16
|
+
class TransactionsCreated < Ibanity::BaseResource
|
17
|
+
end
|
18
|
+
|
19
|
+
class TransactionsUpdated < Ibanity::BaseResource
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module Webhooks
|
3
|
+
module Xs2a
|
4
|
+
module Synchronization
|
5
|
+
class SucceededWithoutChange < Ibanity::BaseResource
|
6
|
+
end
|
7
|
+
|
8
|
+
class Failed < Ibanity::BaseResource
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module Account
|
13
|
+
class DetailsUpdated < Ibanity::BaseResource
|
14
|
+
end
|
15
|
+
|
16
|
+
class TransactionsCreated < Ibanity::BaseResource
|
17
|
+
end
|
18
|
+
|
19
|
+
class TransactionsUpdated < Ibanity::BaseResource
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ibanity/client.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Ibanity
|
2
2
|
class Client
|
3
3
|
|
4
|
-
attr_reader :base_uri, :signature_certificate, :signature_key, :isabel_connect_client_id, :isabel_connect_client_secret, :ponto_connect_client_id, :ponto_connect_client_secret
|
4
|
+
attr_reader :base_uri, :signature_certificate, :signature_key, :isabel_connect_client_id, :isabel_connect_client_secret, :ponto_connect_client_id, :ponto_connect_client_secret, :application_id
|
5
5
|
|
6
6
|
def initialize(
|
7
7
|
certificate:,
|
@@ -13,13 +13,15 @@ module Ibanity
|
|
13
13
|
signature_key_passphrase: nil,
|
14
14
|
api_scheme: "https",
|
15
15
|
api_host: "api.ibanity.com",
|
16
|
-
api_port: "443",
|
17
16
|
ssl_ca_file: nil,
|
18
|
-
isabel_connect_client_id:
|
19
|
-
isabel_connect_client_secret:
|
17
|
+
isabel_connect_client_id: nil,
|
18
|
+
isabel_connect_client_secret: nil,
|
20
19
|
ponto_connect_client_id: nil,
|
21
20
|
ponto_connect_client_secret: nil,
|
22
|
-
|
21
|
+
application_id: nil,
|
22
|
+
debug_http_requests: false,
|
23
|
+
timeout: 60
|
24
|
+
)
|
23
25
|
@isabel_connect_client_id = isabel_connect_client_id
|
24
26
|
@isabel_connect_client_secret = isabel_connect_client_secret
|
25
27
|
@ponto_connect_client_id = ponto_connect_client_id
|
@@ -32,8 +34,10 @@ module Ibanity
|
|
32
34
|
@signature_certificate_id = signature_certificate_id
|
33
35
|
@signature_key = OpenSSL::PKey::RSA.new(signature_key, signature_key_passphrase)
|
34
36
|
end
|
35
|
-
@base_uri = "#{api_scheme}://#{api_host}
|
37
|
+
@base_uri = "#{api_scheme}://#{api_host}"
|
36
38
|
@ssl_ca_file = ssl_ca_file
|
39
|
+
@application_id = application_id
|
40
|
+
@timeout = timeout
|
37
41
|
end
|
38
42
|
|
39
43
|
def get(uri:, query_params: {}, customer_access_token: nil, headers: nil, json: true)
|
@@ -93,7 +97,8 @@ module Ibanity
|
|
93
97
|
payload: payload,
|
94
98
|
ssl_client_cert: @certificate,
|
95
99
|
ssl_client_key: @key,
|
96
|
-
ssl_ca_file: @ssl_ca_file
|
100
|
+
ssl_ca_file: @ssl_ca_file,
|
101
|
+
timeout: @timeout
|
97
102
|
}
|
98
103
|
|
99
104
|
log("HTTP Request", query) if @http_debug
|
@@ -119,7 +124,7 @@ module Ibanity
|
|
119
124
|
|
120
125
|
def build_headers(customer_access_token: nil, idempotency_key: nil, extra_headers: nil, json:, payload: nil)
|
121
126
|
headers = {
|
122
|
-
accept: :json
|
127
|
+
accept: :json
|
123
128
|
}
|
124
129
|
headers["Transfer-Encoding"] = "chunked" if payload.is_a?(Pathname)
|
125
130
|
headers[:content_type] = :json if json
|
data/lib/ibanity/error.rb
CHANGED
@@ -22,6 +22,8 @@ module Ibanity
|
|
22
22
|
formatted_errors.join("\n")
|
23
23
|
elsif @errors.is_a?(Hash)
|
24
24
|
"* #{@errors["error"]}: #{@errors["error_description"]}\n * Error hint: #{@errors["error_hint"]}\n * ibanity_request_id: #{@ibanity_request_id}"
|
25
|
+
elsif @errors.is_a?(String)
|
26
|
+
@errors
|
25
27
|
else
|
26
28
|
super
|
27
29
|
end
|
data/lib/ibanity/version.rb
CHANGED
@@ -0,0 +1,94 @@
|
|
1
|
+
module Ibanity
|
2
|
+
module Webhook
|
3
|
+
DEFAULT_TOLERANCE = 30
|
4
|
+
SIGNING_ALGORITHM = "RS512"
|
5
|
+
|
6
|
+
# Initializes an Ibanity Webhooks event object from a JSON payload.
|
7
|
+
#
|
8
|
+
# This may raise JSON::ParserError if the payload is not valid JSON, or
|
9
|
+
# Ibanity::Error if the signature verification fails.
|
10
|
+
def self.construct_event!(payload, signature_header, tolerance: DEFAULT_TOLERANCE)
|
11
|
+
Signature.verify!(payload, signature_header, tolerance)
|
12
|
+
|
13
|
+
raw_item = JSON.parse(payload)
|
14
|
+
klass = raw_item["data"]["type"].split(".").map{|klass| klass.sub(/\S/, &:upcase)}.join("::")
|
15
|
+
Ibanity::Webhooks.const_get(klass).new(raw_item["data"])
|
16
|
+
end
|
17
|
+
|
18
|
+
module Signature
|
19
|
+
# Verifies the signature header for a given payload.
|
20
|
+
#
|
21
|
+
# Raises an Ibanity::Error in the following cases:
|
22
|
+
# - the header does not match the expected format
|
23
|
+
# - the digest does not match the payload
|
24
|
+
# - the issued at or expiration timestamp is not within the tolerance
|
25
|
+
# - the audience or issuer does not match the application config
|
26
|
+
#
|
27
|
+
# Returns true otherwise
|
28
|
+
def self.verify!(payload, signature_header, tolerance)
|
29
|
+
begin
|
30
|
+
key_details = JOSE::JWT.peek_protected(signature_header).to_hash
|
31
|
+
raise unless key_details["alg"] == SIGNING_ALGORITHM && key_details["kid"]
|
32
|
+
rescue
|
33
|
+
raise Ibanity::Error.new("Key details could not be parsed from the header", nil)
|
34
|
+
end
|
35
|
+
|
36
|
+
key = Ibanity.webhook_keys.find { |key| key.kid == key_details["kid"] }
|
37
|
+
|
38
|
+
if key.nil?
|
39
|
+
raise Ibanity::Error.new("The key id from the header didn't match an available signing key", nil)
|
40
|
+
end
|
41
|
+
signer = JOSE::JWK.from(key.to_h {|key, value| [key.to_s, value] })
|
42
|
+
verified, claims_string, _jws = JOSE::JWT.verify_strict(signer, [SIGNING_ALGORITHM], signature_header)
|
43
|
+
|
44
|
+
raise Ibanity::Error.new("The signature verification failed", nil) unless verified
|
45
|
+
|
46
|
+
jwt = JOSE::JWT.from(claims_string)
|
47
|
+
|
48
|
+
validate_digest!(jwt, payload)
|
49
|
+
validate_issued_at!(jwt, tolerance)
|
50
|
+
validate_expiration!(jwt, tolerance)
|
51
|
+
validate_issuer!(jwt)
|
52
|
+
validate_audience!(jwt)
|
53
|
+
|
54
|
+
true
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def self.validate_digest!(jwt, payload)
|
60
|
+
unless Digest::SHA512.base64digest(payload) == jwt.fields["digest"]
|
61
|
+
raise_invalid_signature_error!("digest")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.validate_issued_at!(jwt, tolerance)
|
66
|
+
unless jwt.fields["iat"] <= Time.now.to_i + tolerance
|
67
|
+
raise_invalid_signature_error!("iat")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.validate_expiration!(jwt, tolerance)
|
72
|
+
unless jwt.fields["exp"] >= Time.now.to_i - tolerance
|
73
|
+
raise_invalid_signature_error!("exp")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.validate_issuer!(jwt)
|
78
|
+
unless jwt.fields["iss"] == Ibanity.client.base_uri
|
79
|
+
raise_invalid_signature_error!("iss")
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def self.validate_audience!(jwt)
|
84
|
+
unless jwt.fields["aud"] == Ibanity.client.application_id
|
85
|
+
raise_invalid_signature_error!("aud")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.raise_invalid_signature_error!(field)
|
90
|
+
raise Ibanity::Error.new("The signature #{field} is invalid", nil)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/lib/ibanity.rb
CHANGED
@@ -4,6 +4,7 @@ require "uri"
|
|
4
4
|
require "rest_client"
|
5
5
|
require "json"
|
6
6
|
require "securerandom"
|
7
|
+
require "jose"
|
7
8
|
|
8
9
|
require_relative "ibanity/util"
|
9
10
|
require_relative "ibanity/error"
|
@@ -11,6 +12,8 @@ require_relative "ibanity/collection"
|
|
11
12
|
require_relative "ibanity/client"
|
12
13
|
require_relative "ibanity/http_signature"
|
13
14
|
require_relative "ibanity/api/base_resource"
|
15
|
+
require_relative "ibanity/api/flat_resource"
|
16
|
+
require_relative "ibanity/webhook"
|
14
17
|
require_relative "ibanity/api/xs2a/account"
|
15
18
|
require_relative "ibanity/api/xs2a/transaction"
|
16
19
|
require_relative "ibanity/api/xs2a/holding"
|
@@ -33,6 +36,7 @@ require_relative "ibanity/api/isabel_connect/intraday_transaction"
|
|
33
36
|
require_relative "ibanity/api/isabel_connect/account_report"
|
34
37
|
require_relative "ibanity/api/isabel_connect/access_token"
|
35
38
|
require_relative "ibanity/api/isabel_connect/refresh_token"
|
39
|
+
require_relative "ibanity/api/isabel_connect/token"
|
36
40
|
require_relative "ibanity/api/isabel_connect/bulk_payment_initiation_request"
|
37
41
|
require_relative "ibanity/api/sandbox/financial_institution_account"
|
38
42
|
require_relative "ibanity/api/sandbox/financial_institution_transaction"
|
@@ -53,6 +57,11 @@ require_relative "ibanity/api/ponto_connect/integration"
|
|
53
57
|
require_relative "ibanity/api/ponto_connect/sandbox/financial_institution_account"
|
54
58
|
require_relative "ibanity/api/ponto_connect/sandbox/financial_institution_transaction"
|
55
59
|
require_relative "ibanity/api/ponto_connect/onboarding_details"
|
60
|
+
require_relative "ibanity/api/ponto_connect/reauthorization_request"
|
61
|
+
require_relative "ibanity/api/ponto_connect/payment_activation_request"
|
62
|
+
require_relative "ibanity/api/webhooks/key"
|
63
|
+
require_relative "ibanity/api/webhooks/xs2a"
|
64
|
+
require_relative "ibanity/api/webhooks/ponto_connect"
|
56
65
|
|
57
66
|
module Ibanity
|
58
67
|
class << self
|
@@ -67,6 +76,7 @@ module Ibanity
|
|
67
76
|
@isabel_connect_api_schema = nil
|
68
77
|
@consent_api_schema = nil
|
69
78
|
@ponto_connect_api_schema = nil
|
79
|
+
@webhooks_api_schema = nil
|
70
80
|
@sandbox_api_schema = nil
|
71
81
|
@configuration = nil
|
72
82
|
yield configuration
|
@@ -87,9 +97,10 @@ module Ibanity
|
|
87
97
|
:ponto_connect_client_secret,
|
88
98
|
:api_scheme,
|
89
99
|
:api_host,
|
90
|
-
:api_port,
|
91
100
|
:ssl_ca_file,
|
92
|
-
:
|
101
|
+
:application_id,
|
102
|
+
:debug_http_requests,
|
103
|
+
:timeout
|
93
104
|
).new
|
94
105
|
end
|
95
106
|
|
@@ -113,6 +124,14 @@ module Ibanity
|
|
113
124
|
@consent_api_schema ||= client.get(uri: "#{client.base_uri}/consent")["links"]
|
114
125
|
end
|
115
126
|
|
127
|
+
def webhooks_api_schema
|
128
|
+
@webhooks_api_schema ||= client.get(uri: "#{client.base_uri}/webhooks")["links"]
|
129
|
+
end
|
130
|
+
|
131
|
+
def webhook_keys
|
132
|
+
@webhook_keys ||= Ibanity::Webhooks::Key.list
|
133
|
+
end
|
134
|
+
|
116
135
|
def respond_to_missing?(method_name, include_private = false)
|
117
136
|
client.respond_to?(method_name, include_private)
|
118
137
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibanity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ibanity
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.8.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jose
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.3
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rspec
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -60,6 +74,7 @@ files:
|
|
60
74
|
- lib/ibanity/api/base_resource.rb
|
61
75
|
- lib/ibanity/api/consent/consent.rb
|
62
76
|
- lib/ibanity/api/consent/processing_operation.rb
|
77
|
+
- lib/ibanity/api/flat_resource.rb
|
63
78
|
- lib/ibanity/api/isabel_connect/access_token.rb
|
64
79
|
- lib/ibanity/api/isabel_connect/account.rb
|
65
80
|
- lib/ibanity/api/isabel_connect/account_report.rb
|
@@ -67,6 +82,7 @@ files:
|
|
67
82
|
- lib/ibanity/api/isabel_connect/bulk_payment_initiation_request.rb
|
68
83
|
- lib/ibanity/api/isabel_connect/intraday_transaction.rb
|
69
84
|
- lib/ibanity/api/isabel_connect/refresh_token.rb
|
85
|
+
- lib/ibanity/api/isabel_connect/token.rb
|
70
86
|
- lib/ibanity/api/isabel_connect/transaction.rb
|
71
87
|
- lib/ibanity/api/o_auth_resource.rb
|
72
88
|
- lib/ibanity/api/ponto_connect/account.rb
|
@@ -75,6 +91,8 @@ files:
|
|
75
91
|
- lib/ibanity/api/ponto_connect/integration.rb
|
76
92
|
- lib/ibanity/api/ponto_connect/onboarding_details.rb
|
77
93
|
- lib/ibanity/api/ponto_connect/payment.rb
|
94
|
+
- lib/ibanity/api/ponto_connect/payment_activation_request.rb
|
95
|
+
- lib/ibanity/api/ponto_connect/reauthorization_request.rb
|
78
96
|
- lib/ibanity/api/ponto_connect/sandbox/financial_institution_account.rb
|
79
97
|
- lib/ibanity/api/ponto_connect/sandbox/financial_institution_transaction.rb
|
80
98
|
- lib/ibanity/api/ponto_connect/synchronization.rb
|
@@ -86,6 +104,9 @@ files:
|
|
86
104
|
- lib/ibanity/api/sandbox/financial_institution_holding.rb
|
87
105
|
- lib/ibanity/api/sandbox/financial_institution_transaction.rb
|
88
106
|
- lib/ibanity/api/sandbox/financial_institution_user.rb
|
107
|
+
- lib/ibanity/api/webhooks/key.rb
|
108
|
+
- lib/ibanity/api/webhooks/ponto_connect.rb
|
109
|
+
- lib/ibanity/api/webhooks/xs2a.rb
|
89
110
|
- lib/ibanity/api/xs2a/account.rb
|
90
111
|
- lib/ibanity/api/xs2a/account_information_access_request.rb
|
91
112
|
- lib/ibanity/api/xs2a/account_information_access_request_authorization.rb
|
@@ -106,6 +127,7 @@ files:
|
|
106
127
|
- lib/ibanity/http_signature.rb
|
107
128
|
- lib/ibanity/util.rb
|
108
129
|
- lib/ibanity/version.rb
|
130
|
+
- lib/ibanity/webhook.rb
|
109
131
|
- spec/lib/ibanity/base_resource_spec.rb
|
110
132
|
- spec/lib/ibanity/http_signature_spec.rb
|
111
133
|
- spec/lib/ibanity/util_spec.rb
|