moov_ruby 0.3.5 → 0.3.6

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 (79) hide show
  1. checksums.yaml +4 -4
  2. data/lib/moov/client.rb +2 -1
  3. data/lib/moov/invoices.rb +792 -0
  4. data/lib/moov/models/components/amountdecimalupdate.rb +39 -0
  5. data/lib/moov/models/components/amountdecimalupdate.rbi +15 -0
  6. data/lib/moov/models/components/createinvoice.rb +53 -0
  7. data/lib/moov/models/components/createinvoice.rbi +23 -0
  8. data/lib/moov/models/components/invoice.rb +117 -0
  9. data/lib/moov/models/components/invoice.rbi +55 -0
  10. data/lib/moov/models/components/invoiceexternalpayment.rb +49 -0
  11. data/lib/moov/models/components/invoiceexternalpayment.rbi +21 -0
  12. data/lib/moov/models/components/invoiceexternalpayment_paymenttype.rb +21 -0
  13. data/lib/moov/models/components/invoiceexternalpayment_paymenttype.rbi +11 -0
  14. data/lib/moov/models/components/invoicelineitem.rb +49 -0
  15. data/lib/moov/models/components/invoicelineitem.rbi +21 -0
  16. data/lib/moov/models/components/invoicelineitemoption.rb +45 -0
  17. data/lib/moov/models/components/invoicelineitemoption.rbi +19 -0
  18. data/lib/moov/models/components/invoicelineitemoptionvalidationerror.rb +45 -0
  19. data/lib/moov/models/components/invoicelineitemoptionvalidationerror.rbi +19 -0
  20. data/lib/moov/models/components/invoicelineitems.rb +33 -0
  21. data/lib/moov/models/components/invoicelineitems.rbi +13 -0
  22. data/lib/moov/models/components/invoicelineitemsupdate.rb +33 -0
  23. data/lib/moov/models/components/invoicelineitemsupdate.rbi +13 -0
  24. data/lib/moov/models/components/invoicelineitemsvalidationerror.rb +33 -0
  25. data/lib/moov/models/components/invoicelineitemsvalidationerror.rbi +13 -0
  26. data/lib/moov/models/components/invoicelineitemvalidationerror.rb +49 -0
  27. data/lib/moov/models/components/invoicelineitemvalidationerror.rbi +21 -0
  28. data/lib/moov/models/components/invoicepayment.rb +28 -0
  29. data/lib/moov/models/components/invoicepayment.rbi +11 -0
  30. data/lib/moov/models/components/invoicestatus.rb +26 -0
  31. data/lib/moov/models/components/invoicestatus.rbi +11 -0
  32. data/lib/moov/models/components/invoicetransferpayment.rb +37 -0
  33. data/lib/moov/models/components/invoicetransferpayment.rbi +15 -0
  34. data/lib/moov/models/components/invoicetransferpayment_paymenttype.rb +21 -0
  35. data/lib/moov/models/components/invoicetransferpayment_paymenttype.rbi +11 -0
  36. data/lib/moov/models/components/markinvoicepaid.rb +41 -0
  37. data/lib/moov/models/components/markinvoicepaid.rbi +17 -0
  38. data/lib/moov/models/components/updateinvoice.rb +53 -0
  39. data/lib/moov/models/components/updateinvoice.rbi +23 -0
  40. data/lib/moov/models/components/webhookdatainvoicecreated.rb +37 -0
  41. data/lib/moov/models/components/webhookdatainvoicecreated.rbi +15 -0
  42. data/lib/moov/models/components/webhookdatainvoiceupdated.rb +41 -0
  43. data/lib/moov/models/components/webhookdatainvoiceupdated.rbi +17 -0
  44. data/lib/moov/models/components/webhookevent.rb +2 -2
  45. data/lib/moov/models/components/webhookeventtype.rb +2 -0
  46. data/lib/moov/models/components.rb +20 -0
  47. data/lib/moov/models/errors/createinvoiceerror.rb +57 -0
  48. data/lib/moov/models/errors/createinvoiceerror.rbi +25 -0
  49. data/lib/moov/models/errors/listinvoicesvalidationerror.rb +49 -0
  50. data/lib/moov/models/errors/listinvoicesvalidationerror.rbi +21 -0
  51. data/lib/moov/models/errors/markinvoicepaiderror.rb +45 -0
  52. data/lib/moov/models/errors/markinvoicepaiderror.rbi +19 -0
  53. data/lib/moov/models/errors/updateinvoiceerror.rb +57 -0
  54. data/lib/moov/models/errors/updateinvoiceerror.rbi +25 -0
  55. data/lib/moov/models/errors.rb +4 -0
  56. data/lib/moov/models/operations/createinvoice_request.rb +50 -0
  57. data/lib/moov/models/operations/createinvoice_request.rbi +17 -0
  58. data/lib/moov/models/operations/createinvoice_response.rb +49 -0
  59. data/lib/moov/models/operations/createinvoice_response.rbi +21 -0
  60. data/lib/moov/models/operations/getinvoice_request.rb +50 -0
  61. data/lib/moov/models/operations/getinvoice_request.rbi +17 -0
  62. data/lib/moov/models/operations/getinvoice_response.rb +49 -0
  63. data/lib/moov/models/operations/getinvoice_response.rbi +21 -0
  64. data/lib/moov/models/operations/listinvoices_request.rb +62 -0
  65. data/lib/moov/models/operations/listinvoices_request.rbi +23 -0
  66. data/lib/moov/models/operations/listinvoices_response.rb +49 -0
  67. data/lib/moov/models/operations/listinvoices_response.rbi +21 -0
  68. data/lib/moov/models/operations/markpaidinvoice_request.rb +54 -0
  69. data/lib/moov/models/operations/markpaidinvoice_request.rbi +19 -0
  70. data/lib/moov/models/operations/markpaidinvoice_response.rb +49 -0
  71. data/lib/moov/models/operations/markpaidinvoice_response.rbi +21 -0
  72. data/lib/moov/models/operations/updateinvoice_request.rb +54 -0
  73. data/lib/moov/models/operations/updateinvoice_request.rbi +19 -0
  74. data/lib/moov/models/operations/updateinvoice_response.rb +49 -0
  75. data/lib/moov/models/operations/updateinvoice_response.rbi +21 -0
  76. data/lib/moov/models/operations.rb +10 -0
  77. data/lib/moov/sdkconfiguration.rb +2 -2
  78. data/lib/moov_ruby.rb +1 -0
  79. metadata +71 -2
