dinie-sdk-sandbox 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.
Files changed (114) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +40 -0
  3. data/LICENSE +21 -0
  4. data/README.md +280 -0
  5. data/lib/dinie/generated/api_version.rb +8 -0
  6. data/lib/dinie/generated/client.rb +96 -0
  7. data/lib/dinie/generated/errors/registry.rb +40 -0
  8. data/lib/dinie/generated/events/base.rb +11 -0
  9. data/lib/dinie/generated/events/credit_offer.rb +56 -0
  10. data/lib/dinie/generated/events/customer_created.rb +42 -0
  11. data/lib/dinie/generated/events/customer_denied.rb +39 -0
  12. data/lib/dinie/generated/events/customer_kyc_updated.rb +36 -0
  13. data/lib/dinie/generated/events/customer_status.rb +48 -0
  14. data/lib/dinie/generated/events/deserializers.rb +35 -0
  15. data/lib/dinie/generated/events/loan_active.rb +35 -0
  16. data/lib/dinie/generated/events/loan_created.rb +38 -0
  17. data/lib/dinie/generated/events/loan_payment_received.rb +46 -0
  18. data/lib/dinie/generated/events/loan_processing.rb +37 -0
  19. data/lib/dinie/generated/events/loan_signature_received.rb +48 -0
  20. data/lib/dinie/generated/events/loan_status.rb +73 -0
  21. data/lib/dinie/generated/events.rb +4 -0
  22. data/lib/dinie/generated/resources/banks.rb +25 -0
  23. data/lib/dinie/generated/resources/biometrics.rb +27 -0
  24. data/lib/dinie/generated/resources/credentials.rb +56 -0
  25. data/lib/dinie/generated/resources/credit_offers.rb +59 -0
  26. data/lib/dinie/generated/resources/customers.rb +200 -0
  27. data/lib/dinie/generated/resources/loans.rb +70 -0
  28. data/lib/dinie/generated/resources/webhook_endpoints.rb +97 -0
  29. data/lib/dinie/generated/resources.rb +9 -0
  30. data/lib/dinie/generated/types/bank.rb +17 -0
  31. data/lib/dinie/generated/types/biometrics_session.rb +16 -0
  32. data/lib/dinie/generated/types/biometrics_session_exchange_response.rb +23 -0
  33. data/lib/dinie/generated/types/credential.rb +52 -0
  34. data/lib/dinie/generated/types/credit_offer.rb +62 -0
  35. data/lib/dinie/generated/types/customer.rb +46 -0
  36. data/lib/dinie/generated/types/customer_bank_account.rb +33 -0
  37. data/lib/dinie/generated/types/ids.rb +18 -0
  38. data/lib/dinie/generated/types/kyc.rb +458 -0
  39. data/lib/dinie/generated/types/kyc_attachment_response.rb +16 -0
  40. data/lib/dinie/generated/types/loan.rb +51 -0
  41. data/lib/dinie/generated/types/money.rb +4 -0
  42. data/lib/dinie/generated/types/simulation.rb +35 -0
  43. data/lib/dinie/generated/types/transaction.rb +43 -0
  44. data/lib/dinie/generated/types/webhook_endpoint.rb +52 -0
  45. data/lib/dinie/generated/types/webhook_secret_rotation.rb +17 -0
  46. data/lib/dinie/generated/types.rb +18 -0
  47. data/lib/dinie/runtime/errors.rb +295 -0
  48. data/lib/dinie/runtime/http.rb +327 -0
  49. data/lib/dinie/runtime/idempotency.rb +34 -0
  50. data/lib/dinie/runtime/logger.rb +326 -0
  51. data/lib/dinie/runtime/model.rb +162 -0
  52. data/lib/dinie/runtime/multipart.rb +77 -0
  53. data/lib/dinie/runtime/paginator.rb +164 -0
  54. data/lib/dinie/runtime/rate_limit.rb +150 -0
  55. data/lib/dinie/runtime/request_options.rb +112 -0
  56. data/lib/dinie/runtime/retry.rb +74 -0
  57. data/lib/dinie/runtime/token_manager.rb +341 -0
  58. data/lib/dinie/runtime/webhooks.rb +194 -0
  59. data/lib/dinie/version.rb +7 -0
  60. data/lib/dinie.rb +37 -0
  61. data/sig/_external/faraday.rbs +44 -0
  62. data/sig/dinie/generated/client.rbs +45 -0
  63. data/sig/dinie/generated/errors/registry.rbs +40 -0
  64. data/sig/dinie/generated/events/base.rbs +17 -0
  65. data/sig/dinie/generated/events/credit_offer.rbs +33 -0
  66. data/sig/dinie/generated/events/customer_created.rbs +27 -0
  67. data/sig/dinie/generated/events/customer_denied.rbs +25 -0
  68. data/sig/dinie/generated/events/customer_kyc_updated.rbs +21 -0
  69. data/sig/dinie/generated/events/customer_status.rbs +26 -0
  70. data/sig/dinie/generated/events/deserializers.rbs +9 -0
  71. data/sig/dinie/generated/events/loan_active.rbs +20 -0
  72. data/sig/dinie/generated/events/loan_created.rbs +23 -0
  73. data/sig/dinie/generated/events/loan_payment_received.rbs +28 -0
  74. data/sig/dinie/generated/events/loan_processing.rbs +23 -0
  75. data/sig/dinie/generated/events/loan_signature_received.rbs +30 -0
  76. data/sig/dinie/generated/events/loan_status.rbs +40 -0
  77. data/sig/dinie/generated/resources/banks.rbs +15 -0
  78. data/sig/dinie/generated/resources/credentials.rbs +21 -0
  79. data/sig/dinie/generated/resources/credit_offers.rbs +19 -0
  80. data/sig/dinie/generated/resources/customers.rbs +58 -0
  81. data/sig/dinie/generated/resources/loans.rbs +26 -0
  82. data/sig/dinie/generated/resources/webhook_endpoints.rbs +35 -0
  83. data/sig/dinie/generated/types/bank.rbs +12 -0
  84. data/sig/dinie/generated/types/biometrics_session.rbs +11 -0
  85. data/sig/dinie/generated/types/credential.rbs +26 -0
  86. data/sig/dinie/generated/types/credit_offer.rbs +24 -0
  87. data/sig/dinie/generated/types/customer.rbs +25 -0
  88. data/sig/dinie/generated/types/customer_bank_account.rbs +26 -0
  89. data/sig/dinie/generated/types/enums.rbs +66 -0
  90. data/sig/dinie/generated/types/ids.rbs +21 -0
  91. data/sig/dinie/generated/types/kyc/attachment.rbs +14 -0
  92. data/sig/dinie/generated/types/kyc/common.rbs +42 -0
  93. data/sig/dinie/generated/types/kyc/requirements.rbs +117 -0
  94. data/sig/dinie/generated/types/kyc/submitted.rbs +21 -0
  95. data/sig/dinie/generated/types/kyc/uploads.rbs +24 -0
  96. data/sig/dinie/generated/types/loan.rbs +32 -0
  97. data/sig/dinie/generated/types/money.rbs +6 -0
  98. data/sig/dinie/generated/types/simulation.rbs +28 -0
  99. data/sig/dinie/generated/types/transaction.rbs +24 -0
  100. data/sig/dinie/generated/types/webhook_endpoint.rbs +38 -0
  101. data/sig/dinie/runtime/errors.rbs +106 -0
  102. data/sig/dinie/runtime/http.rbs +59 -0
  103. data/sig/dinie/runtime/idempotency.rbs +15 -0
  104. data/sig/dinie/runtime/logger.rbs +89 -0
  105. data/sig/dinie/runtime/model.rbs +51 -0
  106. data/sig/dinie/runtime/multipart.rbs +25 -0
  107. data/sig/dinie/runtime/paginator.rbs +50 -0
  108. data/sig/dinie/runtime/rate_limit.rbs +46 -0
  109. data/sig/dinie/runtime/request_options.rbs +35 -0
  110. data/sig/dinie/runtime/retry.rbs +29 -0
  111. data/sig/dinie/runtime/token_manager.rbs +51 -0
  112. data/sig/dinie/runtime/webhooks.rbs +31 -0
  113. data/sig/dinie/version.rbs +7 -0
  114. metadata +316 -0
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class CustomerStatusData < Internal::Model
9
+ attribute :external_id, :id, :status
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ external_id: raw[:external_id],
14
+ id: raw[:id],
15
+ status: raw[:status]
16
+ )
17
+ end
18
+ end
19
+
20
+ class CustomerActive < WebhookEventBase
21
+ def self.deserialize(raw)
22
+ new(
23
+ api_version: raw[:api_version],
24
+ created_at: raw[:created_at],
25
+ data: CustomerStatusData.deserialize(raw[:data]),
26
+ delivery_id: raw[:delivery_id],
27
+ id: raw[:id],
28
+ timestamp: raw[:timestamp],
29
+ type: "customer.active"
30
+ )
31
+ end
32
+ end
33
+
34
+ class CustomerUnderReview < WebhookEventBase
35
+ def self.deserialize(raw)
36
+ new(
37
+ api_version: raw[:api_version],
38
+ created_at: raw[:created_at],
39
+ data: CustomerStatusData.deserialize(raw[:data]),
40
+ delivery_id: raw[:delivery_id],
41
+ id: raw[:id],
42
+ timestamp: raw[:timestamp],
43
+ type: "customer.under_review"
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "credit_offer"
4
+ require_relative "customer_created"
5
+ require_relative "customer_denied"
6
+ require_relative "customer_kyc_updated"
7
+ require_relative "customer_status"
8
+ require_relative "loan_active"
9
+ require_relative "loan_created"
10
+ require_relative "loan_payment_received"
11
+ require_relative "loan_processing"
12
+ require_relative "loan_signature_received"
13
+ require_relative "loan_status"
14
+
15
+ module Dinie
16
+ module Events
17
+ DESERIALIZERS = {
18
+ "credit_offer.available" => ->(raw) { CreditOfferAvailable.deserialize(raw) },
19
+ "credit_offer.expired" => ->(raw) { CreditOfferExpired.deserialize(raw) },
20
+ "customer.active" => ->(raw) { CustomerActive.deserialize(raw) },
21
+ "customer.under_review" => ->(raw) { CustomerUnderReview.deserialize(raw) },
22
+ "customer.created" => ->(raw) { CustomerCreated.deserialize(raw) },
23
+ "customer.denied" => ->(raw) { CustomerDenied.deserialize(raw) },
24
+ "customer.kyc_updated" => ->(raw) { CustomerKycUpdated.deserialize(raw) },
25
+ "loan.active" => ->(raw) { LoanActive.deserialize(raw) },
26
+ "loan.cancelled" => ->(raw) { LoanCancelled.deserialize(raw) },
27
+ "loan.error" => ->(raw) { LoanErrorEvent.deserialize(raw) },
28
+ "loan.finished" => ->(raw) { LoanFinished.deserialize(raw) },
29
+ "loan.created" => ->(raw) { LoanCreated.deserialize(raw) },
30
+ "loan.payment_received" => ->(raw) { LoanPaymentReceived.deserialize(raw) },
31
+ "loan.processing" => ->(raw) { LoanProcessing.deserialize(raw) },
32
+ "loan.signature_received" => ->(raw) { LoanSignatureReceived.deserialize(raw) }
33
+ }.freeze
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanActiveData < Internal::Model
9
+ attribute :id, :principal_amount, :requested_amount, :status
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ id: raw[:id],
14
+ principal_amount: raw[:principal_amount],
15
+ requested_amount: raw[:requested_amount],
16
+ status: raw[:status]
17
+ )
18
+ end
19
+ end
20
+
21
+ class LoanActive < WebhookEventBase
22
+ def self.deserialize(raw)
23
+ new(
24
+ api_version: raw[:api_version],
25
+ created_at: raw[:created_at],
26
+ data: LoanActiveData.deserialize(raw[:data]),
27
+ delivery_id: raw[:delivery_id],
28
+ id: raw[:id],
29
+ timestamp: raw[:timestamp],
30
+ type: "loan.active"
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanCreatedData < Internal::Model
9
+ attribute :credit_offer_id, :customer_id, :id, :installment_count, :requested_amount, :signing_url, :status
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ credit_offer_id: raw[:credit_offer_id],
14
+ customer_id: raw[:customer_id],
15
+ id: raw[:id],
16
+ installment_count: raw[:installment_count],
17
+ requested_amount: raw[:requested_amount],
18
+ signing_url: raw[:signing_url],
19
+ status: raw[:status]
20
+ )
21
+ end
22
+ end
23
+
24
+ class LoanCreated < WebhookEventBase
25
+ def self.deserialize(raw)
26
+ new(
27
+ api_version: raw[:api_version],
28
+ created_at: raw[:created_at],
29
+ data: LoanCreatedData.deserialize(raw[:data]),
30
+ delivery_id: raw[:delivery_id],
31
+ id: raw[:id],
32
+ timestamp: raw[:timestamp],
33
+ type: "loan.created"
34
+ )
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanPayment < Internal::Model
9
+ attribute :amount, :installment_number, :paid_at
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ amount: raw[:amount],
14
+ installment_number: raw[:installment_number],
15
+ paid_at: raw[:paid_at]
16
+ )
17
+ end
18
+ end
19
+
20
+ class LoanPaymentReceivedData < Internal::Model
21
+ attribute :id, :payment, :status
22
+
23
+ def self.deserialize(raw)
24
+ new(
25
+ id: raw[:id],
26
+ payment: LoanPayment.deserialize(raw[:payment]),
27
+ status: raw[:status]
28
+ )
29
+ end
30
+ end
31
+
32
+ class LoanPaymentReceived < WebhookEventBase
33
+ def self.deserialize(raw)
34
+ new(
35
+ api_version: raw[:api_version],
36
+ created_at: raw[:created_at],
37
+ data: LoanPaymentReceivedData.deserialize(raw[:data]),
38
+ delivery_id: raw[:delivery_id],
39
+ id: raw[:id],
40
+ timestamp: raw[:timestamp],
41
+ type: "loan.payment_received"
42
+ )
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanProcessingData < Internal::Model
9
+ attribute :ccb_number, :credit_offer_id, :customer_id, :disbursement_method, :id, :status
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ ccb_number: raw[:ccb_number],
14
+ credit_offer_id: raw[:credit_offer_id],
15
+ customer_id: raw[:customer_id],
16
+ disbursement_method: raw[:disbursement_method],
17
+ id: raw[:id],
18
+ status: raw[:status]
19
+ )
20
+ end
21
+ end
22
+
23
+ class LoanProcessing < WebhookEventBase
24
+ def self.deserialize(raw)
25
+ new(
26
+ api_version: raw[:api_version],
27
+ created_at: raw[:created_at],
28
+ data: LoanProcessingData.deserialize(raw[:data]),
29
+ delivery_id: raw[:delivery_id],
30
+ id: raw[:id],
31
+ timestamp: raw[:timestamp],
32
+ type: "loan.processing"
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanSigner < Internal::Model
9
+ attribute :cpf, :name, :signed_at
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ cpf: raw[:cpf],
14
+ name: raw[:name],
15
+ signed_at: raw[:signed_at]
16
+ )
17
+ end
18
+ end
19
+
20
+ class LoanSignatureReceivedData < Internal::Model
21
+ attribute :id, :signatures_received, :signatures_required, :signer, :status
22
+
23
+ def self.deserialize(raw)
24
+ new(
25
+ id: raw[:id],
26
+ signatures_received: raw[:signatures_received],
27
+ signatures_required: raw[:signatures_required],
28
+ signer: LoanSigner.deserialize(raw[:signer]),
29
+ status: raw[:status]
30
+ )
31
+ end
32
+ end
33
+
34
+ class LoanSignatureReceived < WebhookEventBase
35
+ def self.deserialize(raw)
36
+ new(
37
+ api_version: raw[:api_version],
38
+ created_at: raw[:created_at],
39
+ data: LoanSignatureReceivedData.deserialize(raw[:data]),
40
+ delivery_id: raw[:delivery_id],
41
+ id: raw[:id],
42
+ timestamp: raw[:timestamp],
43
+ type: "loan.signature_received"
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "base"
5
+
6
+ module Dinie
7
+ module Events
8
+ class LoanError < Internal::Model
9
+ attribute :code, :message
10
+
11
+ def self.deserialize(raw)
12
+ new(
13
+ code: raw[:code],
14
+ message: raw[:message]
15
+ )
16
+ end
17
+ end
18
+
19
+ class LoanStatusData < Internal::Model
20
+ attribute :error, :id, :status
21
+
22
+ def self.deserialize(raw)
23
+ new(
24
+ error: raw[:error] && LoanError.deserialize(raw[:error]),
25
+ id: raw[:id],
26
+ status: raw[:status]
27
+ )
28
+ end
29
+ end
30
+
31
+ class LoanCancelled < WebhookEventBase
32
+ def self.deserialize(raw)
33
+ new(
34
+ api_version: raw[:api_version],
35
+ created_at: raw[:created_at],
36
+ data: LoanStatusData.deserialize(raw[:data]),
37
+ delivery_id: raw[:delivery_id],
38
+ id: raw[:id],
39
+ timestamp: raw[:timestamp],
40
+ type: "loan.cancelled"
41
+ )
42
+ end
43
+ end
44
+
45
+ class LoanErrorEvent < WebhookEventBase
46
+ def self.deserialize(raw)
47
+ new(
48
+ api_version: raw[:api_version],
49
+ created_at: raw[:created_at],
50
+ data: LoanStatusData.deserialize(raw[:data]),
51
+ delivery_id: raw[:delivery_id],
52
+ id: raw[:id],
53
+ timestamp: raw[:timestamp],
54
+ type: "loan.error"
55
+ )
56
+ end
57
+ end
58
+
59
+ class LoanFinished < WebhookEventBase
60
+ def self.deserialize(raw)
61
+ new(
62
+ api_version: raw[:api_version],
63
+ created_at: raw[:created_at],
64
+ data: LoanStatusData.deserialize(raw[:data]),
65
+ delivery_id: raw[:delivery_id],
66
+ id: raw[:id],
67
+ timestamp: raw[:timestamp],
68
+ type: "loan.finished"
69
+ )
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "events/base"
4
+ require_relative "events/deserializers"
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../types/bank"
4
+
5
+ module Dinie
6
+ module Resources
7
+ # Operations on the banks resource.
8
+ class Banks
9
+ def initialize(http)
10
+ @http = http
11
+ end
12
+
13
+ # List banks
14
+ #
15
+ # List banks available for customer bank account submission.
16
+ #
17
+ # @param request_options [Hash] Request options.
18
+ # @return [Object]
19
+ def list(request_options: {})
20
+ body = @http.request(method: :get, path: "/banks", request_options:)
21
+ body[:data].map { |raw| Bank.deserialize(raw) }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../types/biometrics_session_exchange_response"
4
+
5
+ module Dinie
6
+ module Resources
7
+ # Operations on the biometrics resource.
8
+ class Biometrics
9
+ def initialize(http)
10
+ @http = http
11
+ end
12
+
13
+ # Exchange a biometrics bootstrap code for a session token
14
+ #
15
+ # Internal endpoint — the kyc-app calls this with a credential that only has the `biometrics:exchange` scope, swapping the single-use bootstrap code (`dinie_bsc_…`) for a Token bound to the session's CreditLineApplication. The token is the bearer the wizard uses for every subsequent KYC request.
16
+ #
17
+ # @param fields [Hash] Request body fields.
18
+ # @param request_options [Hash] Request options.
19
+ # @return [Object]
20
+ def session_exchange(request_options: {}, **fields)
21
+ body = fields
22
+ raw = @http.request(method: :post, path: "/biometrics/session-exchange", body:, request_options:)
23
+ BiometricsSessionExchangeResponse.deserialize(raw)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/paginator"
4
+ require_relative "../types/credential"
5
+
6
+ module Dinie
7
+ module Resources
8
+ # Operations on the credentials resource.
9
+ class Credentials
10
+ def initialize(http)
11
+ @http = http
12
+ end
13
+
14
+ # Create a new API key
15
+ #
16
+ # Create a new credential pair; the `client_secret` is shown only once in the response
17
+ #
18
+ # @param fields [Hash] Request body fields.
19
+ # @param request_options [Hash] Request options.
20
+ # @return [Object]
21
+ def create(request_options: {}, **fields)
22
+ body = Credential.serialize_create(**fields)
23
+ raw = @http.request(method: :post, path: "/auth/credentials", body:, request_options:)
24
+ CredentialWithSecret.deserialize(raw)
25
+ end
26
+
27
+ # List API keys
28
+ #
29
+ # Return all API credentials for the authenticated partner
30
+ #
31
+ # @param request_options [Hash] Request options.
32
+ # @return [Object]
33
+ def list(limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {})
34
+ fetch_page = lambda do |cursor|
35
+ query = { limit:, starting_after: cursor || starting_after }
36
+ .reject { |_key, value| Internal.omitted?(value) }
37
+ body = @http.request(method: :get, path: "/auth/credentials", query:, request_options:)
38
+ { data: body[:data].map { |raw| Credential.deserialize(raw) }, has_more: body[:has_more] }
39
+ end
40
+ Dinie::Page.from_fetch(fetch_page)
41
+ end
42
+
43
+ # Revoke an API key
44
+ #
45
+ # Immediately and permanently revoke an API credential
46
+ #
47
+ # @param client_id [String] The resource ID.
48
+ # @param request_options [Hash] Request options.
49
+ # @return [Object]
50
+ def revoke(client_id, request_options: {})
51
+ @http.request(method: :delete, path: "/auth/credentials/#{client_id}", request_options:)
52
+ nil
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/paginator"
4
+ require_relative "../types/credit_offer"
5
+ require_relative "../types/simulation"
6
+
7
+ module Dinie
8
+ module Resources
9
+ # Operations on the credit offers resource.
10
+ class CreditOffers
11
+ def initialize(http)
12
+ @http = http
13
+ end
14
+
15
+ # Simulate a loan
16
+ #
17
+ # Simulate a loan scenario for a credit offer, returning installment value, fees, and total cost
18
+ #
19
+ # @param id [String] Identificador único da oferta de crédito
20
+ # @param fields [Hash] Request body fields.
21
+ # @param request_options [Hash] Request options.
22
+ # @return [Object]
23
+ def create_simulation(id, request_options: {}, **fields)
24
+ body = Simulation.serialize_create_simulation(**fields)
25
+ raw = @http.request(method: :post, path: "/credit-offers/#{id}/simulations", body:, request_options:)
26
+ Simulation.deserialize(raw)
27
+ end
28
+
29
+ # List credit offers
30
+ #
31
+ # List credit offers across all customers, filterable by `customer_id` and `status`
32
+ #
33
+ # @param fields [Hash] Request body fields.
34
+ # @param request_options [Hash] Request options.
35
+ # @return [Object]
36
+ def list(limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {}, **filters)
37
+ fetch_page = lambda do |cursor|
38
+ query = { limit:, starting_after: cursor || starting_after, **filters }
39
+ .reject { |_key, value| Internal.omitted?(value) }
40
+ body = @http.request(method: :get, path: "/credit-offers", query:, request_options:)
41
+ { data: body[:data].map { |raw| CreditOffer.deserialize(raw) }, has_more: body[:has_more] }
42
+ end
43
+ Dinie::Page.from_fetch(fetch_page)
44
+ end
45
+
46
+ # Retrieve a credit offer
47
+ #
48
+ # Return the full credit offer object with approved amount, interest rate, and validity
49
+ #
50
+ # @param id [String] Identificador único da oferta de crédito
51
+ # @param request_options [Hash] Request options.
52
+ # @return [Object]
53
+ def retrieve(id, request_options: {})
54
+ raw = @http.request(method: :get, path: "/credit-offers/#{id}", request_options:)
55
+ CreditOffer.deserialize(raw)
56
+ end
57
+ end
58
+ end
59
+ end