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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee5dc6fa3f4a5aa0cd9d8f94bddac6a5878f79b1f4b6a530509e8845887bda47
4
- data.tar.gz: 6a6668fdbacdee52cbfa1d9c461378048c767e4b8f14e25690ad897425128d93
3
+ metadata.gz: fc2cf04d1de0868831487eb4923e738c4484f536f3e4a2749d326e0a18cc3f23
4
+ data.tar.gz: 2e4706bc1712469f99ebfac2afd3a8a8c56f50d97544a31cb9356f50a91bb5f8
5
5
  SHA512:
6
- metadata.gz: 9f9cd020c0f3876846974717d27165d84b10f6b67476d192dd517277c36d15802786b566ab4f56c3e9cd964e1e228f5bc8c685bf2375a5f8482d2a800b8a5eaa
7
- data.tar.gz: 721bf40a3596845d1858e8bf7376fca539280bf3f8bb733818b24ec74701f0b4966b10d436ae7a8469468d1b7e97dc04151a6de943540dd83d460c0794324cb8
6
+ metadata.gz: 2cc32d999ac1ce54089ef7be839778017a204efa1e0fea3e900c6934f653c9646ab837c60b2105b0f67b552ad96742448c68d9b884f4ab888eb14fb580fe15ae
7
+ data.tar.gz: 47f4dd5ba11dafe5018a85404bf377dac5fc81ec666674f96c8d6e8f2acddb3fc9c653aef8954890108646fde1409ccef4459845ccc88069a11dfb7e58efcb91
@@ -2,7 +2,7 @@ name: Ruby Gem
2
2
 
3
3
  on:
4
4
  release:
5
- types: [created]
5
+ types: [published]
6
6
 
7
7
  jobs:
8
8
  build:
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
@@ -19,5 +19,6 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rest-client", ">= 1.8.0"
22
+ spec.add_dependency "jose", ">= 1.1.3"
22
23
  spec.add_development_dependency "rspec", "3.9.0"
23
24
  end
@@ -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,11 @@
1
+ module Ibanity
2
+ module Webhooks
3
+ class Key < Ibanity::FlatResource
4
+ def self.list
5
+ path = Ibanity.webhooks_api_schema["keys"]
6
+ uri = Ibanity.client.build_uri(path)
7
+ list_by_uri(uri: uri, key: "keys")
8
+ end
9
+ end
10
+ end
11
+ 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
@@ -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: "valid_client_id",
19
- isabel_connect_client_secret: "valid_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
- debug_http_requests: false)
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}:#{api_port}"
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
@@ -1,3 +1,3 @@
1
1
  module Ibanity
2
- VERSION = "1.8.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -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
- :debug_http_requests
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: 1.8.0
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: 2021-06-24 00:00:00.000000000 Z
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