inttegro 6.0.1 → 8.0.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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +24 -0
  3. data/README.md +2 -2
  4. data/SECURITY.md +1 -1
  5. data/lib/inttegro/api_response.rb +41 -0
  6. data/lib/inttegro/chime/chime.rb +3 -2
  7. data/lib/inttegro/chime/send_request.rb +3 -2
  8. data/lib/inttegro/custom_data.rb +132 -0
  9. data/lib/inttegro/customer/create_request.rb +3 -2
  10. data/lib/inttegro/customer/customer.rb +3 -2
  11. data/lib/inttegro/customer/data.rb +3 -2
  12. data/lib/inttegro/customer/update_request.rb +3 -2
  13. data/lib/inttegro/file/file.rb +3 -2
  14. data/lib/inttegro/file_link/create_request.rb +3 -2
  15. data/lib/inttegro/file_link/file_link.rb +3 -2
  16. data/lib/inttegro/financial_account/bank_request.rb +3 -2
  17. data/lib/inttegro/financial_account/connected.rb +3 -2
  18. data/lib/inttegro/financial_account/created.rb +3 -2
  19. data/lib/inttegro/financial_account/details.rb +3 -2
  20. data/lib/inttegro/financial_account/dosh_request.rb +3 -2
  21. data/lib/inttegro/financial_account/financial_account.rb +3 -2
  22. data/lib/inttegro/financial_account/request_base.rb +3 -2
  23. data/lib/inttegro/financial_account/update_request.rb +3 -2
  24. data/lib/inttegro/financial_account/updated.rb +3 -2
  25. data/lib/inttegro/financial_account/wallet_request.rb +3 -2
  26. data/lib/inttegro/financial_account/wire_page_accounts_item.rb +3 -2
  27. data/lib/inttegro/generated/enums.rb +5 -1
  28. data/lib/inttegro/generated/models.rb +22 -17
  29. data/lib/inttegro/generated/operations.rb +6 -6
  30. data/lib/inttegro/http_client.rb +65 -1
  31. data/lib/inttegro/model_serialization.rb +30 -1
  32. data/lib/inttegro/order/create_existing_customer.rb +3 -2
  33. data/lib/inttegro/order/create_new_customer.rb +3 -2
  34. data/lib/inttegro/order/order.rb +3 -2
  35. data/lib/inttegro/order/product_line_item_product.rb +3 -2
  36. data/lib/inttegro/order/update_request.rb +3 -2
  37. data/lib/inttegro/payment_method/payment_method.rb +14 -2
  38. data/lib/inttegro/payment_method/tokenize_base.rb +3 -2
  39. data/lib/inttegro/payment_method/tokenize_mobile_money_request.rb +3 -2
  40. data/lib/inttegro/payment_method/update_request.rb +3 -2
  41. data/lib/inttegro/payout/cancel_request.rb +2 -2
  42. data/lib/inttegro/payout/{lookup_response.rb → destinations.rb} +8 -8
  43. data/lib/inttegro/payout/disable_automatic_response.rb +1 -1
  44. data/lib/inttegro/payout/error.rb +5 -5
  45. data/lib/inttegro/payout/lookup_request.rb +2 -2
  46. data/lib/inttegro/payout/page.rb +3 -3
  47. data/lib/inttegro/payout/page_request.rb +3 -3
  48. data/lib/inttegro/payout/page_response.rb +2 -2
  49. data/lib/inttegro/payout/payout.rb +4 -3
  50. data/lib/inttegro/payout/{cancel_response.rb → response.rb} +2 -2
  51. data/lib/inttegro/payout/set_destinations_request.rb +5 -4
  52. data/lib/inttegro/payout/settings_lookup.rb +5 -4
  53. data/lib/inttegro/payout/{get_settings_response.rb → settings_lookup_response.rb} +2 -2
  54. data/lib/inttegro/payout/settings_lookup_schedule.rb +2 -2
  55. data/lib/inttegro/payout/settings_lookup_schedule_aging_spec.rb +4 -4
  56. data/lib/inttegro/payout/settings_mutation.rb +12 -4
  57. data/lib/inttegro/payout/{set_destinations_response.rb → settings_mutation_response.rb} +2 -2
  58. data/lib/inttegro/payout/settings_mutation_schedule.rb +2 -2
  59. data/lib/inttegro/payout/settings_mutation_schedule_spec.rb +1 -1
  60. data/lib/inttegro/price/embedded_product.rb +3 -2
  61. data/lib/inttegro/product/create_request.rb +3 -2
  62. data/lib/inttegro/product/inline_details.rb +3 -2
  63. data/lib/inttegro/product/product.rb +3 -2
  64. data/lib/inttegro/product/update_request.rb +3 -2
  65. data/lib/inttegro/product/updated.rb +3 -2
  66. data/lib/inttegro/purchase_intent/product.rb +3 -2
  67. data/lib/inttegro/purchase_intent/purchase_intent.rb +0 -8
  68. data/lib/inttegro/refund/cancel_request.rb +7 -0
  69. data/lib/inttegro/refund/create_request.rb +3 -2
  70. data/lib/inttegro/refund/failure.rb +45 -0
  71. data/lib/inttegro/refund/failure_reason.rb +49 -0
  72. data/lib/inttegro/refund/offline_settlement.rb +28 -0
  73. data/lib/inttegro/refund/offline_settlement_type.rb +24 -0
  74. data/lib/inttegro/refund/payment_method_settlement.rb +37 -0
  75. data/lib/inttegro/refund/payment_method_settlement_type.rb +24 -0
  76. data/lib/inttegro/refund/refund.rb +35 -2
  77. data/lib/inttegro/refund/settlement.rb +19 -0
  78. data/lib/inttegro/refund/settlement_bank_account_payment_method.rb +44 -0
  79. data/lib/inttegro/refund/settlement_bank_account_payment_method_bank_account.rb +37 -0
  80. data/lib/inttegro/refund/settlement_bank_account_payment_method_bank_account_ghana_bank_account.rb +35 -0
  81. data/lib/inttegro/refund/settlement_bank_account_payment_method_type.rb +25 -0
  82. data/lib/inttegro/refund/settlement_mobile_money_payment_method.rb +44 -0
  83. data/lib/inttegro/refund/settlement_mobile_money_payment_method_mobile_money.rb +43 -0
  84. data/lib/inttegro/refund/settlement_mobile_money_payment_method_type.rb +25 -0
  85. data/lib/inttegro/refund/settlement_payment_method.rb +19 -0
  86. data/lib/inttegro/resources/orders.rb +8 -0
  87. data/lib/inttegro/resources/payouts.rb +15 -32
  88. data/lib/inttegro/resources/refunds.rb +5 -2
  89. data/lib/inttegro/schedule/payout_request.rb +5 -5
  90. data/lib/inttegro/shared/fee_details.rb +3 -2
  91. data/lib/inttegro/shared/invoice_settings.rb +3 -2
  92. data/lib/inttegro/shared/response_meta.rb +35 -0
  93. data/lib/inttegro/shared/shipping_details.rb +3 -2
  94. data/lib/inttegro/upload_request/create_request.rb +3 -2
  95. data/lib/inttegro/upload_request/details.rb +3 -2
  96. data/lib/inttegro/upload_request/upload_request.rb +3 -2
  97. data/lib/inttegro/version.rb +1 -1
  98. data/lib/inttegro.rb +2 -0
  99. data/rbi/inttegro/generated.rbi +11 -8
  100. metadata +27 -16
  101. data/lib/inttegro/payout/enable_automatic_response.rb +0 -28
  102. data/lib/inttegro/purchase_intent/activity.rb +0 -122
  103. data/lib/inttegro/purchase_intent/activity_attribution.rb +0 -83
  104. data/lib/inttegro/purchase_intent/activity_log.rb +0 -28
  105. data/lib/inttegro/purchase_intent/activity_type.rb +0 -37
  106. data/lib/inttegro/purchase_intent/activity_visitor.rb +0 -97
  107. data/lib/inttegro/schedule/payout_response.rb +0 -28
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "owner_update_input"
8
9
 
