moov_ruby 26.7.0 → 26.7.1

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/lib/moov/avatars.rb +4 -4
  3. data/lib/moov/card_issuing.rb +116 -0
  4. data/lib/moov/client.rb +2 -2
  5. data/lib/moov/enriched_address.rb +1 -1
  6. data/lib/moov/enriched_profile.rb +1 -1
  7. data/lib/moov/institutions.rb +1 -1
  8. data/lib/moov/models/components/allowedscheduleerror.rb +36 -0
  9. data/lib/moov/models/components/allowedscheduleerror.rbi +15 -0
  10. data/lib/moov/models/components/createdtransfer.rb +6 -2
  11. data/lib/moov/models/components/createdtransfer.rbi +2 -0
  12. data/lib/moov/models/components/createrefund.rb +2 -2
  13. data/lib/moov/models/components/createreversal.rb +1 -1
  14. data/lib/moov/models/components/fullissuedcard.rb +3 -3
  15. data/lib/moov/models/components/issuedcard.rb +3 -3
  16. data/lib/moov/models/components/issuedcontrols.rb +52 -0
  17. data/lib/moov/models/components/issuedcontrols.rbi +23 -0
  18. data/lib/moov/models/components/issuedcontrols_allowedschedule.rb +36 -0
  19. data/lib/moov/models/components/issuedcontrols_allowedschedule.rbi +15 -0
  20. data/lib/moov/models/components/issuedvelocitylimit.rb +60 -0
  21. data/lib/moov/models/components/issuedvelocitylimit.rbi +27 -0
  22. data/lib/moov/models/components/issuingcontrols.rb +18 -2
  23. data/lib/moov/models/components/issuingcontrols.rbi +8 -0
  24. data/lib/moov/models/components/issuingcontrols_allowedschedule.rb +36 -0
  25. data/lib/moov/models/components/issuingcontrols_allowedschedule.rbi +15 -0
  26. data/lib/moov/models/components/issuingcontrolserror.rb +18 -2
  27. data/lib/moov/models/components/issuingcontrolserror.rbi +8 -0
  28. data/lib/moov/models/components/issuingcontrolsrestrictionmode.rb +19 -0
  29. data/lib/moov/models/components/issuingcontrolsrestrictionmode.rbi +11 -0
  30. data/lib/moov/models/components/issuingintervallimit.rb +3 -0
  31. data/lib/moov/models/components/issuingmerchantcategory.rb +43 -0
  32. data/lib/moov/models/components/issuingmerchantcategory.rbi +11 -0
  33. data/lib/moov/models/components/issuingscheduleday.rb +24 -0
  34. data/lib/moov/models/components/issuingscheduleday.rbi +11 -0
  35. data/lib/moov/models/components/issuingvelocitylimit.rb +10 -6
  36. data/lib/moov/models/components/issuingvelocitylimit.rbi +4 -2
  37. data/lib/moov/models/components/issuingvelocitylimiterror.rb +6 -2
  38. data/lib/moov/models/components/issuingvelocitylimiterror.rbi +2 -0
  39. data/lib/moov/models/components/merchantcategories.rb +32 -0
  40. data/lib/moov/models/components/merchantcategories.rbi +13 -0
  41. data/lib/moov/models/components/merchantcategory.rb +37 -0
  42. data/lib/moov/models/components/merchantcategory.rbi +15 -0
  43. data/lib/moov/models/components/merchantcategoryrestrictions.rb +44 -0
  44. data/lib/moov/models/components/merchantcategoryrestrictions.rbi +19 -0
  45. data/lib/moov/models/components/merchantcategoryrestrictionserror.rb +44 -0
  46. data/lib/moov/models/components/merchantcategoryrestrictionserror.rbi +19 -0
  47. data/lib/moov/models/components/merchantentry.rb +40 -0
  48. data/lib/moov/models/components/merchantentry.rbi +17 -0
  49. data/lib/moov/models/components/merchantentryerror.rb +36 -0
  50. data/lib/moov/models/components/merchantentryerror.rbi +15 -0
  51. data/lib/moov/models/components/merchantrestrictions.rb +36 -0
  52. data/lib/moov/models/components/merchantrestrictions.rbi +15 -0
  53. data/lib/moov/models/components/merchantrestrictionserror.rb +36 -0
  54. data/lib/moov/models/components/merchantrestrictionserror.rbi +15 -0
  55. data/lib/moov/models/components/paymentmethodswallet.rb +1 -0
  56. data/lib/moov/models/components/schedulewindow.rb +40 -0
  57. data/lib/moov/models/components/schedulewindow.rbi +17 -0
  58. data/lib/moov/models/components/schedulewindowerror.rb +40 -0
  59. data/lib/moov/models/components/schedulewindowerror.rbi +17 -0
  60. data/lib/moov/models/components/sendfunds.rb +6 -2
  61. data/lib/moov/models/components/sendfunds.rbi +2 -0
  62. data/lib/moov/models/components/sendfundserror.rb +6 -2
  63. data/lib/moov/models/components/sendfundserror.rbi +2 -0
  64. data/lib/moov/models/components/sendfundswire.rb +32 -0
  65. data/lib/moov/models/components/sendfundswire.rbi +13 -0
  66. data/lib/moov/models/components/sendfundswireerror.rb +32 -0
  67. data/lib/moov/models/components/sendfundswireerror.rbi +13 -0
  68. data/lib/moov/models/components/transfer.rb +6 -2
  69. data/lib/moov/models/components/transfer.rbi +2 -0
  70. data/lib/moov/models/components/transfercapture.rb +36 -0
  71. data/lib/moov/models/components/transfercapture.rbi +15 -0
  72. data/lib/moov/models/components/transferpaymentmethodswallet.rb +1 -0
  73. data/lib/moov/models/components/updateissuedcard.rb +6 -2
  74. data/lib/moov/models/components/updateissuedcard.rbi +2 -0
  75. data/lib/moov/models/components/updateissuingcontrols.rb +48 -0
  76. data/lib/moov/models/components/updateissuingcontrols.rbi +21 -0
  77. data/lib/moov/models/components/updateissuingcontrols_allowedschedule.rb +36 -0
  78. data/lib/moov/models/components/updateissuingcontrols_allowedschedule.rbi +15 -0
  79. data/lib/moov/models/components/updateissuingcontrols_merchantcategoryrestrictions.rb +44 -0
  80. data/lib/moov/models/components/updateissuingcontrols_merchantcategoryrestrictions.rbi +19 -0
  81. data/lib/moov/models/components/updateissuingcontrols_merchantrestrictions.rb +36 -0
  82. data/lib/moov/models/components/updateissuingcontrols_merchantrestrictions.rbi +15 -0
  83. data/lib/moov/models/components/updateissuingcontrolserror.rb +48 -0
  84. data/lib/moov/models/components/updateissuingcontrolserror.rbi +21 -0
  85. data/lib/moov/models/components/wallet.rb +1 -0
  86. data/lib/moov/models/components/wallettype.rb +2 -0
  87. data/lib/moov/models/components/webhookdatatransferstatus.rb +3 -0
  88. data/lib/moov/models/components.rb +26 -0
  89. data/lib/moov/models/errors/transfer_error.rb +6 -2
  90. data/lib/moov/models/errors/transfer_error.rbi +2 -0
  91. data/lib/moov/models/errors/updateissuedcarderror.rb +6 -2
  92. data/lib/moov/models/errors/updateissuedcarderror.rbi +2 -0
  93. data/lib/moov/models/operations/listissuingmerchantcategories_response.rb +48 -0
  94. data/lib/moov/models/operations/listissuingmerchantcategories_response.rbi +21 -0
  95. data/lib/moov/models/operations/listtransfers_request.rb +10 -2
  96. data/lib/moov/models/operations/listtransfers_request.rbi +4 -0
  97. data/lib/moov/models/operations.rb +1 -0
  98. data/lib/moov/sdkconfiguration.rb +2 -2
  99. data/lib/moov_ruby.rb +1 -1
  100. metadata +56 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e5d850eddfead736338e2901930525362062097ec413b495c7e24c48eef624c