@@ -0,0 +1,792 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday'
7
+ require 'faraday/multipart'
8
+ require 'faraday/retry'
9
+ require 'sorbet-runtime'
10
+ require_relative 'sdk_hooks/hooks'
11
+ require_relative 'utils/retries'
12
+
13
+ module Moov
14
+ extend T::Sig
15
+ class Invoices
16
+ extend T::Sig
17
+
18
+
19
+
20
+ sig { params(sdk_config: SDKConfiguration).void }
21
+ def initialize(sdk_config)
22
+ @sdk_configuration = sdk_config
23
+
24
+ end
25
+
26
+ sig { params(base_url: String, url_variables: T.nilable(T::Hash[Symbol, T.any(String, T::Enum)])).returns(String) }
27
+ def get_url(base_url:, url_variables: nil)
28
+ sd_base_url, sd_options = @sdk_configuration.get_server_details
29
+
30
+ if base_url.nil?
31
+ base_url = sd_base_url
32
+ end
33
+
34
+ if url_variables.nil?
35
+ url_variables = sd_options
36
+ end
37
+
38
+ return Utils.template_url base_url, url_variables
39
+ end
40
+
41
+
42
+ sig { params(create_invoice: Models::Components::CreateInvoice, account_id: ::String, x_moov_version: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(Models::Operations::CreateInvoiceResponse) }
43
+ def create_invoice(create_invoice:, account_id:, x_moov_version: nil, timeout_ms: nil)
44
+ # create_invoice - Create an invoice for a Moov account.
45
+ #
46
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
47
+ # you'll need to specify the `/accounts/{accountID}/invoices.write` scope.
48
+ request = Models::Operations::CreateInvoiceRequest.new(
49
+ account_id: account_id,
50
+ create_invoice: create_invoice,
51
+ x_moov_version: x_moov_version
52
+ )
53
+ url, params = @sdk_configuration.get_server_details
54
+ base_url = Utils.template_url(url, params)
55
+ url = Utils.generate_url(
56
+ Models::Operations::CreateInvoiceRequest,
57
+ base_url,
58
+ '/accounts/{accountID}/invoices',
59
+ request,
60
+ @sdk_configuration.globals
61
+ )
62
+ headers = Utils.get_headers(request, @sdk_configuration.globals)
63
+ headers = T.cast(headers, T::Hash[String, String])
64
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :create_invoice, :json)
65
+ headers['content-type'] = req_content_type
66
+ raise StandardError, 'request body is required' if data.nil? && form.nil?
67
+
68
+ if form
69
+ body = Utils.encode_form(form)
70
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
71
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
72
+ else
73
+ body = data
74
+ end
75
+ headers['Accept'] = 'application/json'
76
+ headers['user-agent'] = @sdk_configuration.user_agent
77
+
78
+ security = @sdk_configuration.security_source&.call
79
+
80
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
81
+ timeout ||= @sdk_configuration.timeout
82
+
83
+
84
+ connection = @sdk_configuration.client
85
+
86
+ hook_ctx = SDKHooks::HookContext.new(
87
+ config: @sdk_configuration,
88
+ base_url: base_url,
89
+ oauth2_scopes: nil,
90
+ operation_id: 'createInvoice',
91
+ security_source: @sdk_configuration.security_source
92
+ )
93
+
94
+ error = T.let(nil, T.nilable(StandardError))
95
+ http_response = T.let(nil, T.nilable(Faraday::Response))
96
+
97
+
98
+ begin
99
+ http_response = T.must(connection).post(url) do |req|
100
+ req.body = body
101
+ req.headers.merge!(headers)
102
+ req.options.timeout = timeout unless timeout.nil?
103
+ Utils.configure_request_security(req, security)
104
+
105
+ @sdk_configuration.hooks.before_request(
106
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
107
+ hook_ctx: hook_ctx
108
+ ),
109
+ request: req
110
+ )
111
+ end
112
+ rescue StandardError => e
113
+ error = e
114
+ ensure
115
+ if http_response.nil? || Utils.error_status?(http_response.status)
116
+ http_response = @sdk_configuration.hooks.after_error(
117
+ error: error,
118
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
119
+ hook_ctx: hook_ctx
120
+ ),
121
+ response: http_response
122
+ )
123
+ else
124
+ http_response = @sdk_configuration.hooks.after_success(
125
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
126
+ hook_ctx: hook_ctx
127
+ ),
128
+ response: http_response
129
+ )
130
+ end
131
+
132
+ if http_response.nil?
133
+ raise error if !error.nil?
134
+ raise 'no response'
135
+ end
136
+ end
137
+
138
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
139
+ if Utils.match_status_code(http_response.status, ['201'])
140
+ if Utils.match_content_type(content_type, 'application/json')
141
+ http_response = @sdk_configuration.hooks.after_success(
142
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
143
+ hook_ctx: hook_ctx
144
+ ),
145
+ response: http_response
146
+ )
147
+ response_data = http_response.env.response_body
148
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::Invoice)
149
+ response = Models::Operations::CreateInvoiceResponse.new(
150
+ status_code: http_response.status,
151
+ content_type: content_type,
152
+ raw_response: http_response,
153
+ headers: http_response.headers,
154
+ invoice: T.unsafe(obj)
155
+ )
156
+
157
+ return response
158
+ else
159
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
160
+ end
161
+ elsif Utils.match_status_code(http_response.status, ['400', '409'])
162
+ if Utils.match_content_type(content_type, 'application/json')
163
+ http_response = @sdk_configuration.hooks.after_success(
164
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
165
+ hook_ctx: hook_ctx
166
+ ),
167
+ response: http_response
168
+ )
169
+ response_data = http_response.env.response_body
170
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::GenericError)
171
+ obj.raw_response = http_response
172
+ raise obj
173
+ else
174
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
175
+ end
176
+ elsif Utils.match_status_code(http_response.status, ['422'])
177
+ if Utils.match_content_type(content_type, 'application/json')
178
+ http_response = @sdk_configuration.hooks.after_success(
179
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
180
+ hook_ctx: hook_ctx
181
+ ),
182
+ response: http_response
183
+ )
184
+ response_data = http_response.env.response_body
185
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::CreateInvoiceError)
186
+ obj.raw_response = http_response
187
+ raise obj
188
+ else
189
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
190
+ end
191
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '404', '429'])
192
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
193
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
194
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
195
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
196
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
197
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
198
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
199
+ else
200
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
201
+
202
+ end
203
+ end
204
+
205
+
206
+ sig { params(request: Models::Operations::ListInvoicesRequest, timeout_ms: T.nilable(Integer)).returns(Models::Operations::ListInvoicesResponse) }
207
+ def list_invoices(request:, timeout_ms: nil)
208
+ # list_invoices - List all the invoices created under a Moov account.
209
+ #
210
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
211
+ # you'll need to specify the `/accounts/{accountID}/invoices.read` scope.
212
+ url, params = @sdk_configuration.get_server_details
213
+ base_url = Utils.template_url(url, params)
214
+ url = Utils.generate_url(
215
+ Models::Operations::ListInvoicesRequest,
216
+ base_url,
217
+ '/accounts/{accountID}/invoices',
218
+ request,
219
+ @sdk_configuration.globals
220
+ )
221
+ headers = Utils.get_headers(request, @sdk_configuration.globals)
222
+ headers = T.cast(headers, T::Hash[String, String])
223
+ query_params = Utils.get_query_params(Models::Operations::ListInvoicesRequest, request, nil, @sdk_configuration.globals)
224
+ headers['Accept'] = 'application/json'
225
+ headers['user-agent'] = @sdk_configuration.user_agent
226
+
227
+ security = @sdk_configuration.security_source&.call
228
+
229
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
230
+ timeout ||= @sdk_configuration.timeout
231
+
232
+
233
+ connection = @sdk_configuration.client
234
+
235
+ hook_ctx = SDKHooks::HookContext.new(
236
+ config: @sdk_configuration,
237
+ base_url: base_url,
238
+ oauth2_scopes: nil,
239
+ operation_id: 'listInvoices',
240
+ security_source: @sdk_configuration.security_source
241
+ )
242
+
243
+ error = T.let(nil, T.nilable(StandardError))
244
+ http_response = T.let(nil, T.nilable(Faraday::Response))
245
+
246
+
247
+ begin
248
+ http_response = T.must(connection).get(url) do |req|
249
+ req.headers.merge!(headers)
250
+ req.options.timeout = timeout unless timeout.nil?
251
+ req.params = query_params
252
+ Utils.configure_request_security(req, security)
253
+
254
+ @sdk_configuration.hooks.before_request(
255
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
256
+ hook_ctx: hook_ctx
257
+ ),
258
+ request: req
259
+ )
260
+ end
261
+ rescue StandardError => e
262
+ error = e
263
+ ensure
264
+ if http_response.nil? || Utils.error_status?(http_response.status)
265
+ http_response = @sdk_configuration.hooks.after_error(
266
+ error: error,
267
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
268
+ hook_ctx: hook_ctx
269
+ ),
270
+ response: http_response
271
+ )
272
+ else
273
+ http_response = @sdk_configuration.hooks.after_success(
274
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
275
+ hook_ctx: hook_ctx
276
+ ),
277
+ response: http_response
278
+ )
279
+ end
280
+
281
+ if http_response.nil?
282
+ raise error if !error.nil?
283
+ raise 'no response'
284
+ end
285
+ end
286
+
287
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
288
+ if Utils.match_status_code(http_response.status, ['200'])
289
+ if Utils.match_content_type(content_type, 'application/json')
290
+ http_response = @sdk_configuration.hooks.after_success(
291
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
292
+ hook_ctx: hook_ctx
293
+ ),
294
+ response: http_response
295
+ )
296
+ response_data = http_response.env.response_body
297
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Crystalline::Array.new(Models::Components::Invoice))
298
+ response = Models::Operations::ListInvoicesResponse.new(
299
+ status_code: http_response.status,
300
+ content_type: content_type,
301
+ raw_response: http_response,
302
+ headers: http_response.headers,
303
+ invoices: T.unsafe(obj)
304
+ )
305
+
306
+ return response
307
+ else
308
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
309
+ end
310
+ elsif Utils.match_status_code(http_response.status, ['422'])
311
+ if Utils.match_content_type(content_type, 'application/json')
312
+ http_response = @sdk_configuration.hooks.after_success(
313
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
314
+ hook_ctx: hook_ctx
315
+ ),
316
+ response: http_response
317
+ )
318
+ response_data = http_response.env.response_body
319
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::ListInvoicesValidationError)
320
+ obj.raw_response = http_response
321
+ raise obj
322
+ else
323
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
324
+ end
325
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '429'])
326
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
327
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
328
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
329
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
330
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
331
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
332
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
333
+ else
334
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
335
+
336
+ end
337
+ end
338
+
339
+
340
+ sig { params(account_id: ::String, invoice_id: ::String, x_moov_version: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(Models::Operations::GetInvoiceResponse) }
341
+ def get_invoice(account_id:, invoice_id:, x_moov_version: nil, timeout_ms: nil)
342
+ # get_invoice - Retrieve an invoice by ID.
343
+ #
344
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
345
+ # you'll need to specify the `/accounts/{accountID}/invoices.read` scope.
346
+ request = Models::Operations::GetInvoiceRequest.new(
347
+ account_id: account_id,
348
+ invoice_id: invoice_id,
349
+ x_moov_version: x_moov_version
350
+ )
351
+ url, params = @sdk_configuration.get_server_details
352
+ base_url = Utils.template_url(url, params)
353
+ url = Utils.generate_url(
354
+ Models::Operations::GetInvoiceRequest,
355
+ base_url,
356
+ '/accounts/{accountID}/invoices/{invoiceID}',
357
+ request,
358
+ @sdk_configuration.globals
359
+ )
360
+ headers = Utils.get_headers(request, @sdk_configuration.globals)
361
+ headers = T.cast(headers, T::Hash[String, String])
362
+ headers['Accept'] = 'application/json'
363
+ headers['user-agent'] = @sdk_configuration.user_agent
364
+
365
+ security = @sdk_configuration.security_source&.call
366
+
367
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
368
+ timeout ||= @sdk_configuration.timeout
369
+
370
+
371
+ connection = @sdk_configuration.client
372
+
373
+ hook_ctx = SDKHooks::HookContext.new(
374
+ config: @sdk_configuration,
375
+ base_url: base_url,
376
+ oauth2_scopes: nil,
377
+ operation_id: 'getInvoice',
378
+ security_source: @sdk_configuration.security_source
379
+ )
380
+
381
+ error = T.let(nil, T.nilable(StandardError))
382
+ http_response = T.let(nil, T.nilable(Faraday::Response))
383
+
384
+
385
+ begin
386
+ http_response = T.must(connection).get(url) do |req|
387
+ req.headers.merge!(headers)
388
+ req.options.timeout = timeout unless timeout.nil?
389
+ Utils.configure_request_security(req, security)
390
+
391
+ @sdk_configuration.hooks.before_request(
392
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
393
+ hook_ctx: hook_ctx
394
+ ),
395
+ request: req
396
+ )
397
+ end
398
+ rescue StandardError => e
399
+ error = e
400
+ ensure
401
+ if http_response.nil? || Utils.error_status?(http_response.status)
402
+ http_response = @sdk_configuration.hooks.after_error(
403
+ error: error,
404
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
405
+ hook_ctx: hook_ctx
406
+ ),
407
+ response: http_response
408
+ )
409
+ else
410
+ http_response = @sdk_configuration.hooks.after_success(
411
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
412
+ hook_ctx: hook_ctx
413
+ ),
414
+ response: http_response
415
+ )
416
+ end
417
+
418
+ if http_response.nil?
419
+ raise error if !error.nil?
420
+ raise 'no response'
421
+ end
422
+ end
423
+
424
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
425
+ if Utils.match_status_code(http_response.status, ['200'])
426
+ if Utils.match_content_type(content_type, 'application/json')
427
+ http_response = @sdk_configuration.hooks.after_success(
428
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
429
+ hook_ctx: hook_ctx
430
+ ),
431
+ response: http_response
432
+ )
433
+ response_data = http_response.env.response_body
434
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::Invoice)
435
+ response = Models::Operations::GetInvoiceResponse.new(
436
+ status_code: http_response.status,
437
+ content_type: content_type,
438
+ raw_response: http_response,
439
+ headers: http_response.headers,
440
+ invoice: T.unsafe(obj)
441
+ )
442
+
443
+ return response
444
+ else
445
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
446
+ end
447
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '404', '429'])
448
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
449
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
450
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
451
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
452
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
453
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
454
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
455
+ else
456
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
457
+
458
+ end
459
+ end
460
+
461
+
462
+ sig { params(update_invoice: Models::Components::UpdateInvoice, account_id: ::String, invoice_id: ::String, x_moov_version: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(Models::Operations::UpdateInvoiceResponse) }
463
+ def update_invoice(update_invoice:, account_id:, invoice_id:, x_moov_version: nil, timeout_ms: nil)
464
+ # update_invoice - Updates an invoice.
465
+ #
466
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
467
+ # you'll need to specify the `/accounts/{accountID}/invoices.write` scope.
468
+ request = Models::Operations::UpdateInvoiceRequest.new(
469
+ account_id: account_id,
470
+ invoice_id: invoice_id,
471
+ update_invoice: update_invoice,
472
+ x_moov_version: x_moov_version
473
+ )
474
+ url, params = @sdk_configuration.get_server_details
475
+ base_url = Utils.template_url(url, params)
476
+ url = Utils.generate_url(
477
+ Models::Operations::UpdateInvoiceRequest,
478
+ base_url,
479
+ '/accounts/{accountID}/invoices/{invoiceID}',
480
+ request,
481
+ @sdk_configuration.globals
482
+ )
483
+ headers = Utils.get_headers(request, @sdk_configuration.globals)
484
+ headers = T.cast(headers, T::Hash[String, String])
485
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :update_invoice, :json)
486
+ headers['content-type'] = req_content_type
487
+ raise StandardError, 'request body is required' if data.nil? && form.nil?
488
+
489
+ if form
490
+ body = Utils.encode_form(form)
491
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
492
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
493
+ else
494
+ body = data
495
+ end
496
+ headers['Accept'] = 'application/json'
497
+ headers['user-agent'] = @sdk_configuration.user_agent
498
+
499
+ security = @sdk_configuration.security_source&.call
500
+
501
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
502
+ timeout ||= @sdk_configuration.timeout
503
+
504
+
505
+ connection = @sdk_configuration.client
506
+
507
+ hook_ctx = SDKHooks::HookContext.new(
508
+ config: @sdk_configuration,
509
+ base_url: base_url,
510
+ oauth2_scopes: nil,
511
+ operation_id: 'updateInvoice',
512
+ security_source: @sdk_configuration.security_source
513
+ )
514
+
515
+ error = T.let(nil, T.nilable(StandardError))
516
+ http_response = T.let(nil, T.nilable(Faraday::Response))
517
+
518
+
519
+ begin
520
+ http_response = T.must(connection).patch(url) do |req|
521
+ req.body = body
522
+ req.headers.merge!(headers)
523
+ req.options.timeout = timeout unless timeout.nil?
524
+ Utils.configure_request_security(req, security)
525
+
526
+ @sdk_configuration.hooks.before_request(
527
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
528
+ hook_ctx: hook_ctx
529
+ ),
530
+ request: req
531
+ )
532
+ end
533
+ rescue StandardError => e
534
+ error = e
535
+ ensure
536
+ if http_response.nil? || Utils.error_status?(http_response.status)
537
+ http_response = @sdk_configuration.hooks.after_error(
538
+ error: error,
539
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
540
+ hook_ctx: hook_ctx
541
+ ),
542
+ response: http_response
543
+ )
544
+ else
545
+ http_response = @sdk_configuration.hooks.after_success(
546
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
547
+ hook_ctx: hook_ctx
548
+ ),
549
+ response: http_response
550
+ )
551
+ end
552
+
553
+ if http_response.nil?
554
+ raise error if !error.nil?
555
+ raise 'no response'
556
+ end
557
+ end
558
+
559
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
560
+ if Utils.match_status_code(http_response.status, ['200'])
561
+ if Utils.match_content_type(content_type, 'application/json')
562
+ http_response = @sdk_configuration.hooks.after_success(
563
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
564
+ hook_ctx: hook_ctx
565
+ ),
566
+ response: http_response
567
+ )
568
+ response_data = http_response.env.response_body
569
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::Invoice)
570
+ response = Models::Operations::UpdateInvoiceResponse.new(
571
+ status_code: http_response.status,
572
+ content_type: content_type,
573
+ raw_response: http_response,
574
+ headers: http_response.headers,
575
+ invoice: T.unsafe(obj)
576
+ )
577
+
578
+ return response
579
+ else
580
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
581
+ end
582
+ elsif Utils.match_status_code(http_response.status, ['400', '409'])
583
+ if Utils.match_content_type(content_type, 'application/json')
584
+ http_response = @sdk_configuration.hooks.after_success(
585
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
586
+ hook_ctx: hook_ctx
587
+ ),
588
+ response: http_response
589
+ )
590
+ response_data = http_response.env.response_body
591
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::GenericError)
592
+ obj.raw_response = http_response
593
+ raise obj
594
+ else
595
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
596
+ end
597
+ elsif Utils.match_status_code(http_response.status, ['422'])
598
+ if Utils.match_content_type(content_type, 'application/json')
599
+ http_response = @sdk_configuration.hooks.after_success(
600
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
601
+ hook_ctx: hook_ctx
602
+ ),
603
+ response: http_response
604
+ )
605
+ response_data = http_response.env.response_body
606
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::UpdateInvoiceError)
607
+ obj.raw_response = http_response
608
+ raise obj
609
+ else
610
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
611
+ end
612
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '404', '429'])
613
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
614
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
615
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
616
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
617
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
618
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
619
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
620
+ else
621
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
622
+
623
+ end
624
+ end
625
+
626
+
627
+ sig { params(mark_invoice_paid: Models::Components::MarkInvoicePaid, account_id: ::String, invoice_id: ::String, x_moov_version: T.nilable(::String), timeout_ms: T.nilable(Integer)).returns(Models::Operations::MarkPaidInvoiceResponse) }
628
+ def mark_paid_invoice(mark_invoice_paid:, account_id:, invoice_id:, x_moov_version: nil, timeout_ms: nil)
629
+ # mark_paid_invoice - Marks an invoice as paid outside of the Moov platform.
630
+ # If a payment link was created, the corresponding payment link is canceled, but a receipt is still sent.
631
+ #
632
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
633
+ # you'll need to specify the `/accounts/{accountID}/invoices.write` scope.
634
+ request = Models::Operations::MarkPaidInvoiceRequest.new(
635
+ account_id: account_id,
636
+ invoice_id: invoice_id,
637
+ mark_invoice_paid: mark_invoice_paid,
638
+ x_moov_version: x_moov_version
639
+ )
640
+ url, params = @sdk_configuration.get_server_details
641
+ base_url = Utils.template_url(url, params)
642
+ url = Utils.generate_url(
643
+ Models::Operations::MarkPaidInvoiceRequest,
644
+ base_url,
645
+ '/accounts/{accountID}/invoices/{invoiceID}/mark-paid',
646
+ request,
647
+ @sdk_configuration.globals
648
+ )
649
+ headers = Utils.get_headers(request, @sdk_configuration.globals)
650
+ headers = T.cast(headers, T::Hash[String, String])
651
+ req_content_type, data, form = Utils.serialize_request_body(request, false, false, :mark_invoice_paid, :json)
652
+ headers['content-type'] = req_content_type
653
+ raise StandardError, 'request body is required' if data.nil? && form.nil?
654
+
655
+ if form
656
+ body = Utils.encode_form(form)
657
+ elsif Utils.match_content_type(req_content_type, 'application/x-www-form-urlencoded')
658
+ body = URI.encode_www_form(T.cast(data, T::Hash[Symbol, Object]))
659
+ else
660
+ body = data
661
+ end
662
+ headers['Accept'] = 'application/json'
663
+ headers['user-agent'] = @sdk_configuration.user_agent
664
+
665
+ security = @sdk_configuration.security_source&.call
666
+
667
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
668
+ timeout ||= @sdk_configuration.timeout
669
+
670
+
671
+ connection = @sdk_configuration.client
672
+
673
+ hook_ctx = SDKHooks::HookContext.new(
674
+ config: @sdk_configuration,
675
+ base_url: base_url,
676
+ oauth2_scopes: nil,
677
+ operation_id: 'markPaidInvoice',
678
+ security_source: @sdk_configuration.security_source
679
+ )
680
+
681
+ error = T.let(nil, T.nilable(StandardError))
682
+ http_response = T.let(nil, T.nilable(Faraday::Response))
683
+
684
+
685
+ begin
686
+ http_response = T.must(connection).put(url) do |req|
687
+ req.body = body
688
+ req.headers.merge!(headers)
689
+ req.options.timeout = timeout unless timeout.nil?
690
+ Utils.configure_request_security(req, security)
691
+
692
+ @sdk_configuration.hooks.before_request(
693
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
694
+ hook_ctx: hook_ctx
695
+ ),
696
+ request: req
697
+ )
698
+ end
699
+ rescue StandardError => e
700
+ error = e
701
+ ensure
702
+ if http_response.nil? || Utils.error_status?(http_response.status)
703
+ http_response = @sdk_configuration.hooks.after_error(
704
+ error: error,
705
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
706
+ hook_ctx: hook_ctx
707
+ ),
708
+ response: http_response
709
+ )
710
+ else
711
+ http_response = @sdk_configuration.hooks.after_success(
712
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
713
+ hook_ctx: hook_ctx
714
+ ),
715
+ response: http_response
716
+ )
717
+ end
718
+
719
+ if http_response.nil?
720
+ raise error if !error.nil?
721
+ raise 'no response'
722
+ end
723
+ end
724
+
725
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
726
+ if Utils.match_status_code(http_response.status, ['200'])
727
+ if Utils.match_content_type(content_type, 'application/json')
728
+ http_response = @sdk_configuration.hooks.after_success(
729
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
730
+ hook_ctx: hook_ctx
731
+ ),
732
+ response: http_response
733
+ )
734
+ response_data = http_response.env.response_body
735
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::Invoice)
736
+ response = Models::Operations::MarkPaidInvoiceResponse.new(
737
+ status_code: http_response.status,
738
+ content_type: content_type,
739
+ raw_response: http_response,
740
+ headers: http_response.headers,
741
+ invoice: T.unsafe(obj)
742
+ )
743
+
744
+ return response
745
+ else
746
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
747
+ end
748
+ elsif Utils.match_status_code(http_response.status, ['400', '409'])
749
+ if Utils.match_content_type(content_type, 'application/json')
750
+ http_response = @sdk_configuration.hooks.after_success(
751
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
752
+ hook_ctx: hook_ctx
753
+ ),
754
+ response: http_response
755
+ )
756
+ response_data = http_response.env.response_body
757
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::GenericError)
758
+ obj.raw_response = http_response
759
+ raise obj
760
+ else
761
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
762
+ end
763
+ elsif Utils.match_status_code(http_response.status, ['422'])
764
+ if Utils.match_content_type(content_type, 'application/json')
765
+ http_response = @sdk_configuration.hooks.after_success(
766
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
767
+ hook_ctx: hook_ctx
768
+ ),
769
+ response: http_response
770
+ )
771
+ response_data = http_response.env.response_body
772
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Errors::MarkInvoicePaidError)
773
+ obj.raw_response = http_response
774
+ raise obj
775
+ else
776
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown content type received'
777
+ end
778
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '404', '429'])
779
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
780
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
781
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
782
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
783
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
784
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
785
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
786
+ else
787
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'Unknown status code received'
788
+
789
+ end
790
+ end
791
+ end
792
+ end