9
10
  module Inttegro
@@ -27,7 +28,7 @@ module Inttegro
27
28
  # serialized to a string.
28
29
  #
29
30
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
30
- # @return [Hash{String => Object}, nil]
31
+ # @return [Inttegro::CustomDataPatch, nil]
31
32
  #
32
33
  # @!attribute [r] description
33
34
  # Value of the `description` field in the Inttegro API payload.
@@ -54,7 +55,7 @@ module Inttegro
54
55
  # @return [String, nil]
55
56
  class UpdateRequest < T::Struct
56
57
  const :account_id, String
57
- const :custom_data, T.nilable(T::Hash[String, Object]), default: nil
58
+ const :custom_data, T.nilable(Inttegro::CustomDataPatch), default: nil
58
59
  const :description, T.nilable(String), default: nil
59
60
  const :label, T.nilable(String), default: nil
60
61
  const :owner, T.nilable(Inttegro::FinancialAccount::OwnerUpdateInput), default: nil
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../shared/dosh_account"
8
9
  require_relative "../shared/financial_institution"
9
10
  require_relative "../shared/resource_supply"
@@ -48,7 +49,7 @@ module Inttegro
48
49
  # collection rather than a raw map.
49
50
  #
50
51
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
51
- # @return [Hash{String => String}, nil]
52
+ # @return [Inttegro::CustomData, nil]
52
53
  #