4
- data.tar.gz: a3dc411f219f4492ff4d5005da12d3ff8b32fd5a92e6d23ed83ff5a8b81a1995
3
+ metadata.gz: 7198fc7d52eb9a74a8a5367368ec6951d364f7a265b3d5a48cbfac9c476e5c21
4
+ data.tar.gz: 1f3685aaa2e1e751d96b4d9e2e40e057500bc0c18f58c4b48b8a92876f5cc5e7
5
5
  SHA512:
6
- metadata.gz: 2a42e790e1cff6a959690902641a0aa717f3969976d2beca114e43524227540297345af24b7edaa4cfcf8307e29074554e9b182790fef3757ff8397baece869e
7
- data.tar.gz: 442d0eb776840e03ad684f0728354fb5f48e46adac3262c50f1ee8ccdc0cbbffda5b280325c90584ff25a1c985aa88c3832c92f9a9f09802451be2f07cda6e23
6
+ metadata.gz: 15d8a703be91f1e403ce4b4eb185d57a2075d44532cb97114870886a864bdd09a6029d43aea1f29c9fff61c899e4998a879858f2c9bee2dc03abecddfdfbb62b
7
+ data.tar.gz: 43c8323be8750653cf5697290665c37d8eaef3570a6048a1536c80312d58fdd29f155107e6b030c368ec38d3642b5c21203c2245bb9edc3ff36d024de083831f
data/lib/moov/avatars.rb CHANGED
@@ -45,7 +45,7 @@ module Moov
45
45
  def get(unique_id:, timeout_ms: nil, http_headers: nil)
46
46
  # get - Get avatar image for an account using a unique ID.
47
47
  #
48
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
48
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
49
49
  # you'll need to specify the `/profile-enrichment.read` scope.
