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,458 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module ReviewStatus
7
+ PENDING = "pending"
8
+ ACCEPTED = "accepted"
9
+ REJECTED = "rejected"
10
+ ALL = [PENDING, ACCEPTED, REJECTED].freeze
11
+ end
12
+
13
+ module KycSubjectType
14
+ APPLICANT = "applicant"
15
+ CO_OWNER = "co_owner"
16
+ ALL = [APPLICANT, CO_OWNER].freeze
17
+ end
18
+
19
+ class KycSubject < Internal::Model
20
+ attribute :id, :name, :subject_type
21
+
22
+ def self.deserialize(raw)
23
+ new(
24
+ id: raw[:id],
25
+ name: raw[:name],
26
+ subject_type: raw[:subject_type]
27
+ )
28
+ end
29
+ end
30
+
31
+ class ArticlesOfAssociationAttachment < Internal::Model
32
+ attribute :attachment_type, :submitted
33
+
34
+ def self.deserialize(raw)
35
+ new(
36
+ attachment_type: raw[:attachment_type],
37
+ submitted: raw[:submitted]
38
+ )
39
+ end
40
+ end
41
+
42
+ class CompanyDocumentAttachment < Internal::Model
43
+ attribute :attachment_type, :submitted
44
+
45
+ def self.deserialize(raw)
46
+ new(
47
+ attachment_type: raw[:attachment_type],
48
+ submitted: raw[:submitted]
49
+ )
50
+ end
51
+ end
52
+
53
+ class EiMeiDocumentsAttachment < Internal::Model
54
+ attribute :attachment_type, :submitted
55
+
56
+ def self.deserialize(raw)
57
+ new(
58
+ attachment_type: raw[:attachment_type],
59
+ submitted: raw[:submitted]
60
+ )
61
+ end
62
+ end
63
+
64
+ class EireliIncorporationStatementAttachment < Internal::Model
65
+ attribute :attachment_type, :submitted
66
+
67
+ def self.deserialize(raw)
68
+ new(
69
+ attachment_type: raw[:attachment_type],
70
+ submitted: raw[:submitted]
71
+ )
72
+ end
73
+ end
74
+
75
+ class EmailAttachment < Internal::Model
76
+ attribute :attachment_type, :submitted
77
+
78
+ def self.deserialize(raw)
79
+ new(
80
+ attachment_type: raw[:attachment_type],
81
+ submitted: raw[:submitted]
82
+ )
83
+ end
84
+ end
85
+
86
+ class IdentityCnhAttachment < Internal::Model
87
+ attribute :attachment_type, :submitted
88
+
89
+ def self.deserialize(raw)
90
+ new(
91
+ attachment_type: raw[:attachment_type],
92
+ submitted: raw[:submitted]
93
+ )
94
+ end
95
+ end
96
+
97
+ class IdentityRgAttachment < Internal::Model
98
+ attribute :attachment_type, :submitted
99
+
100
+ def self.deserialize(raw)
101
+ new(
102
+ attachment_type: raw[:attachment_type],
103
+ submitted: raw[:submitted]
104
+ )
105
+ end
106
+ end
107
+
108
+ class IncomeStatementAttachment < Internal::Model
109
+ attribute :attachment_type, :submitted
110
+
111
+ def self.deserialize(raw)
112
+ new(
113
+ attachment_type: raw[:attachment_type],
114
+ submitted: raw[:submitted]
115
+ )
116
+ end
117
+ end
118
+
119
+ class ProofOfAddressAttachment < Internal::Model
120
+ attribute :attachment_type, :submitted
121
+
122
+ def self.deserialize(raw)
123
+ new(
124
+ attachment_type: raw[:attachment_type],
125
+ submitted: raw[:submitted]
126
+ )
127
+ end
128
+ end
129
+
130
+ class SelfieAttachment < Internal::Model
131
+ attribute :attachment_type, :submitted
132
+
133
+ def self.deserialize(raw)
134
+ new(
135
+ attachment_type: raw[:attachment_type],
136
+ submitted: raw[:submitted]
137
+ )
138
+ end
139
+ end
140
+
141
+ def self.kyc_dispatch_error(union, discriminator, value)
142
+ Dinie::Error.new(
143
+ "Unknown #{union} #{discriminator}: #{value.inspect}. This discriminator value is not " \
144
+ "declared in the openapi oneOf mapping — the SDK and contract are out of sync."
145
+ )
146
+ end
147
+
148
+ class ArticlesOfAssociationSubmitted < Internal::Model
149
+ attribute :attachments, :evidence_type, :review_reason, :review_status
150
+
151
+ def self.deserialize(raw)
152
+ new(
153
+ attachments: raw[:attachments].map { |item| ArticlesOfAssociationAttachment.deserialize(item) },
154
+ evidence_type: raw[:evidence_type],
155
+ review_reason: raw[:review_reason],
156
+ review_status: raw[:review_status]
157
+ )
158
+ end
159
+ end
160
+
161
+ class CompanyDocumentSubmitted < Internal::Model
162
+ attribute :attachments, :evidence_type, :review_reason, :review_status
163
+
164
+ def self.deserialize(raw)
165
+ new(
166
+ attachments: raw[:attachments].map { |item| CompanyDocumentAttachment.deserialize(item) },
167
+ evidence_type: raw[:evidence_type],
168
+ review_reason: raw[:review_reason],
169
+ review_status: raw[:review_status]
170
+ )
171
+ end
172
+ end
173
+
174
+ class EiMeiDocumentsSubmitted < Internal::Model
175
+ attribute :attachments, :evidence_type, :review_reason, :review_status
176
+
177
+ def self.deserialize(raw)
178
+ new(
179
+ attachments: raw[:attachments].map { |item| EiMeiDocumentsAttachment.deserialize(item) },
180
+ evidence_type: raw[:evidence_type],
181
+ review_reason: raw[:review_reason],
182
+ review_status: raw[:review_status]
183
+ )
184
+ end
185
+ end
186
+
187
+ class EireliIncorporationStatementSubmitted < Internal::Model
188
+ attribute :attachments, :evidence_type, :review_reason, :review_status
189
+
190
+ def self.deserialize(raw)
191
+ new(
192
+ attachments: raw[:attachments].map { |item| EireliIncorporationStatementAttachment.deserialize(item) },
193
+ evidence_type: raw[:evidence_type],
194
+ review_reason: raw[:review_reason],
195
+ review_status: raw[:review_status]
196
+ )
197
+ end
198
+ end
199
+
200
+ class EmailSubmitted < Internal::Model
201
+ attribute :attachments, :evidence_type, :review_reason, :review_status
202
+
203
+ def self.deserialize(raw)
204
+ new(
205
+ attachments: raw[:attachments].map { |item| EmailAttachment.deserialize(item) },
206
+ evidence_type: raw[:evidence_type],
207
+ review_reason: raw[:review_reason],
208
+ review_status: raw[:review_status]
209
+ )
210
+ end
211
+ end
212
+
213
+ class IdentityCnhSubmitted < Internal::Model
214
+ attribute :attachments, :evidence_type, :review_reason, :review_status
215
+
216
+ def self.deserialize(raw)
217
+ new(
218
+ attachments: raw[:attachments].map { |item| IdentityCnhAttachment.deserialize(item) },
219
+ evidence_type: raw[:evidence_type],
220
+ review_reason: raw[:review_reason],
221
+ review_status: raw[:review_status]
222
+ )
223
+ end
224
+ end
225
+
226
+ class IdentityRgSubmitted < Internal::Model
227
+ attribute :attachments, :evidence_type, :review_reason, :review_status
228
+
229
+ def self.deserialize(raw)
230
+ new(
231
+ attachments: raw[:attachments].map { |item| IdentityRgAttachment.deserialize(item) },
232
+ evidence_type: raw[:evidence_type],
233
+ review_reason: raw[:review_reason],
234
+ review_status: raw[:review_status]
235
+ )
236
+ end
237
+ end
238
+
239
+ class IncomeStatementSubmitted < Internal::Model
240
+ attribute :attachments, :evidence_type, :review_reason, :review_status
241
+
242
+ def self.deserialize(raw)
243
+ new(
244
+ attachments: raw[:attachments].map { |item| IncomeStatementAttachment.deserialize(item) },
245
+ evidence_type: raw[:evidence_type],
246
+ review_reason: raw[:review_reason],
247
+ review_status: raw[:review_status]
248
+ )
249
+ end
250
+ end
251
+
252
+ class ProofOfAddressSubmitted < Internal::Model
253
+ attribute :attachments, :evidence_type, :review_reason, :review_status
254
+
255
+ def self.deserialize(raw)
256
+ new(
257
+ attachments: raw[:attachments].map { |item| ProofOfAddressAttachment.deserialize(item) },
258
+ evidence_type: raw[:evidence_type],
259
+ review_reason: raw[:review_reason],
260
+ review_status: raw[:review_status]
261
+ )
262
+ end
263
+ end
264
+
265
+ class SelfieSubmitted < Internal::Model
266
+ attribute :attachments, :evidence_type, :review_reason, :review_status
267
+
268
+ def self.deserialize(raw)
269
+ new(
270
+ attachments: raw[:attachments].map { |item| SelfieAttachment.deserialize(item) },
271
+ evidence_type: raw[:evidence_type],
272
+ review_reason: raw[:review_reason],
273
+ review_status: raw[:review_status]
274
+ )
275
+ end
276
+ end
277
+
278
+ def self.deserialize_identity_submitted(raw)
279
+ case raw[:evidence_type]
280
+ when "cnh" then IdentityCnhSubmitted.deserialize(raw)
281
+ when "rg" then IdentityRgSubmitted.deserialize(raw)
282
+ else raise kyc_dispatch_error("IdentitySubmitted", "evidence_type", raw[:evidence_type])
283
+ end
284
+ end
285
+
286
+ class KycRequirement < Internal::Model
287
+ end
288
+
289
+ class IdentityRequirement < KycRequirement
290
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :subject, :submitted
291
+
292
+ def self.deserialize(raw)
293
+ new(
294
+ label: raw[:label],
295
+ mandatory: raw[:mandatory],
296
+ requirement_id: raw[:requirement_id],
297
+ requirement_type: raw[:requirement_type],
298
+ subject: KycSubject.deserialize(raw[:subject]),
299
+ submitted: raw[:submitted] && Dinie.deserialize_identity_submitted(raw[:submitted])
300
+ )
301
+ end
302
+ end
303
+
304
+ class SelfieRequirement < KycRequirement
305
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :subject, :submitted
306
+
307
+ def self.deserialize(raw)
308
+ new(
309
+ label: raw[:label],
310
+ mandatory: raw[:mandatory],
311
+ requirement_id: raw[:requirement_id],
312
+ requirement_type: raw[:requirement_type],
313
+ subject: KycSubject.deserialize(raw[:subject]),
314
+ submitted: raw[:submitted] && SelfieSubmitted.deserialize(raw[:submitted])
315
+ )
316
+ end
317
+ end
318
+
319
+ class ProofOfAddressRequirement < KycRequirement
320
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :subject, :submitted
321
+
322
+ def self.deserialize(raw)
323
+ new(
324
+ label: raw[:label],
325
+ mandatory: raw[:mandatory],
326
+ requirement_id: raw[:requirement_id],
327
+ requirement_type: raw[:requirement_type],
328
+ subject: KycSubject.deserialize(raw[:subject]),
329
+ submitted: raw[:submitted] && ProofOfAddressSubmitted.deserialize(raw[:submitted])
330
+ )
331
+ end
332
+ end
333
+
334
+ class CompanyDocumentRequirement < KycRequirement
335
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :submitted
336
+
337
+ def self.deserialize(raw)
338
+ new(
339
+ label: raw[:label],
340
+ mandatory: raw[:mandatory],
341
+ requirement_id: raw[:requirement_id],
342
+ requirement_type: raw[:requirement_type],
343
+ submitted: raw[:submitted] && CompanyDocumentSubmitted.deserialize(raw[:submitted])
344
+ )
345
+ end
346
+ end
347
+
348
+ class EiMeiDocumentsRequirement < KycRequirement
349
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :submitted
350
+
351
+ def self.deserialize(raw)
352
+ new(
353
+ label: raw[:label],
354
+ mandatory: raw[:mandatory],
355
+ requirement_id: raw[:requirement_id],
356
+ requirement_type: raw[:requirement_type],
357
+ submitted: raw[:submitted] && EiMeiDocumentsSubmitted.deserialize(raw[:submitted])
358
+ )
359
+ end
360
+ end
361
+
362
+ class IncomeStatementRequirement < KycRequirement
363
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :submitted
364
+
365
+ def self.deserialize(raw)
366
+ new(
367
+ label: raw[:label],
368
+ mandatory: raw[:mandatory],
369
+ requirement_id: raw[:requirement_id],
370
+ requirement_type: raw[:requirement_type],
371
+ submitted: raw[:submitted] && IncomeStatementSubmitted.deserialize(raw[:submitted])
372
+ )
373
+ end
374
+ end
375
+
376
+ class ArticlesOfAssociationRequirement < KycRequirement
377
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :submitted
378
+
379
+ def self.deserialize(raw)
380
+ new(
381
+ label: raw[:label],
382
+ mandatory: raw[:mandatory],
383
+ requirement_id: raw[:requirement_id],
384
+ requirement_type: raw[:requirement_type],
385
+ submitted: raw[:submitted] && ArticlesOfAssociationSubmitted.deserialize(raw[:submitted])
386
+ )
387
+ end
388
+ end
389
+
390
+ class EireliIncorporationStatementRequirement < KycRequirement
391
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :submitted
392
+
393
+ def self.deserialize(raw)
394
+ new(
395
+ label: raw[:label],
396
+ mandatory: raw[:mandatory],
397
+ requirement_id: raw[:requirement_id],
398
+ requirement_type: raw[:requirement_type],
399
+ submitted: raw[:submitted] && EireliIncorporationStatementSubmitted.deserialize(raw[:submitted])
400
+ )
401
+ end
402
+ end
403
+
404
+ class EmailRequirement < KycRequirement
405
+ attribute :label, :mandatory, :requirement_id, :requirement_type, :subject, :submitted
406
+
407
+ def self.deserialize(raw)
408
+ new(
409
+ label: raw[:label],
410
+ mandatory: raw[:mandatory],
411
+ requirement_id: raw[:requirement_id],
412
+ requirement_type: raw[:requirement_type],
413
+ subject: KycSubject.deserialize(raw[:subject]),
414
+ submitted: raw[:submitted] && EmailSubmitted.deserialize(raw[:submitted])
415
+ )
416
+ end
417
+ end
418
+
419
+ def self.deserialize_kyc_requirement(raw)
420
+ case raw[:requirement_type]
421
+ when "identity" then IdentityRequirement.deserialize(raw)
422
+ when "selfie" then SelfieRequirement.deserialize(raw)
423
+ when "proof_of_address" then ProofOfAddressRequirement.deserialize(raw)
424
+ when "company_document" then CompanyDocumentRequirement.deserialize(raw)
425
+ when "ei_mei_documents" then EiMeiDocumentsRequirement.deserialize(raw)
426
+ when "income_statement" then IncomeStatementRequirement.deserialize(raw)
427
+ when "articles_of_association" then ArticlesOfAssociationRequirement.deserialize(raw)
428
+ when "eireli_incorporation_statement" then EireliIncorporationStatementRequirement.deserialize(raw)
429
+ when "email" then EmailRequirement.deserialize(raw)
430
+ else raise kyc_dispatch_error("KycRequirement", "requirement_type", raw[:requirement_type])
431
+ end
432
+ end
433
+
434
+ KycUploadForm = Struct.new(:fields, :file, keyword_init: true)
435
+
436
+ KYC_FILE_UPLOAD_EVIDENCE_TYPES = %w[
437
+ cnh rg selfie proof_of_address ccmei ei_mei income_statement articles_of_association eireli_incorporation_statement
438
+ ].freeze
439
+
440
+ def self.serialize_kyc_upload(evidence_type:, requirement_id:, attachment_type:, file: Internal::OMIT,
441
+ value: Internal::OMIT)
442
+ fields = { attachment_type:, evidence_type:, requirement_id: }
443
+ case evidence_type
444
+ when *KYC_FILE_UPLOAD_EVIDENCE_TYPES
445
+ if Internal.omitted?(file)
446
+ raise Dinie::Error, "KYC upload evidence_type=#{evidence_type.inspect} requires a `file:`"
447
+ end
448
+
449
+ KycUploadForm.new(fields:, file:)
450
+ when "email"
451
+ raise Dinie::Error, "KYC upload evidence_type=\"email\" requires a `value:`" if Internal.omitted?(value)
452
+
453
+ KycUploadForm.new(fields: fields.merge(value:), file: nil)
454
+ else
455
+ raise kyc_dispatch_error("KycUpload", "evidence_type", evidence_type)
456
+ end
457
+ end
458
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class KycAttachmentResponse < Internal::Model
7
+ attribute :attachment_type, :submitted
8
+
9
+ def self.deserialize(raw)
10
+ new(
11
+ attachment_type: raw[:attachment_type],
12
+ submitted: raw[:submitted]
13
+ )
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module LoanStatus
7
+ AWAITING_SIGNATURES = "awaiting_signatures"
8
+ PROCESSING = "processing"
9
+ ACTIVE = "active"
10
+ FINISHED = "finished"
11
+ CANCELLED = "cancelled"
12
+ ERROR = "error"
13
+ ALL = [AWAITING_SIGNATURES, PROCESSING, ACTIVE, FINISHED, CANCELLED, ERROR].freeze
14
+ end
15
+
16
+ class Loan < Internal::Model
17
+ attribute :annual_cet_rate, :annual_interest_rate, :ccb_number, :created_at, :credit_offer_id, :customer_id,
18
+ :disbursement_method, :first_due_date, :id, :installment_amount, :installment_count, :iof_amount, :monthly_cet_rate, :monthly_interest_rate, :principal_amount, :requested_amount, :signing_url, :simulation_id, :status, :total_amount, :updated_at
19
+
20
+ def self.deserialize(raw)
21
+ new(
22
+ annual_cet_rate: raw[:annual_cet_rate],
23
+ annual_interest_rate: raw[:annual_interest_rate],
24
+ ccb_number: raw[:ccb_number],
25
+ created_at: raw[:created_at],
26
+ credit_offer_id: raw[:credit_offer_id],
27
+ customer_id: raw[:customer_id],
28
+ disbursement_method: raw[:disbursement_method],
29
+ first_due_date: raw[:first_due_date],
30
+ id: raw[:id],
31
+ installment_amount: raw[:installment_amount],
32
+ installment_count: raw[:installment_count],
33
+ iof_amount: raw[:iof_amount],
34
+ monthly_cet_rate: raw[:monthly_cet_rate],
35
+ monthly_interest_rate: raw[:monthly_interest_rate],
36
+ principal_amount: raw[:principal_amount],
37
+ requested_amount: raw[:requested_amount],
38
+ signing_url: raw[:signing_url],
39
+ simulation_id: raw[:simulation_id],
40
+ status: raw[:status],
41
+ total_amount: raw[:total_amount],
42
+ updated_at: raw[:updated_at]
43
+ )
44
+ end
45
+
46
+ def self.serialize_create(credit_offer_id:, first_due_date:, installment_amount:, installment_count:,
47
+ simulation_id:)
48
+ { credit_offer_id:, first_due_date:, installment_amount:, installment_count:, simulation_id: }
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dinie
4
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class Simulation < Internal::Model
7
+ attribute :annual_cet_rate, :annual_interest_rate, :created_at, :credit_offer_id, :fee_amount, :first_due_date,
8
+ :id, :installment_amount, :installment_count, :interest_amount, :iof_amount, :monthly_cet_rate, :monthly_interest_rate, :principal_amount, :requested_amount, :total_amount
9
+
10
+ def self.deserialize(raw)
11
+ new(
12
+ annual_cet_rate: raw[:annual_cet_rate],
13
+ annual_interest_rate: raw[:annual_interest_rate],
14
+ created_at: raw[:created_at],
15
+ credit_offer_id: raw[:credit_offer_id],
16
+ fee_amount: raw[:fee_amount],
17
+ first_due_date: raw[:first_due_date],
18
+ id: raw[:id],
19
+ installment_amount: raw[:installment_amount],
20
+ installment_count: raw[:installment_count],
21
+ interest_amount: raw[:interest_amount],
22
+ iof_amount: raw[:iof_amount],
23
+ monthly_cet_rate: raw[:monthly_cet_rate],
24
+ monthly_interest_rate: raw[:monthly_interest_rate],
25
+ principal_amount: raw[:principal_amount],
26
+ requested_amount: raw[:requested_amount],
27
+ total_amount: raw[:total_amount]
28
+ )
29
+ end
30
+
31
+ def self.serialize_create_simulation(installment_count:, requested_amount:)
32
+ { installment_count:, requested_amount: }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module TransactionStatus
7
+ PENDING = "pending"
8
+ PAID = "paid"
9
+ OVERDUE = "overdue"
10
+ PARTIALLY_PAID = "partially_paid"
11
+ ALL = [PENDING, PAID, OVERDUE, PARTIALLY_PAID].freeze
12
+ end
13
+
14
+ module TransactionType
15
+ INSTALLMENT = "installment"
16
+ ALL = [INSTALLMENT].freeze
17
+ end
18
+
19
+ class Transaction < Internal::Model
20
+ attribute :amount_due, :amount_paid, :amount_remaining, :created_at, :days_overdue, :due_date, :fees, :id,
21
+ :interest, :loan_id, :paid_at, :principal, :status, :type, :updated_at
22
+
23
+ def self.deserialize(raw)
24
+ new(
25
+ amount_due: raw[:amount_due],
26
+ amount_paid: raw[:amount_paid],
27
+ amount_remaining: raw[:amount_remaining],
28
+ created_at: raw[:created_at],
29
+ days_overdue: raw[:days_overdue],
30
+ due_date: raw[:due_date],
31
+ fees: raw[:fees],
32
+ id: raw[:id],
33
+ interest: raw[:interest],
34
+ loan_id: raw[:loan_id],
35
+ paid_at: raw[:paid_at],
36
+ principal: raw[:principal],
37
+ status: raw[:status],
38
+ type: raw[:type],
39
+ updated_at: raw[:updated_at]
40
+ )
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ module WebhookEndpointStatus
7
+ ACTIVE = "active"
8
+ DISABLED = "disabled"
9
+ ALL = [ACTIVE, DISABLED].freeze
10
+ end
11
+
12
+ class WebhookEndpoint < Internal::Model
13
+ attribute :created_at, :description, :events, :id, :status, :updated_at, :url
14
+
15
+ def self.deserialize(raw)
16
+ new(
17
+ created_at: raw[:created_at],
18
+ description: raw[:description],
19
+ events: raw[:events],
20
+ id: raw[:id],
21
+ status: raw[:status],
22
+ updated_at: raw[:updated_at],
23
+ url: raw[:url]
24
+ )
25
+ end
26
+
27
+ def self.serialize_create(url:, description: Internal::OMIT, events: Internal::OMIT)
28
+ { description:, events:, url: }.reject { |_key, value| Internal.omitted?(value) }
29
+ end
30
+
31
+ def self.serialize_update(description: Internal::OMIT, events: Internal::OMIT, status: Internal::OMIT, url: Internal::OMIT)
32
+ { description:, events:, status:, url: }.reject { |_key, value| Internal.omitted?(value) }
33
+ end
34
+ end
35
+
36
+ class WebhookEndpointWithSecret < WebhookEndpoint
37
+ attribute :secret
38
+
39
+ def self.deserialize(raw)
40
+ new(
41
+ created_at: raw[:created_at],
42
+ description: raw[:description],
43
+ events: raw[:events],
44
+ id: raw[:id],
45
+ secret: raw[:secret],
46
+ status: raw[:status],
47
+ updated_at: raw[:updated_at],
48
+ url: raw[:url]
49
+ )
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../../runtime/model"
4
+
5
+ module Dinie
6
+ class WebhookSecretRotation < Internal::Model
7
+ attribute :id, :previous_secret_expires_at, :secret
8
+
9
+ def self.deserialize(raw)
10
+ new(
11
+ id: raw[:id],
12
+ previous_secret_expires_at: raw[:previous_secret_expires_at],
13
+ secret: raw[:secret]
14
+ )
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "types/bank"
4
+ require_relative "types/biometrics_session"
5
+ require_relative "types/biometrics_session_exchange_response"
6
+ require_relative "types/credential"
7
+ require_relative "types/credit_offer"
8
+ require_relative "types/customer"
9
+ require_relative "types/customer_bank_account"
10
+ require_relative "types/ids"
11
+ require_relative "types/kyc"
12
+ require_relative "types/kyc_attachment_response"
13
+ require_relative "types/loan"
14
+ require_relative "types/money"
15
+ require_relative "types/simulation"
16
+ require_relative "types/transaction"
17
+ require_relative "types/webhook_endpoint"
18
+ require_relative "types/webhook_secret_rotation"