53
54
  # @!attribute [r] description
54
55
  # Value of the `description` field in the Inttegro API payload.
@@ -144,7 +145,7 @@ module Inttegro
144
145
  const :archived_at, T.nilable(Time), default: nil
145
146
  const :created_at, Time
146
147
  const :currency, String
147
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
148
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
148
149
  const :description, T.nilable(String), default: nil
149
150
  const :id, String
150
151
  const :institution, T.nilable(Inttegro::Shared::FinancialInstitution), default: nil
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "owner_input"
8
9
  require_relative "request_base_pull_configuration"
9
10
  require_relative "request_base_push_configuration"
@@ -31,7 +32,7 @@ module Inttegro
31
32
  # before storage.
32
33
  #
33
34
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
34
- # @return [Hash{String => Object}, nil]
35
+ # @return [Inttegro::CustomDataInput, nil]
35
36
  #
36
37
  # @!attribute [r] description
37
38
  # Value of the `description` field in the Inttegro API payload.
@@ -82,7 +83,7 @@ module Inttegro
82
83
  # @return [Inttegro::FinancialAccount::WalletRequestWallet]
83
84
  class WalletRequest < T::Struct
84
85
  const :currency, String
85
- const :custom_data, T.nilable(T::Hash[String, Object]), default: nil
86
+ const :custom_data, T.nilable(Inttegro::CustomDataInput), default: nil
86
87
  const :description, T.nilable(String), default: nil
87
88
  const :label, String
88
89
  const :owner, Inttegro::FinancialAccount::OwnerInput
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "type"
8
9
 
9
10
  module Inttegro
@@ -69,7 +70,7 @@ module Inttegro
69
70
  # collection rather than a raw map.
70
71
  #
71
72
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
72
- # @return [Hash{String => String}, nil]
73
+ # @return [Inttegro::CustomData, nil]
73
74
  class WirePageAccountsItem < T::Struct
74
75
  const :id, T.nilable(String), default: nil
75
76
  const :type, T.nilable(Inttegro::FinancialAccount::Type), default: nil
@@ -79,7 +80,7 @@ module Inttegro
79
80
  const :reference, T.nilable(String), default: nil
80
81
  const :created_at, T.nilable(Time), default: nil
81
82
  const :archived_at, T.nilable(Time), default: nil
82
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
83
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
83
84
  end
84
85
  end
85
86
  end
@@ -66,9 +66,13 @@ require_relative "../product/line_item_type"
66
66
  require_relative "../product/shipment_input_type"
67
67
  require_relative "../product/shipment_type"
68
68
  require_relative "../product/type"
69
- require_relative "../purchase_intent/activity_type"
70
69
  require_relative "../purchase_intent/status"
70
+ require_relative "../refund/failure_reason"
71
+ require_relative "../refund/offline_settlement_type"
72
+ require_relative "../refund/payment_method_settlement_type"
71
73
  require_relative "../refund/reason"
74
+ require_relative "../refund/settlement_bank_account_payment_method_type"
75
+ require_relative "../refund/settlement_mobile_money_payment_method_type"
72
76
  require_relative "../refund/status"
73
77
  require_relative "../secret_key/auth_result"
74
78
  require_relative "../secret_key/status"
@@ -81,9 +81,6 @@ require_relative "../broadcast/response"
81
81
  require_relative "../broadcast/cancel_request"
82
82
  require_relative "../order/cancel_request"
83
83
  require_relative "../payout/cancel_request"
84
- require_relative "../payout/error"
85
- require_relative "../payout/payout"
86
- require_relative "../payout/cancel_response"
87
84
  require_relative "../purchase_intent/cancel_request"
88
85
  require_relative "../refund/request_meta"
89
86
  require_relative "../refund/cancel_request"
@@ -147,7 +144,17 @@ require_relative "../order/customer"
147
144
  require_relative "../order/document_format"
148
145
  require_relative "../order/invoice_format"
149
146
  require_relative "../order/invoice"
147
+ require_relative "../refund/failure"
150
148
  require_relative "../refund/line_item"
149
+ require_relative "../refund/offline_settlement"
150
+ require_relative "../refund/settlement_mobile_money_payment_method_mobile_money"
151
+ require_relative "../refund/settlement_mobile_money_payment_method"
152
+ require_relative "../refund/settlement_bank_account_payment_method_bank_account_ghana_bank_account"
153
+ require_relative "../refund/settlement_bank_account_payment_method_bank_account"
154
+ require_relative "../refund/settlement_bank_account_payment_method"
155
+ require_relative "../refund/settlement_payment_method"
156
+ require_relative "../refund/payment_method_settlement"
157
+ require_relative "../refund/settlement"
151
158
  require_relative "../refund/refund"