50
50
  request = Models::Operations::GetAvatarRequest.new(
51
51
  unique_id: unique_id
@@ -165,12 +165,12 @@ module Moov
165
165
  def upload(security:, avatar_upload_request:, unique_id:, timeout_ms: nil, http_headers: nil)
166
166
  # upload - Upload a user avatar image for an account.
167
167
  #
168
- # The image will be normalized to 512x512 PNG format and stored separately from
168
+ # The image will be normalized to 512x512 PNG format and stored separately from
169
169
  # automatically discovered logos. User-uploaded avatars take precedence over enriched avatars at read time.
170
170
  #
171
171
  # This endpoint only accepts accountID values for the uniqueID parameter.
172
172
  #
173
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
173
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
174
174
  # you'll need to specify the `/accounts.write` scope.
175
175
  request = Models::Operations::UploadAvatarRequest.new(
176
176
  unique_id: unique_id,
@@ -314,7 +314,7 @@ module Moov
314
314
  #
315
315
  # This endpoint only accepts accountID values for the uniqueID parameter.
316
316
  #
317
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
317
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
318
318
  # you'll need to specify the `/accounts.write` scope.
319
319
  request = Models::Operations::DeleteAvatarRequest.new(
320
320
  unique_id: unique_id
@@ -41,6 +41,122 @@ module Moov
41
41
 
42
42
 
43
43
 
44
+ sig { params(timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::ListIssuingMerchantCategoriesResponse) }
45
+ def list_merchant_categories(timeout_ms: nil, http_headers: nil)
46
+ # list_merchant_categories - List the predefined merchant category groups available for issued card spend controls, along with
47
+ # the merchant category codes (MCCs) each group covers. Use these category names in an issued card's
48
+ # `merchantCategoryRestrictions`.
49
+ #
50
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/),
51
+ # you'll need to specify the `/issued-cards.read` scope.
52
+ url, params = @sdk_configuration.get_server_details
53
+ base_url = Utils.template_url(url, params)
54
+ url = "#{base_url}/issuing/merchant-categories"
55
+ headers = {}
56
+ headers = T.cast(headers, T::Hash[String, String])
57
+ headers['Accept'] = 'application/json'
58
+ headers['user-agent'] = @sdk_configuration.user_agent
59
+
60
+ security = @sdk_configuration.security_source&.call
61
+
62
+ timeout = (timeout_ms.to_f / 1000) unless timeout_ms.nil?
63
+ timeout ||= @sdk_configuration.timeout
64
+
65
+
66
+ connection = @sdk_configuration.client
67
+
68
+ hook_ctx = SDKHooks::HookContext.new(
69
+ config: @sdk_configuration,
70
+ base_url: base_url,
71
+ oauth2_scopes: nil,
72
+ operation_id: 'listIssuingMerchantCategories',
73
+ security_source: @sdk_configuration.security_source
74
+ )
75
+
76
+ error = T.let(nil, T.nilable(StandardError))
77
+ http_response = T.let(nil, T.nilable(Faraday::Response))
78
+
79
+
80
+ begin
81
+ http_response = T.must(connection).get(url) do |req|
82
+ req.headers.merge!(headers)
83
+ req.options.timeout = timeout unless timeout.nil?
84
+ Utils.configure_request_security(req, security)
85
+ http_headers&.each do |key, value|
86
+ req.headers[key.to_s] = value
87
+ end
88
+
89
+ @sdk_configuration.hooks.before_request(
90
+ hook_ctx: SDKHooks::BeforeRequestHookContext.new(
91
+ hook_ctx: hook_ctx
92
+ ),
93
+ request: req
94
+ )
95
+ end
96
+ rescue StandardError => e
97
+ error = e
98
+ ensure
99
+ if http_response.nil? || Utils.error_status?(http_response.status)
100
+ http_response = @sdk_configuration.hooks.after_error(
101
+ error: error,
102
+ hook_ctx: SDKHooks::AfterErrorHookContext.new(
103
+ hook_ctx: hook_ctx
104
+ ),
105
+ response: http_response
106
+ )
107
+ else
108
+ http_response = @sdk_configuration.hooks.after_success(
109
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
110
+ hook_ctx: hook_ctx
111
+ ),
112
+ response: http_response
113
+ )
114
+ end
115
+
116
+ if http_response.nil?
117
+ raise error if !error.nil?
118
+ raise 'no response'
119
+ end
120
+ end
121
+
122
+ content_type = http_response.headers.fetch('Content-Type', 'application/octet-stream')
123
+ if Utils.match_status_code(http_response.status, ['200'])
124
+ if Utils.match_content_type(content_type, 'application/json')
125
+ http_response = @sdk_configuration.hooks.after_success(
126
+ hook_ctx: SDKHooks::AfterSuccessHookContext.new(
127
+ hook_ctx: hook_ctx
128
+ ),
129
+ response: http_response
130
+ )
131
+ response_data = http_response.env.response_body
132
+ obj = Crystalline.unmarshal_json(JSON.parse(response_data), Models::Components::MerchantCategories)
133
+ response = Models::Operations::ListIssuingMerchantCategoriesResponse.new(
134
+ status_code: http_response.status,
135
+ content_type: content_type,
136
+ raw_response: http_response,
137
+ headers: http_response.headers,
138
+ merchant_categories: T.unsafe(obj)
139
+ )
140
+
141
+ return response
142
+ else
143
+ 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'
144
+ end
145
+ elsif Utils.match_status_code(http_response.status, ['401', '403', '429'])
146
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
147
+ elsif Utils.match_status_code(http_response.status, ['500', '504'])
148
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
149
+ elsif Utils.match_status_code(http_response.status, ['4XX'])
150
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
151
+ elsif Utils.match_status_code(http_response.status, ['5XX'])
152
+ raise ::Moov::Models::Errors::APIError.new(status_code: http_response.status, body: http_response.env.response_body, raw_response: http_response), 'API error occurred'
153
+ else
154
+ 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'
155
+
156
+ end
157
+ end
158
+
159
+
44
160
  sig { params(request_card: Models::Components::RequestCard, account_id: ::String, timeout_ms: T.nilable(Integer), http_headers: T.nilable(T::Hash[T.any(String, Symbol), String])).returns(Models::Operations::RequestCardResponse) }
45
161
  def request(request_card:, account_id:, timeout_ms: nil, http_headers: nil)
46
162
  # request - Request a virtual card be issued.
data/lib/moov/client.rb CHANGED
@@ -16,7 +16,7 @@ module Moov
16
16
  class Client
17
17
  extend T::Sig
18
18
 
19
- attr_accessor :accounts, :adjustments, :apple_pay, :bank_accounts, :branding, :capabilities, :cards, :disputes, :fee_plans, :files, :google_pay, :images, :invoices, :payment_links, :payment_methods, :products, :representatives, :resolution_links, :scheduling, :statements, :sweeps, :account_terminal_applications, :support, :transfer_config, :transfers, :underwriting, :wallets, :wallet_transactions, :avatars, :end_to_end_encryption, :enriched_address, :enriched_profile, :webhooks, :industries, :institutions, :issuing_transactions, :card_issuing, :authentication, :onboarding, :ping, :receipts, :terminal_applications, :deposit_view
19
+ attr_accessor :accounts, :adjustments, :apple_pay, :bank_accounts, :branding, :capabilities, :cards, :disputes, :fee_plans, :files, :google_pay, :images, :invoices, :payment_links, :payment_methods, :products, :representatives, :resolution_links, :scheduling, :statements, :sweeps, :account_terminal_applications, :support, :transfer_config, :transfers, :underwriting, :wallets, :wallet_transactions, :avatars, :end_to_end_encryption, :enriched_address, :enriched_profile, :webhooks, :industries, :institutions, :card_issuing, :issuing_transactions, :authentication, :onboarding, :ping, :receipts, :terminal_applications, :deposit_view
20
20
 
21
21
  # Instantiates the SDK, configuring it with the provided parameters.
22
22
  #
@@ -113,8 +113,8 @@ module Moov
113
113
  @webhooks = Webhooks.new(@sdk_configuration)
114
114
  @industries = Industries.new(@sdk_configuration)
115
115
  @institutions = Institutions.new(@sdk_configuration)
116
- @issuing_transactions = IssuingTransactions.new(@sdk_configuration)
117
116
  @card_issuing = CardIssuing.new(@sdk_configuration)
117
+ @issuing_transactions = IssuingTransactions.new(@sdk_configuration)
118
118
  @authentication = Authentication.new(@sdk_configuration)
119
119
  @onboarding = Onboarding.new(@sdk_configuration)
120
120
  @ping = Ping.new(@sdk_configuration)
@@ -45,7 +45,7 @@ module Moov
45
45
  def get(request:, timeout_ms: nil, http_headers: nil)
46
46
  # get - Fetch enriched address suggestions. Requires a partial address.
47
47
  #
48
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
48
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
49
49
  # you'll need to specify the `/profile-enrichment.read` scope.
50
50
  url, params = @sdk_configuration.get_server_details
51
51
  base_url = Utils.template_url(url, params)
@@ -45,7 +45,7 @@ module Moov
45
45
  def get(email:, timeout_ms: nil, http_headers: nil)
46
46
  # get - Fetch enriched profile data. Requires a valid email address. This service is offered in collaboration with Clearbit.
47
47
  #
48
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
48
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
49
49
  # you'll need to specify the `/profile-enrichment.read` scope.
50
50
  request = Models::Operations::GetEnrichmentProfileRequest.new(
51
51
  email: email
@@ -172,7 +172,7 @@ module Moov
172
172
  #
173
173
  # Search for institutions by either their name or routing number.
174
174
  #
175
- # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
175
+ # To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/)
176
176
  # you'll need to specify the `/fed.read` scope.
177
177
  #
178
178
  # @deprecated method: This will be removed in a future release, please migrate away from it as soon as possible.
@@ -0,0 +1,36 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+
11
+ class AllowedScheduleError
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+
16
+ field :timezone, Crystalline::Nilable.new(::String), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('timezone') } }
17
+
18
+ field :windows, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, Models::Components::ScheduleWindowError)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('windows') } }
19
+
20
+ sig { params(timezone: T.nilable(::String), windows: T.nilable(T::Hash[Symbol, Models::Components::ScheduleWindowError])).void }
21
+ def initialize(timezone: nil, windows: nil)
22
+ @timezone = timezone
23
+ @windows = windows
24
+ end
25
+
26
+ sig { params(other: T.untyped).returns(T::Boolean) }
27
+ def ==(other)
28
+ return false unless other.is_a? self.class
29
+ return false unless @timezone == other.timezone
30
+ return false unless @windows == other.windows
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::AllowedScheduleError
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::AllowedScheduleError
11
+ def timezone(); end
12
+ def timezone=(str_); end
13
+ def windows(); end
14
+ def windows=(str_); end
15
+ end
@@ -67,9 +67,11 @@ module Moov
67
67
  field :line_items, Crystalline::Nilable.new(Models::Components::TransferLineItems), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('lineItems') } }
