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,200 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/multipart"
4
+ require_relative "../../runtime/paginator"
5
+ require_relative "../types/biometrics_session"
6
+ require_relative "../types/credit_offer"
7
+ require_relative "../types/customer"
8
+ require_relative "../types/customer_bank_account"
9
+ require_relative "../types/kyc"
10
+ require_relative "../types/kyc_attachment_response"
11
+
12
+ module Dinie
13
+ module Resources
14
+ # Operations on the customers resource.
15
+ class Customers
16
+ def initialize(http)
17
+ @http = http
18
+ end
19
+
20
+ # Register a new customer
21
+ #
22
+ # Register a new customer in `creating` status, idempotent on CPF
23
+ #
24
+ # @param fields [Hash] Request body fields.
25
+ # @param request_options [Hash] Request options.
26
+ # @return [Object]
27
+ def create(request_options: {}, **fields)
28
+ body = Customer.serialize_create(**fields)
29
+ raw = @http.request(method: :post, path: "/customers", body:, request_options:)
30
+ Customer.deserialize(raw)
31
+ end
32
+
33
+ # Create a biometrics capture session
34
+ #
35
+ # Generate a single-use bootstrap code for the customer-facing biometrics flow. The response includes a `session_url` the partner can embed or redirect to — the kyc-app reads the code from the URL and exchanges it for a scoped session token via `POST /biometrics/session-exchange`.
36
+ #
37
+ # @param id [String] Identificador único do cliente
38
+ # @param fields [Hash] Request body fields.
39
+ # @param request_options [Hash] Request options.
40
+ # @return [Object]
41
+ def create_biometrics_session(id, request_options: {}, **fields)
42
+ body = fields
43
+ raw = @http.request(method: :post, path: "/customers/#{id}/biometrics", body:, request_options:)
44
+ BiometricsSession.deserialize(raw)
45
+ end
46
+
47
+ # List customers
48
+ #
49
+ # List and search customers with optional filters for `cpf`, `external_id`, and `status`
50
+ #
51
+ # @param fields [Hash] Request body fields.
52
+ # @param request_options [Hash] Request options.
53
+ # @return [Object]
54
+ def list(limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {}, **filters)
55
+ fetch_page = lambda do |cursor|
56
+ query = { limit:, starting_after: cursor || starting_after, **filters }
57
+ .reject { |_key, value| Internal.omitted?(value) }
58
+ body = @http.request(method: :get, path: "/customers", query:, request_options:)
59
+ { data: body[:data].map { |raw| Customer.deserialize(raw) }, has_more: body[:has_more] }
60
+ end
61
+ Dinie::Page.from_fetch(fetch_page)
62
+ end
63
+
64
+ # Retrieve a customer
65
+ #
66
+ # Return the full customer object including registration data, status, and KYC progress
67
+ #
68
+ # @param id [String] Identificador único do cliente
69
+ # @param request_options [Hash] Request options.
70
+ # @return [Object]
71
+ def retrieve(id, request_options: {})
72
+ raw = @http.request(method: :get, path: "/customers/#{id}", request_options:)
73
+ Customer.deserialize(raw)
74
+ end
75
+
76
+ # Get customer bank account
77
+ #
78
+ # Return the bank account currently linked to this customer, if one exists.
79
+ #
80
+ # @param id [String] Identificador único do cliente
81
+ # @param request_options [Hash] Request options.
82
+ # @return [Object]
83
+ def retrieve_bank_account(id, request_options: {})
84
+ raw = @http.request(method: :get, path: "/customers/#{id}/bank-account", request_options:)
85
+ CustomerBankAccount.deserialize(raw)
86
+ end
87
+
88
+ # Submit documents for KYC review
89
+ #
90
+ # Signal that all KYC documents have been uploaded and are ready for review. Submits documents to the verification pipeline. Also handles resubmission after document corrections.
91
+ #
92
+ # @param id [String] Identificador único do cliente
93
+ # @param request_options [Hash] Request options.
94
+ # @return [Object]
95
+ def start_kyc_review(id, request_options: {})
96
+ @http.request(method: :post, path: "/customers/#{id}/kyc-review", request_options:)
97
+ nil
98
+ end
99
+
100
+ # Update customer data
101
+ #
102
+ # Update customer fields such as email or phone; `cpf`, `cnpj`, `name`, `trading_name`, and `external_id` are read-only
103
+ #
104
+ # @param id [String] Identificador único do cliente
105
+ # @param fields [Hash] Request body fields.
106
+ # @param request_options [Hash] Request options.
107
+ # @return [Object]
108
+ def update(id, request_options: {}, **fields)
109
+ body = Customer.serialize_update(**fields)
110
+ raw = @http.request(method: :patch, path: "/customers/#{id}", body:, request_options:)
111
+ Customer.deserialize(raw)
112
+ end
113
+
114
+ # Create or update customer bank account
115
+ #
116
+ # Create or update the bank account linked to this customer. This endpoint is available to biometrics session tokens so the kyc-app can collect disbursement bank data.
117
+ #
118
+ # @param id [String] Identificador único do cliente
119
+ # @param fields [Hash] Request body fields.
120
+ # @param request_options [Hash] Request options.
121
+ # @return [Object]
122
+ def upsert_bank_account(id, request_options: {}, **fields)
123
+ body = CustomerBankAccount.serialize_upsert_bank_account(**fields)
124
+ raw = @http.request(method: :post, path: "/customers/#{id}/bank-account", body:, request_options:)
125
+ CustomerBankAccount.deserialize(raw)
126
+ end
127
+
128
+ def credit_offers
129
+ @credit_offers ||= CreditOffers.new(@http)
130
+ end
131
+
132
+ def kyc_attachments
133
+ @kyc_attachments ||= KycAttachments.new(@http)
134
+ end
135
+
136
+ # Operations on the credit offers resource.
137
+ class CreditOffers
138
+ def initialize(http)
139
+ @http = http
140
+ end
141
+
142
+ # List credit offers for a customer
143
+ #
144
+ # List credit offers for a specific customer, filterable by `status`
145
+ #
146
+ # @param customer_id [String] Identificador único do cliente
147
+ # @param fields [Hash] Request body fields.
148
+ # @param request_options [Hash] Request options.
149
+ # @return [Object]
150
+ def list(customer_id, limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {}, **filters)
151
+ path = "/customers/#{customer_id}/credit-offers"
152
+ fetch_page = lambda do |cursor|
153
+ query = { limit:, starting_after: cursor || starting_after, **filters }
154
+ .reject { |_key, value| Internal.omitted?(value) }
155
+ body = @http.request(method: :get, path:, query:, request_options:)
156
+ { data: body[:data].map { |raw| CreditOffer.deserialize(raw) }, has_more: body[:has_more] }
157
+ end
158
+ Dinie::Page.from_fetch(fetch_page)
159
+ end
160
+ end
161
+
162
+ # Operations on the kyc attachments resource.
163
+ class KycAttachments
164
+ def initialize(http)
165
+ @http = http
166
+ end
167
+
168
+ # Upload a KYC attachment
169
+ #
170
+ # Upload a KYC attachment for the customer via `multipart/form-data`. For document requirements, send a `file`. For data-type requirements (e.g. email), send a `value` instead.
171
+ #
172
+ # @param customer_id [String] Identificador único do cliente
173
+ # @param fields [Hash] Request body fields.
174
+ # @param request_options [Hash] Request options.
175
+ # @return [Object]
176
+ def create(customer_id, request_options: {}, **upload)
177
+ form = Dinie.serialize_kyc_upload(**upload)
178
+ body = Dinie::Internal::Multipart.new(fields: form.fields, file: form.file)
179
+ raw = @http.request(method: :post, path: "/customers/#{customer_id}/kyc-attachments", body:, request_options:)
180
+ KycAttachmentResponse.deserialize(raw)
181
+ end
182
+
183
+ # Upload a KYC selfie
184
+ #
185
+ # Session-only upload of a selfie for biometric validation. Counterpart of the polymorphic `/kyc-attachments` route, dedicated to selfies: `evidence_type` (`selfie`) and `attachment_type` (`photo`) are implicit, so the partner only supplies `requirement_id` (`selfie_{subject_id}`) and the `file`. Requires a session token bound to the customer — a partner bearer is denied (403), even with `kyc:upload`.
186
+ #
187
+ # @param customer_id [String] Identificador único do cliente
188
+ # @param fields [Hash] Request body fields.
189
+ # @param request_options [Hash] Request options.
190
+ # @return [Object]
191
+ def upload_selfie(customer_id, request_options: {}, **fields)
192
+ body = fields
193
+ raw = @http.request(method: :post, path: "/customers/#{customer_id}/kyc-attachments/selfie", body:,
194
+ request_options:)
195
+ KycAttachmentResponse.deserialize(raw)
196
+ end
197
+ end
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/paginator"
4
+ require_relative "../types/loan"
5
+ require_relative "../types/transaction"
6
+
7
+ module Dinie
8
+ module Resources
9
+ # Operations on the loans resource.
10
+ class Loans
11
+ def initialize(http)
12
+ @http = http
13
+ end
14
+
15
+ # Create a loan
16
+ #
17
+ # Create a loan from a credit offer and accepted simulation; the CCB contract is generated synchronously and the loan starts in `awaiting_signatures` status
18
+ #
19
+ # @param fields [Hash] Request body fields.
20
+ # @param request_options [Hash] Request options.
21
+ # @return [Object]
22
+ def create(request_options: {}, **fields)
23
+ body = Loan.serialize_create(**fields)
24
+ raw = @http.request(method: :post, path: "/loans", body:, request_options:)
25
+ Loan.deserialize(raw)
26
+ end
27
+
28
+ # Retrieve a loan
29
+ #
30
+ # Return the full loan object with lifecycle details
31
+ #
32
+ # @param id [String] Identificador único do empréstimo
33
+ # @param request_options [Hash] Request options.
34
+ # @return [Object]
35
+ def retrieve(id, request_options: {})
36
+ raw = @http.request(method: :get, path: "/loans/#{id}", request_options:)
37
+ Loan.deserialize(raw)
38
+ end
39
+
40
+ def transactions
41
+ @transactions ||= Transactions.new(@http)
42
+ end
43
+
44
+ # Operations on the transactions resource.
45
+ class Transactions
46
+ def initialize(http)
47
+ @http = http
48
+ end
49
+
50
+ # List loan transactions
51
+ #
52
+ # List installment transactions for a loan with due dates, amounts, and payment status
53
+ #
54
+ # @param loan_id [String] Identificador único do empréstimo
55
+ # @param request_options [Hash] Request options.
56
+ # @return [Object]
57
+ def list(loan_id, limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {})
58
+ path = "/loans/#{loan_id}/transactions"
59
+ fetch_page = lambda do |cursor|
60
+ query = { limit:, starting_after: cursor || starting_after }
61
+ .reject { |_key, value| Internal.omitted?(value) }
62
+ body = @http.request(method: :get, path:, query:, request_options:)
63
+ { data: body[:data].map { |raw| Transaction.deserialize(raw) }, has_more: body[:has_more] }
64
+ end
65
+ Dinie::Page.from_fetch(fetch_page)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/paginator"
4
+ require_relative "../types/webhook_endpoint"
5
+ require_relative "../types/webhook_secret_rotation"
6
+
7
+ module Dinie
8
+ module Resources
9
+ # Operations on the webhook endpoints resource.
10
+ class WebhookEndpoints
11
+ def initialize(http)
12
+ @http = http
13
+ end
14
+
15
+ # Create a webhook endpoint
16
+ #
17
+ # Create a webhook endpoint; the HMAC signing `secret` is returned only in this response
18
+ #
19
+ # @param fields [Hash] Request body fields.
20
+ # @param request_options [Hash] Request options.
21
+ # @return [Object]
22
+ def create(request_options: {}, **fields)
23
+ body = WebhookEndpoint.serialize_create(**fields)
24
+ raw = @http.request(method: :post, path: "/webhooks/endpoints", body:, request_options:)
25
+ WebhookEndpointWithSecret.deserialize(raw)
26
+ end
27
+
28
+ # Delete a webhook endpoint
29
+ #
30
+ # Delete a webhook endpoint and stop all deliveries
31
+ #
32
+ # @param id [String] Identificador único do endpoint de webhook
33
+ # @param request_options [Hash] Request options.
34
+ # @return [Object]
35
+ def delete(id, request_options: {})
36
+ @http.request(method: :delete, path: "/webhooks/endpoints/#{id}", request_options:)
37
+ nil
38
+ end
39
+
40
+ # List webhook endpoints
41
+ #
42
+ # List all configured webhook endpoints with URL, subscribed events, and status
43
+ #
44
+ # @param request_options [Hash] Request options.
45
+ # @return [Object]
46
+ def list(limit: Internal::OMIT, starting_after: Internal::OMIT, request_options: {})
47
+ fetch_page = lambda do |cursor|
48
+ query = { limit:, starting_after: cursor || starting_after }
49
+ .reject { |_key, value| Internal.omitted?(value) }
50
+ body = @http.request(method: :get, path: "/webhooks/endpoints", query:, request_options:)
51
+ { data: body[:data].map { |raw| WebhookEndpoint.deserialize(raw) }, has_more: body[:has_more] }
52
+ end
53
+ Dinie::Page.from_fetch(fetch_page)
54
+ end
55
+
56
+ # Retrieve a webhook endpoint
57
+ #
58
+ # Return details of a specific webhook endpoint including URL, events, and status
59
+ #
60
+ # @param id [String] Identificador único do endpoint de webhook
61
+ # @param request_options [Hash] Request options.
62
+ # @return [Object]
63
+ def retrieve(id, request_options: {})
64
+ raw = @http.request(method: :get, path: "/webhooks/endpoints/#{id}", request_options:)
65
+ WebhookEndpoint.deserialize(raw)
66
+ end
67
+
68
+ # Rotate the signing secret
69
+ #
70
+ # Rotate the HMAC signing secret; the previous secret remains valid for the grace period
71
+ #
72
+ # @param id [String] Identificador único do endpoint de webhook
73
+ # @param fields [Hash] Request body fields.
74
+ # @param request_options [Hash] Request options.
75
+ # @return [Object]
76
+ def rotate_secret(id, request_options: {}, **fields)
77
+ body = fields
78
+ raw = @http.request(method: :post, path: "/webhooks/endpoints/#{id}/rotate-secret", body:, request_options:)
79
+ WebhookSecretRotation.deserialize(raw)
80
+ end
81
+
82
+ # Update a webhook endpoint
83
+ #
84
+ # Update URL, events, description, or status of a webhook endpoint
85
+ #
86
+ # @param id [String] Identificador único do endpoint de webhook
87
+ # @param fields [Hash] Request body fields.
88
+ # @param request_options [Hash] Request options.
89
+ # @return [Object]
90
+ def update(id, request_options: {}, **fields)
91
+ body = WebhookEndpoint.serialize_update(**fields)
92
+ raw = @http.request(method: :patch, path: "/webhooks/endpoints/#{id}", body:, request_options:)
93
+ WebhookEndpoint.deserialize(raw)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "resources/banks"
4
+ require_relative "resources/biometrics"
5
+ require_relative "resources/credentials"
6
+ require_relative "resources/credit_offers"
7
+ require_relative "resources/customers"
8
+ require_relative "resources/loans"
9
+ require_relative "resources/webhook_endpoints"
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class Bank < Internal::Model
7
+ attribute :display_name, :id, :name
8
+
9
+ def self.deserialize(raw)
10
+ new(
11
+ display_name: raw[:display_name],
12
+ id: raw[:id],
13
+ name: raw[:name]
14
+ )
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class BiometricsSession < Internal::Model
7
+ attribute :expires_at, :session_url
8
+
9
+ def self.deserialize(raw)
10
+ new(
11
+ expires_at: raw[:expires_at],
12
+ session_url: raw[:session_url]
13
+ )
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module BiometricsSessionExchangeResponseTokenType
7
+ BEARER = "bearer"
8
+ ALL = [BEARER].freeze
9
+ end
10
+
11
+ class BiometricsSessionExchangeResponse < Internal::Model
12
+ attribute :access_token, :customer_id, :expires_in, :token_type
13
+
14
+ def self.deserialize(raw)
15
+ new(
16
+ access_token: raw[:access_token],
17
+ customer_id: raw[:customer_id],
18
+ expires_in: raw[:expires_in],
19
+ token_type: raw[:token_type]
20
+ )
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module CredentialStatus
7
+ ACTIVE = "active"
8
+ REVOKED = "revoked"
9
+ ALL = [ACTIVE, REVOKED].freeze
10
+ end
11
+
12
+ class Credential < Internal::Model
13
+ attribute :client_id, :created_at, :description, :expires_at, :id, :last_used_at, :name, :status, :updated_at
14
+
15
+ def self.deserialize(raw)
16
+ new(
17
+ client_id: raw[:client_id],
18
+ created_at: raw[:created_at],
19
+ description: raw[:description],
20
+ expires_at: raw[:expires_at],
21
+ id: raw[:id],
22
+ last_used_at: raw[:last_used_at],
23
+ name: raw[:name],
24
+ status: raw[:status],
25
+ updated_at: raw[:updated_at]
26
+ )
27
+ end
28
+
29
+ def self.serialize_create(name:, expires_at: Internal::OMIT)
30
+ { expires_at:, name: }.reject { |_key, value| Internal.omitted?(value) }
31
+ end
32
+ end
33
+
34
+ class CredentialWithSecret < Credential
35
+ attribute :client_secret
36
+
37
+ def self.deserialize(raw)
38
+ new(
39
+ client_id: raw[:client_id],
40
+ client_secret: raw[:client_secret],
41
+ created_at: raw[:created_at],
42
+ description: raw[:description],
43
+ expires_at: raw[:expires_at],
44
+ id: raw[:id],
45
+ last_used_at: raw[:last_used_at],
46
+ name: raw[:name],
47
+ status: raw[:status],
48
+ updated_at: raw[:updated_at]
49
+ )
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class FixedInstallmentCreditOffer < Internal::Model
7
+ attribute :approved_amount, :created_at, :customer_id, :due_date_rule, :external_id, :id, :installments,
8
+ :min_amount, :monthly_interest_rate, :status, :updated_at, :valid_until
9
+
10
+ def self.deserialize(raw)
11
+ new(
12
+ approved_amount: raw[:approved_amount],
13
+ created_at: raw[:created_at],
14
+ customer_id: raw[:customer_id],
15
+ due_date_rule: raw[:due_date_rule],
16
+ external_id: raw[:external_id],
17
+ id: raw[:id],
18
+ installments: raw[:installments],
19
+ min_amount: raw[:min_amount],
20
+ monthly_interest_rate: raw[:monthly_interest_rate],
21
+ status: raw[:status],
22
+ updated_at: raw[:updated_at],
23
+ valid_until: raw[:valid_until]
24
+ )
25
+ end
26
+ end
27
+
28
+ class RangeInstallmentCreditOffer < Internal::Model
29
+ attribute :approved_amount, :created_at, :customer_id, :due_date_rule, :external_id, :id, :max_installments,
30
+ :min_amount, :min_installments, :monthly_interest_rate, :status, :updated_at, :valid_until
31
+
32
+ def self.deserialize(raw)
33
+ new(
34
+ approved_amount: raw[:approved_amount],
35
+ created_at: raw[:created_at],
36
+ customer_id: raw[:customer_id],
37
+ due_date_rule: raw[:due_date_rule],
38
+ external_id: raw[:external_id],
39
+ id: raw[:id],
40
+ max_installments: raw[:max_installments],
41
+ min_amount: raw[:min_amount],
42
+ min_installments: raw[:min_installments],
43
+ monthly_interest_rate: raw[:monthly_interest_rate],
44
+ status: raw[:status],
45
+ updated_at: raw[:updated_at],
46
+ valid_until: raw[:valid_until]
47
+ )
48
+ end
49
+ end
50
+
51
+ module CreditOffer
52
+ def self.deserialize(raw)
53
+ if raw.key?(:installments)
54
+ FixedInstallmentCreditOffer.deserialize(raw)
55
+ elsif raw.key?(:max_installments)
56
+ RangeInstallmentCreditOffer.deserialize(raw)
57
+ else
58
+ RangeInstallmentCreditOffer.deserialize(raw)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+ require_relative "kyc"
5
+
6
+ module Dinie
7
+ module CustomerStatus
8
+ CREATING = "creating"
9
+ PENDING_KYC = "pending_kyc"
10
+ UNDER_REVIEW = "under_review"
11
+ ACTIVE = "active"
12
+ DENIED = "denied"
13
+ ALL = [CREATING, PENDING_KYC, UNDER_REVIEW, ACTIVE, DENIED].freeze
14
+ end
15
+
16
+ class Customer < Internal::Model
17
+ attribute :cnpj, :cpf, :created_at, :email, :external_id, :id, :kyc, :metadata, :name, :phone, :status,
18
+ :trading_name, :updated_at
19
+
20
+ def self.deserialize(raw)
21
+ new(
22
+ cnpj: raw[:cnpj],
23
+ cpf: raw[:cpf],
24
+ created_at: raw[:created_at],
25
+ email: raw[:email],
26
+ external_id: raw[:external_id],
27
+ id: raw[:id],
28
+ kyc: raw[:kyc]&.map { |requirement| Dinie.deserialize_kyc_requirement(requirement) },
29
+ metadata: raw[:metadata],
30
+ name: raw[:name],
31
+ phone: raw[:phone],
32
+ status: raw[:status],
33
+ trading_name: raw[:trading_name],
34
+ updated_at: raw[:updated_at]
35
+ )
36
+ end
37
+
38
+ def self.serialize_create(cnpj:, cpf:, email:, phone:, external_id: Internal::OMIT, name: Internal::OMIT)
39
+ { cnpj:, cpf:, email:, external_id:, name:, phone: }.reject { |_key, value| Internal.omitted?(value) }
40
+ end
41
+
42
+ def self.serialize_update(email: Internal::OMIT, phone: Internal::OMIT)
43
+ { email:, phone: }.reject { |_key, value| Internal.omitted?(value) }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module CustomerBankAccountKind
7
+ CHECKING = "checking"
8
+ SAVING = "saving"
9
+ PAYMENT = "payment"
10
+ ALL = [CHECKING, SAVING, PAYMENT].freeze
11
+ end
12
+
13
+ class CustomerBankAccount < Internal::Model
14
+ attribute :bank_id, :bank_name, :branch, :digit, :id, :kind, :number, :updated_at
15
+
16
+ def self.deserialize(raw)
17
+ new(
18
+ bank_id: raw[:bank_id],
19
+ bank_name: raw[:bank_name],
20
+ branch: raw[:branch],
21
+ digit: raw[:digit],
22
+ id: raw[:id],
23
+ kind: raw[:kind],
24
+ number: raw[:number],
25
+ updated_at: raw[:updated_at]
26
+ )
27
+ end
28
+
29
+ def self.serialize_upsert_bank_account(bank_id:, branch:, digit:, kind:, number:)
30
+ { bank_account: { bank_id:, branch:, digit:, kind:, number: } }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dinie
4
+ module Internal
5
+ ID_PATTERNS = {
6
+ api_client: /\Adinie_ci_(live|test)_[A-Za-z0-9]+\z/,
7
+ bank_account: /\Aba_[0-9a-f]{32}\z/,
8
+ credit_offer: /\Aco_[0-9a-f]{32}\z/,
9
+ customer: /\Acust_[0-9a-f]{32}\z/,
10
+ event: /\Aevt_[0-9a-f]{32}\z/,
11
+ loan: /\Aln_[0-9a-f]{32}\z/,
12
+ simulation: /\Asim_[0-9a-f]{32}\z/,
13
+ transaction: /\Atx_[0-9a-f]{32}\z/,
14
+ webhook_delivery: /\Adlv_[0-9a-f]{32}\z/,
15
+ webhook_endpoint: /\Awe_[0-9a-f]{32}\z/
16
+ }.freeze
17
+ end
18
+ end