152
159
  require_relative "../shared/invoice_settings"
153
160
  require_relative "../price/price"
@@ -275,6 +282,7 @@ require_relative "../secret_key/destroy_request"
275
282
  require_relative "../secret_key/secret_key"
276
283
  require_relative "../secret_key/destroy_response"
277
284
  require_relative "../payout/disable_automatic_request"
285
+ require_relative "../payout/destinations"
278
286
  require_relative "../payout/settings_mutation_schedule_spec"
279
287
  require_relative "../payout/settings_mutation_schedule"
280
288
  require_relative "../payout/settings_mutation"
@@ -285,7 +293,6 @@ require_relative "../payment_method/disactivate_request"
285
293
  require_relative "../payment_method/disactivate_response"
286
294
  require_relative "../financial_account/disconnect_response"
287
295
  require_relative "../payout/enable_automatic_request"
288
- require_relative "../payout/enable_automatic_response"
289
296
  require_relative "../financial_account/enable_pull_response"
290
297
  require_relative "../financial_account/enable_push_response"
291
298
  require_relative "../shared/error_envelope"
@@ -350,10 +357,6 @@ require_relative "../payment_method/type_setting"
350
357
  require_relative "../payment_method/settings"
351
358
  require_relative "../payment_method/get_settings_response"
352
359
  require_relative "../payout/get_settings_request"
353
- require_relative "../payout/settings_lookup_schedule_aging_spec"
354
- require_relative "../payout/settings_lookup_schedule"
355
- require_relative "../payout/settings_lookup"
356
- require_relative "../payout/get_settings_response"
357
360
  require_relative "../otp/initiate_request"
358
361
  require_relative "../otp/transmission"
359
362
  require_relative "../otp/transaction"
@@ -376,7 +379,6 @@ require_relative "../order/lookup_request"
376
379
  require_relative "../payment_method/lookup_request"
377
380
  require_relative "../payment_method/lookup_response"
378
381
  require_relative "../payout/lookup_request"
379
- require_relative "../payout/lookup_response"
380
382
  require_relative "../price/lookup_request"
381
383
  require_relative "../product/lookup_request"
382
384
  require_relative "../purchase_intent/lookup_request"
@@ -424,18 +426,12 @@ require_relative "../message_template/page_request"
424
426
  require_relative "../order/page_envelope"
425
427
  require_relative "../order/page_request"
426
428
  require_relative "../payout/page_request"
427
- require_relative "../payout/page"
428
- require_relative "../payout/page_response"
429
429
  require_relative "../product/page_request"
430
430
  require_relative "../product/price_summary"
431
431
  require_relative "../product/product"
432
432
  require_relative "../product/page"
433
433
  require_relative "../product/page_response"
434
434
  require_relative "../purchase_intent/page_request"
435
- require_relative "../purchase_intent/activity_attribution"
436
- require_relative "../purchase_intent/activity_visitor"
437
- require_relative "../purchase_intent/activity"
438
- require_relative "../purchase_intent/activity_log"
439
435
  require_relative "../purchase_intent/merchant"
440
436
  require_relative "../purchase_intent/original_price"
441
437
  require_relative "../purchase_intent/price"
@@ -462,6 +458,16 @@ require_relative "../payment_method/page_request"
462
458
  require_relative "../payment_method/page_response"
463
459
  require_relative "../payment_method/tokenize_base"
464
460
  require_relative "../payment/result"
461
+ require_relative "../payout/error"
462
+ require_relative "../payout/payout"
463
+ require_relative "../payout/page"
464
+ require_relative "../payout/page_response"
465
+ require_relative "../payout/response"
466
+ require_relative "../payout/settings_lookup_schedule_aging_spec"
467
+ require_relative "../payout/settings_lookup_schedule"
468
+ require_relative "../payout/settings_lookup"
469
+ require_relative "../payout/settings_lookup_response"
470
+ require_relative "../payout/settings_mutation_response"
465
471
  require_relative "../price/action_request"
466
472
  require_relative "../price/page_item"
467
473
  require_relative "../price/page"
@@ -477,6 +483,7 @@ require_relative "../refund/page_response"
477
483
  require_relative "../refund/response"
478
484
  require_relative "../message_template/render_preview_request"
479
485
  require_relative "../shared/request_confirmation_request"
486
+ require_relative "../shared/response_meta"
480
487
  require_relative "../upload_request/review_reason_input"