68
68
 
69
69
  field :amount_details, Crystalline::Nilable.new(Models::Components::TransferAmountDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amountDetails') } }
70
+ # The card authorization and capture IDs associated with a transfer.
71
+ field :capture, Crystalline::Nilable.new(Models::Components::TransferCapture), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('capture') } }
70
72
 
71
- sig { params(transfer_id: ::String, created_on: ::DateTime, source: T.nilable(Models::Components::TransferSource), destination: T.nilable(Models::Components::TransferDestination), completed_on: T.nilable(::DateTime), status: T.nilable(Models::Components::TransferStatus), failure_reason: T.nilable(Models::Components::TransferFailureReason), amount: T.nilable(Models::Components::Amount), description: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), facilitator_fee: T.nilable(Models::Components::FacilitatorFee), moov_fee: T.nilable(::Integer), moov_fee_decimal: T.nilable(::String), moov_fee_details: T.nilable(Models::Components::MoovFeeDetails), group_id: T.nilable(::String), cancellations: T.nilable(T::Array[Models::Components::Cancellation]), refunded_amount: T.nilable(Models::Components::Amount), refunds: T.nilable(T::Array[Models::Components::CardAcquiringRefund]), disputed_amount: T.nilable(Models::Components::Amount), disputes: T.nilable(T::Array[Models::Components::CardAcquiringDispute]), sweep_id: T.nilable(::String), schedule_id: T.nilable(::String), occurrence_id: T.nilable(::String), payment_link_code: T.nilable(::String), foreign_id: T.nilable(::String), line_items: T.nilable(Models::Components::TransferLineItems), amount_details: T.nilable(Models::Components::TransferAmountDetails)).void }
72
- def initialize(transfer_id:, created_on:, source: nil, destination: nil, completed_on: nil, status: nil, failure_reason: nil, amount: nil, description: nil, metadata: nil, facilitator_fee: nil, moov_fee: nil, moov_fee_decimal: nil, moov_fee_details: nil, group_id: nil, cancellations: nil, refunded_amount: nil, refunds: nil, disputed_amount: nil, disputes: nil, sweep_id: nil, schedule_id: nil, occurrence_id: nil, payment_link_code: nil, foreign_id: nil, line_items: nil, amount_details: nil)
73
+ sig { params(transfer_id: ::String, created_on: ::DateTime, source: T.nilable(Models::Components::TransferSource), destination: T.nilable(Models::Components::TransferDestination), completed_on: T.nilable(::DateTime), status: T.nilable(Models::Components::TransferStatus), failure_reason: T.nilable(Models::Components::TransferFailureReason), amount: T.nilable(Models::Components::Amount), description: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), facilitator_fee: T.nilable(Models::Components::FacilitatorFee), moov_fee: T.nilable(::Integer), moov_fee_decimal: T.nilable(::String), moov_fee_details: T.nilable(Models::Components::MoovFeeDetails), group_id: T.nilable(::String), cancellations: T.nilable(T::Array[Models::Components::Cancellation]), refunded_amount: T.nilable(Models::Components::Amount), refunds: T.nilable(T::Array[Models::Components::CardAcquiringRefund]), disputed_amount: T.nilable(Models::Components::Amount), disputes: T.nilable(T::Array[Models::Components::CardAcquiringDispute]), sweep_id: T.nilable(::String), schedule_id: T.nilable(::String), occurrence_id: T.nilable(::String), payment_link_code: T.nilable(::String), foreign_id: T.nilable(::String), line_items: T.nilable(Models::Components::TransferLineItems), amount_details: T.nilable(Models::Components::TransferAmountDetails), capture: T.nilable(Models::Components::TransferCapture)).void }
74
+ def initialize(transfer_id:, created_on:, source: nil, destination: nil, completed_on: nil, status: nil, failure_reason: nil, amount: nil, description: nil, metadata: nil, facilitator_fee: nil, moov_fee: nil, moov_fee_decimal: nil, moov_fee_details: nil, group_id: nil, cancellations: nil, refunded_amount: nil, refunds: nil, disputed_amount: nil, disputes: nil, sweep_id: nil, schedule_id: nil, occurrence_id: nil, payment_link_code: nil, foreign_id: nil, line_items: nil, amount_details: nil, capture: nil)
73
75
  @transfer_id = transfer_id