481
488
  require_relative "../upload_request/review_attempt_by_id_request"
482
489
  require_relative "../upload_request/review_attempt_by_ordinal_request"
@@ -491,7 +498,6 @@ require_relative "../schedule/creation_detail"
491
498
  require_relative "../schedule/detail"
492
499
  require_relative "../schedule/lookup_response"
493
500
  require_relative "../schedule/payout_request"
494
- require_relative "../schedule/payout_response"
495
501
  require_relative "../schedule/response"
496
502
  require_relative "../secret_key/usage_row"
497
503
  require_relative "../secret_key/usage_page"
@@ -500,7 +506,6 @@ require_relative "../secret_key/usage_request"
500
506
  require_relative "../chime/send_request_request_meta"
501
507
  require_relative "../chime/send_request"
502
508
  require_relative "../payout/set_destinations_request"
503
- require_relative "../payout/set_destinations_response"
504
509
  require_relative "../payment_method/tokenize_mobile_money_request_mobile_money"
505
510
  require_relative "../payment_method/tokenize_mobile_money_request"
506
511
  require_relative "../payment_method/tokenize_response"
@@ -74,14 +74,14 @@ module Inttegro
74
74
  "/balances" => Inttegro::Balance::SnapshotResponse,
75
75
  "/balance_transactions/lookup" => Inttegro::BalanceTransaction::Response,
76
76
  "/balance_transactions/page" => Inttegro::BalanceTransaction::PageResponse,
77
- "/payouts/schedule" => Inttegro::Schedule::PayoutResponse,
78
- "/payouts/lookup" => Inttegro::Payout::LookupResponse,
79
- "/payouts/set_destinations" => Inttegro::Payout::SetDestinationsResponse,
80
- "/payouts/settings" => Inttegro::Payout::GetSettingsResponse,
77
+ "/payouts/schedule" => Inttegro::Payout::Response,
78
+ "/payouts/lookup" => Inttegro::Payout::Response,
79
+ "/payouts/set_destinations" => Inttegro::Payout::SettingsMutationResponse,
80
+ "/payouts/settings" => Inttegro::Payout::SettingsLookupResponse,
81
81
  "/payouts/disable" => Inttegro::Payout::DisableAutomaticResponse,
82
- "/payouts/enable" => Inttegro::Payout::EnableAutomaticResponse,
82
+ "/payouts/enable" => Inttegro::Payout::SettingsMutationResponse,
83
83
  "/payouts/page" => Inttegro::Payout::PageResponse,
84
- "/payouts/cancel" => Inttegro::Payout::CancelResponse,
84
+ "/payouts/cancel" => Inttegro::Payout::Response,
85
85
  "/files/create" => Inttegro::File::Response,
86
86
  "/files/lookup" => Inttegro::File::Response,
87
87
  "/files/page" => Inttegro::File::PageResponse,
@@ -8,6 +8,7 @@ require "time"
8
8
  require "uri"
9
9
 
10
10
  require_relative "errors"
11
+ require_relative "api_response"
11
12
  require_relative "file_download"
12
13
  require_relative "models"
13
14
  require_relative "generated/operations"
@@ -148,6 +149,31 @@ module Inttegro
148
149
  raise TypeError, "expected #{model} in #{field} from #{path}, got #{decoded.class}"
149
150
  end
150
151
 
152
+ sig do
153
+ type_parameters(:Model)
154
+ .params(
155
+ path: String,
156
+ model: T::Class[T.type_parameter(:Model)],
157
+ field: Symbol,
158
+ body: Types::RequestBody,
159
+ headers: Types::Headers,
160
+ query: T.nilable(Types::Query)
161
+ )
162
+ .returns(APIResponse)
163
+ end
164
+ def post_resource_with_response(path, model, field, body, headers: {}, query: nil)
165
+ response = request_with_response(:post, path, body: body, headers: headers, query: query)
166
+ envelope = expect_response_object(T.cast(response.data, ResponseValue), path)
167
+ value = envelope.public_send(field)
168
+ value = value.to_h if value.is_a?(ResponseObject)
169
+ return response.with_data(T.cast(value, Object)) if value.is_a?(model)
170
+
171
+ decoded = Inttegro.deserialize(value, T.cast(model, T::Class[T::Struct]))
172
+ return response.with_data(decoded) if decoded.is_a?(model)
173
+
174
+ raise TypeError, "expected #{model} in #{field} from #{path}, got #{decoded.class}"
175
+ end
176
+
151
177
  sig do
152
178
  params(
153
179
  path: String,
@@ -328,6 +354,30 @@ module Inttegro
328
354
  ).returns(ResponseValue)