74
76
  @created_on = created_on
75
77
  @source = source
@@ -97,6 +99,7 @@ module Moov
97
99
  @foreign_id = foreign_id
98
100
  @line_items = line_items
99
101
  @amount_details = amount_details
102
+ @capture = capture
100
103
  end
101
104
 
102
105
  sig { params(other: T.untyped).returns(T::Boolean) }
@@ -129,6 +132,7 @@ module Moov
129
132
  return false unless @foreign_id == other.foreign_id
130
133
  return false unless @line_items == other.line_items
131
134
  return false unless @amount_details == other.amount_details
135
+ return false unless @capture == other.capture
132
136
  true
133
137
  end
134
138
  end
@@ -62,4 +62,6 @@ class Moov::Models::Components::CreatedTransfer
62
62
  def line_items=(str_); end
63
63
  def amount_details(); end
64
64
  def amount_details=(str_); end
65
+ def capture(); end
66
+ def capture=(str_); end
65
67
  end
@@ -9,12 +9,12 @@ module Moov
9
9
  module Components
10
10
  # Specifies a partial amount to refund.
11
11
  #
12
- # This request body is optional, an empty body will issue a refund for the full amount of the original transfer.
12
+ # Before v2026.10, this request body may be omitted. In v2026.10 and later, send an empty object to refund the full amount of the original transfer.
13
13
  class CreateRefund
14
14
  extend T::Sig
15
15
  include Crystalline::MetadataFields
16
16
 
17
- # Amount to refund in cents. If null, the original transfer's full amount will be refunded.
17
+ # Amount to refund. Before v2026.10, specify the amount in integer cents. If omitted, the original transfer's full amount will be refunded.
18
18
  field :amount, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amount') } }
19
19
  # Breakdown of the refunded amount.
20
20
  field :amount_details, Crystalline::Nilable.new(Models::Components::RefundAmountDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amountDetails') } }
@@ -12,7 +12,7 @@ module Moov
12
12
  extend T::Sig
13
13
  include Crystalline::MetadataFields
14
14
 
15
- # Amount to reverse in cents. Partial amounts will automatically trigger a refund instead of a cancellation.
15
+ # Amount to reverse. Before v2026.10, specify the amount in integer cents. Partial amounts automatically trigger a refund instead of a cancellation.
16
16
  field :amount, ::Integer, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amount'), required: true } }
17
17
  # Breakdown of the reversed amount.
18
18
  field :amount_details, Crystalline::Nilable.new(Models::Components::ReversalAmountDetails), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amountDetails') } }
@@ -45,10 +45,10 @@ module Moov
45
45
  field :metadata, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::String)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('metadata') } }
46
46
  # Billing address associated with the card.
47
47
  field :billing_address, Crystalline::Nilable.new(Models::Components::Address), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('billingAddress') } }
48
+ # Spend controls applied to an issued card, including velocity runtime state.
49
+ field :controls, Crystalline::Nilable.new(Models::Components::IssuedControls), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('controls') } }
48
50
 
49
- field :controls, Crystalline::Nilable.new(Models::Components::IssuingControls), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('controls') } }
50
-
51
- sig { params(issued_card_id: ::String, brand: Models::Components::CardBrand, last_four_card_number: ::String, expiration: Models::Components::CardExpiration, funding_wallet_id: ::String, state: Models::Components::IssuedCardState, form_factor: Models::Components::IssuedCardFormFactor, created_on: ::DateTime, updated_on: ::DateTime, pan: ::String, cvv: ::String, authorized_user_account_id: T.nilable(::String), nickname: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), billing_address: T.nilable(Models::Components::Address), controls: T.nilable(Models::Components::IssuingControls)).void }
51
+ sig { params(issued_card_id: ::String, brand: Models::Components::CardBrand, last_four_card_number: ::String, expiration: Models::Components::CardExpiration, funding_wallet_id: ::String, state: Models::Components::IssuedCardState, form_factor: Models::Components::IssuedCardFormFactor, created_on: ::DateTime, updated_on: ::DateTime, pan: ::String, cvv: ::String, authorized_user_account_id: T.nilable(::String), nickname: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), billing_address: T.nilable(Models::Components::Address), controls: T.nilable(Models::Components::IssuedControls)).void }
52
52
  def initialize(issued_card_id:, brand:, last_four_card_number:, expiration:, funding_wallet_id:, state:, form_factor:, created_on:, updated_on:, pan:, cvv:, authorized_user_account_id: nil, nickname: nil, metadata: nil, billing_address: nil, controls: nil)
53
53
  @issued_card_id = issued_card_id
54
54
  @brand = brand
@@ -41,10 +41,10 @@ module Moov
41
41
  field :metadata, Crystalline::Nilable.new(Crystalline::Hash.new(Symbol, ::String)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('metadata') } }
42
42
  # Billing address associated with the card.
43
43
  field :billing_address, Crystalline::Nilable.new(Models::Components::Address), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('billingAddress') } }
44
+ # Spend controls applied to an issued card, including velocity runtime state.
45
+ field :controls, Crystalline::Nilable.new(Models::Components::IssuedControls), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('controls') } }
44
46
 
45
- field :controls, Crystalline::Nilable.new(Models::Components::IssuingControls), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('controls') } }
46
-
47
- sig { params(issued_card_id: ::String, brand: Models::Components::CardBrand, last_four_card_number: ::String, expiration: Models::Components::CardExpiration, funding_wallet_id: ::String, state: Models::Components::IssuedCardState, form_factor: Models::Components::IssuedCardFormFactor, created_on: ::DateTime, updated_on: ::DateTime, authorized_user_account_id: T.nilable(::String), nickname: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), billing_address: T.nilable(Models::Components::Address), controls: T.nilable(Models::Components::IssuingControls)).void }
47
+ sig { params(issued_card_id: ::String, brand: Models::Components::CardBrand, last_four_card_number: ::String, expiration: Models::Components::CardExpiration, funding_wallet_id: ::String, state: Models::Components::IssuedCardState, form_factor: Models::Components::IssuedCardFormFactor, created_on: ::DateTime, updated_on: ::DateTime, authorized_user_account_id: T.nilable(::String), nickname: T.nilable(::String), metadata: T.nilable(T::Hash[Symbol, ::String]), billing_address: T.nilable(Models::Components::Address), controls: T.nilable(Models::Components::IssuedControls)).void }
48
48
  def initialize(issued_card_id:, brand:, last_four_card_number:, expiration:, funding_wallet_id:, state:, form_factor:, created_on:, updated_on:, authorized_user_account_id: nil, nickname: nil, metadata: nil, billing_address: nil, controls: nil)
49
49
  @issued_card_id = issued_card_id
50
50
  @brand = brand