329
355
  end
330
356
  def request(method, path, body: nil, headers: {}, query: nil, response_model: nil)
357
+ T.cast(
358
+ request_with_response(
359
+ method,
360
+ path,
361
+ body: body,
362
+ headers: headers,
363
+ query: query,
364
+ response_model: response_model
365
+ ).data,
366
+ ResponseValue
367
+ )
368
+ end
369
+
370
+ sig do
371
+ params(
372
+ method: T.any(String, Symbol),
373
+ path: String,
374
+ body: T.nilable(Types::RequestBody),
375
+ headers: Types::Headers,
376
+ query: T.nilable(Types::Query),
377
+ response_model: T.nilable(T::Class[T::Struct])
378
+ ).returns(APIResponse)
379
+ end
380
+ def request_with_response(method, path, body: nil, headers: {}, query: nil, response_model: nil)
331
381
  @telemetry.in_span(path, method, @base_url, Inttegro::VERSION) do |span|
332
382
  uri = build_uri(path, query)
333
383
  body = validate_body(path, coerce_body(body))
@@ -346,7 +396,12 @@ module Inttegro
346
396
  @telemetry.response(span, response, decoded: false)
347
397
  result = handle_response(path, response, response_model)
348
398
  @telemetry.decoded(span)
349
- result
399
+ APIResponse.new(
400
+ data: result,
401
+ status: response.code.to_i,
402
+ headers: response.headers,
403
+ meta: response_meta(response.body)
404
+ )
350
405
  end
351
406
  rescue Timeout::Error, Errno::ETIMEDOUT => e
352
407
  raise TimeoutError.new("Request timed out", e)
@@ -574,6 +629,15 @@ module Inttegro
574
629
  body
575
630
  end
576
631
 
632
+ sig { params(body: String).returns(T.nilable(Types::Payload)) }
633
+ def response_meta(body)
634
+ data = parse_json(body)
635
+ return nil unless data.is_a?(Hash)
636
+
637
+ meta = data["response_meta"] || data[:response_meta]
638
+ meta.is_a?(Hash) ? normalize_payload(meta) : nil
639
+ end
640
+
577
641
  sig { params(data: Object, response: TransportResponse).returns(String) }
578
642
  def extract_error_message(data, response)
579
643
  return "HTTP #{response.code} #{response.message}" unless data.is_a?(Hash)
@@ -44,7 +44,9 @@ module Inttegro
44
44
  data = stringify_json_keys(value, decode_timestamps: true)
45
45
  raise TypeError, "expected an object for #{klass}, got #{data.class}" unless data.is_a?(Hash)
46
46
 
47
- T.cast(klass, T.class_of(T::Struct)).from_hash(data)
47
+ model = T.cast(klass, T.class_of(T::Struct)).from_hash(data)
48
+ wrap_response_custom_data(model)
49
+ model
48
50
  end
49
51
 
50
52
  sig { params(value: Object, decode_timestamps: T::Boolean).returns(Object) }
@@ -56,6 +58,8 @@ module Inttegro
56
58
  # @api private
57
59
  def self.stringify_json_keys(value, decode_timestamps: false)
58
60
  case value
61
+ when CustomData, CustomDataInput, CustomDataPatch
62
+ value
59
63
  when T::Struct
60
64
  stringify_json_keys(value.serialize, decode_timestamps: decode_timestamps)
61
65
  when T::Enum
@@ -82,4 +86,29 @@ module Inttegro
82
86
  end
83
87
  end
84
88
  private_class_method :stringify_json_keys
89
+
90
+ sig { params(value: Object).returns(Object) }
91
+ def self.wrap_response_custom_data(value)
92
+ case value
93
+ when T::Struct
94
+ raw = value.instance_variable_get(:@custom_data)
95
+ if raw.is_a?(Hash) && !raw.is_a?(CustomData)
96
+ value.instance_variable_set(
97
+ :@custom_data,
98
+ CustomData.new(raw)
99
+ )
100
+ end
101
+ value.instance_variables.each do |variable|
102
+ next if variable == :@custom_data
103
+
104
+ wrap_response_custom_data(value.instance_variable_get(variable))
105
+ end
106
+ when Array
107
+ value.each { |item| wrap_response_custom_data(item) }
108
+ when Hash
109
+ value.each_value { |item| wrap_response_custom_data(item) }
110
+ end
111
+ value
112
+ end
113
+ private_class_method :wrap_response_custom_data
85
114
  end
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../payment_method/data"
8
9
  require_relative "../shared/billing_details"
9
10
  require_relative "../shared/invoice_settings"
@@ -112,7 +113,7 @@ module Inttegro
112
113
  # collection rather than a raw map.