@@ -0,0 +1,52 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Spend controls applied to an issued card, including velocity runtime state.
11
+ class IssuedControls
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # Indicates if the card is single-use. If true, the card closes after the first authorization.
16
+ field :single_use, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('singleUse') } }
17
+ # The spending limits per time interval, including current runtime state.
18
+ field :velocity_limits, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::IssuedVelocityLimit)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('velocityLimits') } }
19
+ # Restricts card usage by merchant category. When not set, all categories are allowed.
20
+ field :merchant_category_restrictions, Crystalline::Nilable.new(Models::Components::MerchantCategoryRestrictions), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('merchantCategoryRestrictions') } }
21
+ # Restricts card usage to specific merchants, or blocks specific merchants.
22
+ field :merchant_restrictions, Crystalline::Nilable.new(Models::Components::MerchantRestrictions), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('merchantRestrictions') } }
23
+ # Limits card usage to specific days and times.
24
+ field :allowed_schedule, Crystalline::Nilable.new(Models::Components::IssuedControlsAllowedSchedule), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('allowedSchedule') } }
25
+ # A spend cutoff date and time. When set, all authorizations after this datetime are declined regardless of other controls.
26
+ field :expires_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('expiresOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
27
+
28
+ sig { params(single_use: T.nilable(T::Boolean), velocity_limits: T.nilable(T::Array[Models::Components::IssuedVelocityLimit]), merchant_category_restrictions: T.nilable(Models::Components::MerchantCategoryRestrictions), merchant_restrictions: T.nilable(Models::Components::MerchantRestrictions), allowed_schedule: T.nilable(Models::Components::IssuedControlsAllowedSchedule), expires_on: T.nilable(::DateTime)).void }
29
+ def initialize(single_use: nil, velocity_limits: nil, merchant_category_restrictions: nil, merchant_restrictions: nil, allowed_schedule: nil, expires_on: nil)
30
+ @single_use = single_use
31
+ @velocity_limits = velocity_limits
32
+ @merchant_category_restrictions = merchant_category_restrictions
33
+ @merchant_restrictions = merchant_restrictions
34
+ @allowed_schedule = allowed_schedule
35
+ @expires_on = expires_on
36
+ end
37
+
38
+ sig { params(other: T.untyped).returns(T::Boolean) }
39
+ def ==(other)
40
+ return false unless other.is_a? self.class
41
+ return false unless @single_use == other.single_use
42
+ return false unless @velocity_limits == other.velocity_limits
43
+ return false unless @merchant_category_restrictions == other.merchant_category_restrictions
44
+ return false unless @merchant_restrictions == other.merchant_restrictions
45
+ return false unless @allowed_schedule == other.allowed_schedule
46
+ return false unless @expires_on == other.expires_on
47
+ true
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,23 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::IssuedControls
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::IssuedControls
11
+ def single_use(); end
12
+ def single_use=(str_); end
13
+ def velocity_limits(); end
14
+ def velocity_limits=(str_); end
15
+ def merchant_category_restrictions(); end
16
+ def merchant_category_restrictions=(str_); end
17
+ def merchant_restrictions(); end
18
+ def merchant_restrictions=(str_); end
19
+ def allowed_schedule(); end
20
+ def allowed_schedule=(str_); end
21
+ def expires_on(); end
22
+ def expires_on=(str_); end
23
+ end
@@ -0,0 +1,36 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # Limits card usage to specific days and times.
11
+ class IssuedControlsAllowedSchedule
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # IANA timezone string used to evaluate window boundaries against the authorization time.
16
+ field :timezone, ::String, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('timezone'), required: true } }
17
+ # Time windows during which the card may authorize. Any matching window allows the transaction.
18
+ field :windows, Crystalline::Array.new(Models::Components::ScheduleWindow), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('windows'), required: true } }
19
+
20
+ sig { params(timezone: ::String, windows: T::Array[Models::Components::ScheduleWindow]).void }
21
+ def initialize(timezone:, windows:)
22
+ @timezone = timezone
23
+ @windows = windows
24
+ end
25
+
26
+ sig { params(other: T.untyped).returns(T::Boolean) }
27
+ def ==(other)
28
+ return false unless other.is_a? self.class
29
+ return false unless @timezone == other.timezone
30
+ return false unless @windows == other.windows
31
+ true
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,15 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::IssuedControlsAllowedSchedule
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::IssuedControlsAllowedSchedule
11
+ def timezone(); end
12
+ def timezone=(str_); end
13
+ def windows(); end
14
+ def windows=(str_); end
15
+ end
@@ -0,0 +1,60 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+
7
+ module Moov
8
+ module Models
9
+ module Components
10
+ # A velocity limit with its current runtime state.
11
+ class IssuedVelocityLimit
12
+ extend T::Sig
13
+ include Crystalline::MetadataFields
14
+
15
+ # Specifies the time frame for a velocity limit. `per-transaction` applies to each individual authorization and never resets. Time-based intervals (where supported) reset at midnight ET.
16
+ field :interval, Models::Components::IssuingIntervalLimit, { 'format_json': { 'letter_case': ::Moov::Utils.field_name('interval'), required: true, 'decoder': ::Moov::Utils.enum_from_string(Models::Components::IssuingIntervalLimit, false) } }
17
+ # The maximum amount in cents that can be spent in a given interval.
18
+ field :amount, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amount') } }
19
+ # The maximum number of transactions allowed in the given interval.
20
+ field :count, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('count') } }
21
+ # The amount in cents already spent in the current interval.
22
+ field :amount_used, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amountUsed') } }
23
+ # The amount in cents remaining in the current interval.
24
+ field :amount_remaining, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('amountRemaining') } }
25
+ # The number of transactions already made in the current interval.
26
+ field :count_used, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('countUsed') } }
27
+ # The number of transactions remaining in the current interval.
28
+ field :count_remaining, Crystalline::Nilable.new(::Integer), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('countRemaining') } }
29
+ # When the current interval resets. Absent for per-transaction limits.
30
+ field :resets_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('resetsOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
31
+
32
+ sig { params(interval: Models::Components::IssuingIntervalLimit, amount: T.nilable(::Integer), count: T.nilable(::Integer), amount_used: T.nilable(::Integer), amount_remaining: T.nilable(::Integer), count_used: T.nilable(::Integer), count_remaining: T.nilable(::Integer), resets_on: T.nilable(::DateTime)).void }
33
+ def initialize(interval:, amount: nil, count: nil, amount_used: nil, amount_remaining: nil, count_used: nil, count_remaining: nil, resets_on: nil)
34
+ @interval = interval
35
+ @amount = amount
36
+ @count = count
37
+ @amount_used = amount_used
38
+ @amount_remaining = amount_remaining
39
+ @count_used = count_used
40
+ @count_remaining = count_remaining
41
+ @resets_on = resets_on
42
+ end
43
+
44
+ sig { params(other: T.untyped).returns(T::Boolean) }
45
+ def ==(other)
46
+ return false unless other.is_a? self.class
47
+ return false unless @interval == other.interval
48
+ return false unless @amount == other.amount
49
+ return false unless @count == other.count
50
+ return false unless @amount_used == other.amount_used
51
+ return false unless @amount_remaining == other.amount_remaining
52
+ return false unless @count_used == other.count_used
53
+ return false unless @count_remaining == other.count_remaining
54
+ return false unless @resets_on == other.resets_on
55
+ true
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+
5
+ class Moov::Models::Components::IssuedVelocityLimit
6
+ extend ::Crystalline::MetadataFields::ClassMethods
7
+ end
8
+
9
+
10
+ class Moov::Models::Components::IssuedVelocityLimit
11
+ def interval(); end
12
+ def interval=(str_); end
13
+ def amount(); end
14
+ def amount=(str_); end
15
+ def count(); end
16
+ def count=(str_); end
17
+ def amount_used(); end
18
+ def amount_used=(str_); end
19
+ def amount_remaining(); end
20
+ def amount_remaining=(str_); end
21
+ def count_used(); end
22
+ def count_used=(str_); end
23
+ def count_remaining(); end
24
+ def count_remaining=(str_); end
25
+ def resets_on(); end
26
+ def resets_on=(str_); end
27
+ end
@@ -16,11 +16,23 @@ module Moov
16
16
  field :single_use, Crystalline::Nilable.new(Crystalline::Boolean.new), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('singleUse') } }
17
17
  # Sets the spending limit per time interval. Only one limit per interval is supported.
18
18
  field :velocity_limits, Crystalline::Nilable.new(Crystalline::Array.new(Models::Components::IssuingVelocityLimit)), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('velocityLimits') } }
19
+ # Restricts card usage by merchant category. When not set, all categories are allowed.
20
+ field :merchant_category_restrictions, Crystalline::Nilable.new(Models::Components::MerchantCategoryRestrictions), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('merchantCategoryRestrictions') } }
21
+ # Restricts card usage to specific merchants, or blocks specific merchants.
22
+ field :merchant_restrictions, Crystalline::Nilable.new(Models::Components::MerchantRestrictions), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('merchantRestrictions') } }
23
+ # Limits card usage to specific days and times. Set to `null` to remove all schedule restrictions.
24
+ field :allowed_schedule, Crystalline::Nilable.new(Models::Components::IssuingControlsAllowedSchedule), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('allowedSchedule') } }
25
+ # A spend cutoff date and time. When set, all authorizations after this datetime are declined regardless of other controls. Set to `null` for no cutoff.
26
+ field :expires_on, Crystalline::Nilable.new(::DateTime), { 'format_json': { 'letter_case': ::Moov::Utils.field_name('expiresOn'), 'decoder': ::Moov::Utils.datetime_from_iso_format(true) } }
19
27
 
20
- sig { params(single_use: T.nilable(T::Boolean), velocity_limits: T.nilable(T::Array[Models::Components::IssuingVelocityLimit])).void }
21
- def initialize(single_use: nil, velocity_limits: nil)
28
+ sig { params(single_use: T.nilable(T::Boolean), velocity_limits: T.nilable(T::Array[Models::Components::IssuingVelocityLimit]), merchant_category_restrictions: T.nilable(Models::Components::MerchantCategoryRestrictions), merchant_restrictions: T.nilable(Models::Components::MerchantRestrictions), allowed_schedule: T.nilable(Models::Components::IssuingControlsAllowedSchedule), expires_on: T.nilable(::DateTime)).void }
29
+ def initialize(single_use: nil, velocity_limits: nil, merchant_category_restrictions: nil, merchant_restrictions: nil, allowed_schedule: nil, expires_on: nil)
22
30
  @single_use = single_use
23
31
  @velocity_limits = velocity_limits
32
+ @merchant_category_restrictions = merchant_category_restrictions
33
+ @merchant_restrictions = merchant_restrictions
34
+ @allowed_schedule = allowed_schedule
35
+ @expires_on = expires_on
24
36
  end
25
37
 
26
38
  sig { params(other: T.untyped).returns(T::Boolean) }
@@ -28,6 +40,10 @@ module Moov
28
40
  return false unless other.is_a? self.class
29
41
  return false unless @single_use == other.single_use
30
42
  return false unless @velocity_limits == other.velocity_limits
43
+ return false unless @merchant_category_restrictions == other.merchant_category_restrictions
44
+ return false unless @merchant_restrictions == other.merchant_restrictions
45
+ return false unless @allowed_schedule == other.allowed_schedule
46
+ return false unless @expires_on == other.expires_on
31
47
  true
32
48
  end
33
49
  end