113
114
  #
114
115
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
115
- # @return [Hash{String => String}, nil]
116
+ # @return [Inttegro::CustomData, nil]
116
117
  #
117
118
  # @!attribute [r] billing_details
118
119
  # Value of the `billing_details` field in the Inttegro API payload.
@@ -139,7 +140,7 @@ module Inttegro
139
140
  const :invoice_settings, T.nilable(Inttegro::Shared::InvoiceSettings), default: nil
140
141
  const :payout_settings, T.nilable(Inttegro::Order::PayoutSettingsRequest), default: nil
141
142
  const :line_items, T::Array[Inttegro::Shared::LineItem]
142
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
143
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
143
144
  const :billing_details, T.nilable(Inttegro::Shared::BillingDetails), default: nil
144
145
  const :shipping, T.nilable(Inttegro::Shared::Shipping), default: nil
145
146
  end
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../customer/data"
8
9
  require_relative "../payment_method/data"
9
10
  require_relative "../shared/billing_details"
@@ -114,7 +115,7 @@ module Inttegro
114
115
  # collection rather than a raw map.
115
116
  #
116
117
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
117
- # @return [Hash{String => String}, nil]
118
+ # @return [Inttegro::CustomData, nil]
118
119
  #
119
120
  # @!attribute [r] billing_details
120
121
  # Value of the `billing_details` field in the Inttegro API payload.
@@ -141,7 +142,7 @@ module Inttegro
141
142
  const :invoice_settings, T.nilable(Inttegro::Shared::InvoiceSettings), default: nil
142
143
  const :payout_settings, T.nilable(Inttegro::Order::PayoutSettingsRequest), default: nil
143
144
  const :line_items, T::Array[Inttegro::Shared::LineItem]
144
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
145
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
145
146
  const :billing_details, T.nilable(Inttegro::Shared::BillingDetails), default: nil
146
147
  const :shipping, T.nilable(Inttegro::Shared::Shipping), default: nil
147
148
  end
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../payment/payment"
8
9
  require_relative "../refund/refund"
9
10
  require_relative "../shared/invoice_settings"
@@ -53,7 +54,7 @@ module Inttegro
53
54
  # collection rather than a raw map.
54
55
  #
55
56
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
56
- # @return [Hash{String => String}, nil]
57
+ # @return [Inttegro::CustomData, nil]
57
58
  #
58
59
  # @!attribute [r] customer
59
60
  # Value of the `customer` field in the Inttegro API payload.
@@ -156,7 +157,7 @@ module Inttegro
156
157
  const :checkout_settings, T.nilable(Inttegro::Order::CheckoutSettings), default: nil
157
158
  const :completed_at, T.nilable(Time), default: nil
158
159
  const :created_from, T.nilable(Inttegro::Order::CreatedFrom), default: nil
159
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
160
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
160
161
  const :customer, Inttegro::Order::Customer
161
162
  const :expires_at, T.nilable(Time), default: nil
162
163
  const :id, String
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../price/price"
8
9
 
9
10
  module Inttegro
@@ -51,7 +52,7 @@ module Inttegro
51
52
  # collection rather than a raw map.
52
53
  #
53
54
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
54
- # @return [Hash{String => String}, nil]
55
+ # @return [Inttegro::CustomData, nil]
55
56
  #
56
57
  # @!attribute [r] tax_code
57
58
  # Value of the `tax_code` field in the Inttegro API payload.
@@ -94,7 +95,7 @@ module Inttegro
94
95
  const :price_id, T.nilable(String), default: nil
95
96
  const :reference, T.nilable(String), default: nil
96
97
  const :about, T.nilable(String), default: nil
97
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
98
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
98
99
  const :tax_code, T.nilable(String), default: nil
99
100
  const :name, String
100
101
  const :category, T.nilable(String), default: nil
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "../shared/invoice_settings"
8
9
  require_relative "../shared/line_item"
9
10
  require_relative "update_request_payment_method_data"
@@ -30,7 +31,7 @@ module Inttegro
30
31
  # collection rather than a raw map.
31
32
  #
32
33
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
33
- # @return [Hash{String => String}, nil]
34
+ # @return [Inttegro::CustomData, nil]
34
35
  #
35
36
  # @!attribute [r] invoice_settings
36
37
  # Order-level invoice rendering data. Pages uses this data when rendering invoice web and
@@ -101,7 +102,7 @@ module Inttegro
101
102
  # @return [String, nil]
102
103
  class UpdateRequest < T::Struct
103
104
  const :clear_payment_method, T.nilable(T::Boolean), default: nil
104
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
105
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
105
106
  const :invoice_settings, T.nilable(Inttegro::Shared::InvoiceSettings), default: nil
106
107
  const :finalize, T.nilable(T::Boolean), default: nil
107
108
  const :line_items, T.nilable(T::Array[Inttegro::Shared::LineItem]), default: nil
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "bank_account"
8
9
  require_relative "card"
9
10
  require_relative "mobile_money"
@@ -56,7 +57,7 @@ module Inttegro
56
57
  # collection rather than a raw map.
57
58
  #
58
59
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
59
- # @return [Hash{String => String}, nil]
60
+ # @return [Inttegro::CustomData, nil]
60
61
  #
61
62
  # @!attribute [r] customer_id
62
63
  # Customer who owns this payment method
@@ -76,6 +77,16 @@ module Inttegro
76
77
  # Optional in the API payload; omitted values default to `nil`. Wire name: `expires_on`.
77
78
  # @return [Time, nil]
78
79
  #
80
+ # @!attribute [r] fingerprint
81
+ # Customer-scoped fingerprint for this payment method within the merchant application.
82
+ # Matching nonempty values for the same customer indicate the same underlying method was added
83
+ # more than once. May be empty for records awaiting fingerprint backfill or methods lacking
84
+ # reliable fingerprint material. It does not identify the method across customers or
85
+ # applications.
86
+ #
87
+ # Required in the API payload. Wire name: `fingerprint`.
88
+ # @return [String]
89
+ #
79
90
  # @!attribute [r] id
80
91
  # Unique identifier for this payment method
81
92
  #
@@ -123,10 +134,11 @@ module Inttegro
123
134
  const :bank_account, T.nilable(Inttegro::PaymentMethod::BankAccount), default: nil
124
135
  const :card, T.nilable(Inttegro::PaymentMethod::Card), default: nil
125
136
  const :created_at, Time
126
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
137
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
127
138
  const :customer_id, String
128
139
  const :ephemeral, T.nilable(T::Boolean), default: nil
129
140
  const :expires_on, T.nilable(Time), default: nil
141
+ const :fingerprint, String
130
142
  const :id, String
131
143
  const :mobile_money, T.nilable(Inttegro::PaymentMethod::MobileMoney), default: nil
132
144
  const :owner, T.nilable(Inttegro::PaymentMethod::Owner), default: nil
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "tokenize_base_type"
8
9
 
9
10
  module Inttegro
@@ -27,7 +28,7 @@ module Inttegro
27
28
  # collection rather than a raw map.
28
29
  #
29
30
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
30
- # @return [Hash{String => String}, nil]
31
+ # @return [Inttegro::CustomData, nil]
31
32
  #
32
33
  # @!attribute [r] type
33
34
  # Value of the `type` field in the Inttegro API payload.
@@ -36,7 +37,7 @@ module Inttegro
36
37
  # @return [Inttegro::PaymentMethod::TokenizeBaseType]
37
38
  class TokenizeBase < T::Struct
38
39
  const :customer_id, String
39
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
40
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
40
41
  const :type, Inttegro::PaymentMethod::TokenizeBaseType
41
42
  end
42
43
  end
@@ -4,6 +4,7 @@
4
4
  # Generated from openapi/commerce.yml by bin/generate-openapi-types. Do not edit.
5
5
 
6
6
  require_relative "base"
7
+ require_relative "../custom_data"
7
8
  require_relative "owner_input"
8
9
  require_relative "tokenize_mobile_money_request_mobile_money"
9
10
  require_relative "tokenize_mobile_money_request_type"
@@ -29,7 +30,7 @@ module Inttegro
29
30
  # collection rather than a raw map.
30
31
  #
31
32
  # Optional in the API payload; omitted values default to `nil`. Wire name: `custom_data`.
32
- # @return [Hash{String => String}, nil]
33
+ # @return [Inttegro::CustomData, nil]
33
34
  #
34
35
  # @!attribute [r] type
35
36
  # Value of the `type` field in the Inttegro API payload.
@@ -50,7 +51,7 @@ module Inttegro
50
51
  # @return [Inttegro::PaymentMethod::OwnerInput]
51
52
  class TokenizeMobileMoneyRequest < T::Struct
52
53
  const :customer_id, String
53
- const :custom_data, T.nilable(T::Hash[String, String]), default: nil
54
+ const :custom_data, T.nilable(Inttegro::CustomData), default: nil
54
55
  const :type, Inttegro::PaymentMethod::TokenizeMobileMoneyRequestType
55
56
  const :mobile_money, Inttegro::PaymentMethod::TokenizeMobileMoneyRequestMobileMoney
56
57
  const :owner, Inttegro::PaymentMethod::OwnerInput