moov_ruby 26.7.0.pre.dev.6 → 26.7.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/lib/moov/avatars.rb +275 -0
  3. data/lib/moov/models/components/avataruploadrequest.rb +32 -0
  4. data/lib/moov/models/components/avataruploadrequest.rbi +13 -0
  5. data/lib/moov/models/components/avataruploadrequest_file.rb +36 -0
  6. data/lib/moov/models/components/avataruploadrequest_file.rbi +15 -0
  7. data/lib/moov/models/components/capabilityid.rb +1 -0
  8. data/lib/moov/models/components/createtransfer.rb +6 -2
  9. data/lib/moov/models/components/createtransfer.rbi +2 -0
  10. data/lib/moov/models/components/feepaidby.rb +19 -0
  11. data/lib/moov/models/components/feepaidby.rbi +11 -0
  12. data/lib/moov/models/components/incurredfee.rb +6 -2
  13. data/lib/moov/models/components/incurredfee.rbi +2 -0
  14. data/lib/moov/models/components/issuingintervallimit.rb +1 -1
  15. data/lib/moov/models/components/issuingvelocitylimit.rb +1 -1
  16. data/lib/moov/models/components/paymentlinkpayoutdetails.rb +8 -2
  17. data/lib/moov/models/components/paymentlinkpayoutdetails.rbi +2 -0
  18. data/lib/moov/models/components/paymentlinkpayoutdetailsupdate.rb +8 -2
  19. data/lib/moov/models/components/paymentlinkpayoutdetailsupdate.rbi +2 -0
  20. data/lib/moov/models/components/payoutdetailserror.rb +6 -2
  21. data/lib/moov/models/components/payoutdetailserror.rbi +2 -0
  22. data/lib/moov/models/components/product.rb +6 -2
  23. data/lib/moov/models/components/product.rbi +2 -0
  24. data/lib/moov/models/components/productcategories.rb +32 -0
  25. data/lib/moov/models/components/productcategories.rbi +13 -0
  26. data/lib/moov/models/components/productcategory.rb +48 -0
  27. data/lib/moov/models/components/productcategory.rbi +21 -0
  28. data/lib/moov/models/components/productrequest.rb +6 -2
  29. data/lib/moov/models/components/productrequest.rbi +2 -0
  30. data/lib/moov/models/components/schemebasicauth.rb +36 -0
  31. data/lib/moov/models/components/schemebasicauth.rbi +15 -0
  32. data/lib/moov/models/components/schemeoauth2auth.rb +40 -0
  33. data/lib/moov/models/components/schemeoauth2auth.rbi +17 -0
  34. data/lib/moov/models/components/transferfeepaidby.rb +32 -0
  35. data/lib/moov/models/components/transferfeepaidby.rbi +13 -0
  36. data/lib/moov/models/components.rb +8 -0
  37. data/lib/moov/models/errors/productrequestvalidationerror.rb +6 -2
  38. data/lib/moov/models/errors/productrequestvalidationerror.rbi +2 -0
  39. data/lib/moov/models/operations/deleteavatar_request.rb +32 -0
  40. data/lib/moov/models/operations/deleteavatar_request.rbi +13 -0
  41. data/lib/moov/models/operations/deleteavatar_response.rb +44 -0
  42. data/lib/moov/models/operations/deleteavatar_response.rbi +19 -0
  43. data/lib/moov/models/operations/deleteavatar_security.rb +36 -0
  44. data/lib/moov/models/operations/deleteavatar_security.rbi +15 -0
  45. data/lib/moov/models/operations/listproductcategories_response.rb +48 -0
  46. data/lib/moov/models/operations/listproductcategories_response.rbi +21 -0
  47. data/lib/moov/models/operations/listproducts_request.rb +8 -2
  48. data/lib/moov/models/operations/listproducts_request.rbi +2 -0
  49. data/lib/moov/models/operations/uploadavatar_request.rb +36 -0
  50. data/lib/moov/models/operations/uploadavatar_request.rbi +15 -0
  51. data/lib/moov/models/operations/uploadavatar_response.rb +44 -0
  52. data/lib/moov/models/operations/uploadavatar_response.rbi +19 -0
  53. data/lib/moov/models/operations/uploadavatar_security.rb +36 -0
  54. data/lib/moov/models/operations/uploadavatar_security.rbi +15 -0
  55. data/lib/moov/models/operations.rb +7 -0
  56. data/lib/moov/products.rb +113 -8
  57. data/lib/moov/sdk_hooks/clientcredentials.rb +386 -0
  58. data/lib/moov/sdk_hooks/hooks.rb +6 -0
  59. data/lib/moov/sdk_hooks/oauth2scopes.rb +18 -0
  60. data/lib/moov/sdkconfiguration.rb +3 -3
  61. metadata +36 -4
@@ -0,0 +1,386 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'digest'
7
+ require 'json'
8
+ require 'net/http'
9
+ require 'uri'
10
+
11
+ require_relative './types'
12
+
13
+ module Moov
14
+ module SDKHooks
15
+ class Credentials
16
+ extend T::Sig
17
+
18
+ sig { returns(String) }
19
+ attr_reader :client_id
20
+
21
+ sig { returns(String) }
22
+ attr_reader :client_secret
23
+
24
+ sig { returns(String) }
25
+ attr_reader :token_url
26
+
27
+ sig { returns(T.nilable(T::Array[String])) }
28
+ attr_reader :scopes
29
+
30
+ sig { returns(T::Hash[String, String]) }
31
+ attr_reader :additional_properties
32
+
33
+ sig do
34
+ params(
35
+ client_id: String,
36
+ client_secret: String,
37
+ token_url: String,
38
+ scopes: T.nilable(T::Array[String]),
39
+ additional_properties: T::Hash[String, String]
40
+ ).void
41
+ end
42
+ def initialize(client_id:, client_secret:, token_url:, scopes: nil, additional_properties: {})
43
+ @client_id = client_id
44
+ @client_secret = client_secret
45
+ @token_url = token_url
46
+ @scopes = scopes
47
+ @additional_properties = additional_properties
48
+ end
49
+ end
50
+
51
+ class Session
52
+ extend T::Sig
53
+
54
+ sig { returns(Credentials) }
55
+ attr_reader :credentials
56
+
57
+ sig { returns(String) }
58
+ attr_reader :token
59
+
60
+ sig { returns(T::Array[String]) }
61
+ attr_reader :scopes
62
+
63
+ sig { returns(T.nilable(Integer)) }
64
+ attr_reader :expires_at
65
+
66
+ sig do
67
+ params(
68
+ credentials: Credentials,
69
+ token: String,
70
+ scopes: T::Array[String],
71
+ expires_at: T.nilable(Integer)
72
+ ).void
73
+ end
74
+ def initialize(credentials:, token:, scopes:, expires_at: nil)
75
+ @credentials = credentials
76
+ @token = token
77
+ @scopes = scopes
78
+ @expires_at = expires_at
79
+ end
80
+ end
81
+
82
+ class ClientCredentialsHook < AbstractSDKHook
83
+
84
+ extend T::Sig
85
+
86
+ @global_lock = Mutex.new
87
+ @client_locks = {}
88
+ @sessions = {}
89
+
90
+ class << self
91
+ attr_reader :global_lock
92
+ attr_accessor :client_locks, :sessions
93
+ end
94
+
95
+ sig { override.params(config: SDKConfiguration).returns(SDKConfiguration) }
96
+ def sdk_init(config:)
97
+ raise 'Client is required' if config.client.nil?
98
+
99
+ @client = config.client
100
+ config
101
+ end
102
+
103
+ sig do
104
+ override.params(
105
+ hook_ctx: BeforeRequestHookContext,
106
+ request: Faraday::Request
107
+ ).returns(Faraday::Request)
108
+ end
109
+ def before_request(hook_ctx:, request:)
110
+ return request if hook_disabled?(hook_ctx)
111
+
112
+ credentials = get_credentials(hook_ctx)
113
+ return request if credentials.nil?
114
+
115
+ session_key = get_session_key(credentials.client_id, credentials.client_secret)
116
+ scopes = get_required_scopes(credentials, hook_ctx)
117
+ session = get_existing_session(session_key, scopes)
118
+
119
+ if session.nil?
120
+ token_url = resolve_token_endpoint(hook_ctx.base_url, credentials.token_url)
121
+ session = do_token_request(token_url, credentials, scopes)
122
+ store_session(session_key, scopes, session)
123
+ end
124
+
125
+ request.headers['Authorization'] = "Bearer #{session.token}"
126
+ request
127
+ end
128
+
129
+ sig do
130
+ override.params(
131
+ error: T.nilable(StandardError),
132
+ hook_ctx: AfterErrorHookContext,
133
+ response: T.nilable(Faraday::Response)
134
+ ).returns(T.nilable(Faraday::Response))
135
+ end
136
+ def after_error(error:, hook_ctx:, response:)
137
+ return response if hook_disabled?(hook_ctx)
138
+
139
+ # We don't want to refresh the token if the error is not related to the token
140
+ return response unless error.nil?
141
+
142
+ credentials = get_credentials(hook_ctx)
143
+ return response if credentials.nil?
144
+
145
+ if !response.nil? && response.status == 401
146
+ session_key = get_session_key(credentials.client_id, credentials.client_secret)
147
+ scopes = get_required_scopes(credentials, hook_ctx)
148
+ scope_key = get_scope_key(scopes)
149
+ remove_session(session_key, scope_key)
150
+ end
151
+
152
+ response
153
+ end
154
+
155
+ private
156
+
157
+ sig { params(hook_ctx: HookContext).returns(T::Boolean) }
158
+ def hook_disabled?(hook_ctx)
159
+ hook_ctx.oauth2_scopes.nil?
160
+ end
161
+
162
+
163
+ sig { params(hook_ctx: HookContext).returns(T.nilable(Credentials)) }
164
+ def get_credentials(hook_ctx)
165
+ source = hook_ctx.security_source
166
+ return nil if source.nil?
167
+
168
+ security = source.call
169
+
170
+ case hook_ctx.operation_id
171
+ when 'uploadAvatar'
172
+ return get_credentials_upload_avatar(security)
173
+ when 'deleteAvatar'
174
+ return get_credentials_delete_avatar(security)
175
+ end
176
+
177
+ nil
178
+ end
179
+
180
+
181
+ sig { params(security: T.untyped).returns(T.nilable(Credentials)) }
182
+ def get_credentials_upload_avatar(security)
183
+ return nil if security.nil? || security.o_auth2_auth.nil?
184
+
185
+ # Extract additional properties from security object
186
+ additional_properties = {}
187
+ security.o_auth2_auth.class.fields.each do |f|
188
+ name = f.name.to_s
189
+ next if %w[client_id client_secret token_url scopes].include?(name)
190
+
191
+ metadata = f.metadata&.dig(:security)
192
+ next if metadata.nil?
193
+
194
+ field_name = metadata[:field_name] || name
195
+ value = security.o_auth2_auth.send(f.name)
196
+ additional_properties[field_name] = value.to_s unless value.nil?
197
+ end
198
+
199
+ Credentials.new(
200
+ client_id: security.o_auth2_auth.client_id,
201
+ client_secret: security.o_auth2_auth.client_secret,
202
+ token_url: security.o_auth2_auth.token_url,
203
+ scopes: nil,
204
+ additional_properties: additional_properties
205
+ )
206
+ end
207
+
208
+ sig { params(security: T.untyped).returns(T.nilable(Credentials)) }
209
+ def get_credentials_delete_avatar(security)
210
+ return nil if security.nil? || security.o_auth2_auth.nil?
211
+
212
+ # Extract additional properties from security object
213
+ additional_properties = {}
214
+ security.o_auth2_auth.class.fields.each do |f|
215
+ name = f.name.to_s
216
+ next if %w[client_id client_secret token_url scopes].include?(name)
217
+
218
+ metadata = f.metadata&.dig(:security)
219
+ next if metadata.nil?
220
+
221
+ field_name = metadata[:field_name] || name
222
+ value = security.o_auth2_auth.send(f.name)
223
+ additional_properties[field_name] = value.to_s unless value.nil?
224
+ end
225
+
226
+ Credentials.new(
227
+ client_id: security.o_auth2_auth.client_id,
228
+ client_secret: security.o_auth2_auth.client_secret,
229
+ token_url: security.o_auth2_auth.token_url,
230
+ scopes: nil,
231
+ additional_properties: additional_properties
232
+ )
233
+ end
234
+
235
+
236
+ sig { params(base_url: String, token_url: String).returns(String) }
237
+ def resolve_token_endpoint(base_url, token_url)
238
+ parsed = URI.parse(token_url)
239
+ return token_url if parsed.host
240
+
241
+ base = base_url.chomp('/')
242
+ URI.join("#{base}/", token_url).to_s
243
+ end
244
+
245
+ sig { params(token_url: String, credentials: Credentials, scopes: T::Array[String]).returns(Session) }
246
+ def do_token_request(token_url, credentials, scopes)
247
+ payload = {
248
+ 'grant_type' => 'client_credentials',
249
+ 'client_id' => credentials.client_id,
250
+ 'client_secret' => credentials.client_secret
251
+ }
252
+
253
+ payload['scope'] = scopes.join(' ') unless scopes.empty?
254
+
255
+ # Add additional properties to payload
256
+ credentials.additional_properties.each do |key, value|
257
+ payload[key] = value
258
+ end
259
+ response = @client.post(token_url) do |req|
260
+ req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
261
+ req.body = URI.encode_www_form(payload)
262
+ end
263
+
264
+ raise "Unexpected status code #{response.status} from token endpoint" unless response.status >= 200 && response.status < 300
265
+
266
+ response_data = JSON.parse(response.body)
267
+
268
+ raise 'Unexpected token type from token endpoint' unless response_data.fetch('token_type', '').downcase == 'bearer'
269
+
270
+ expires_at = nil
271
+ if response_data.key?('expires_in')
272
+ expires_at = Time.now.to_i + response_data['expires_in'].to_i
273
+ end
274
+
275
+ Session.new(
276
+ credentials: credentials,
277
+ token: response_data['access_token'],
278
+ scopes: scopes,
279
+ expires_at: expires_at
280
+ )
281
+ end
282
+
283
+ sig { params(client_id: String, client_secret: String).returns(String) }
284
+ def get_session_key(client_id, client_secret)
285
+ Digest::MD5.hexdigest("#{client_id}:#{client_secret}")
286
+ end
287
+
288
+ sig { params(credentials: Credentials, hook_ctx: HookContext).returns(T::Array[String]) }
289
+ def get_required_scopes(credentials, hook_ctx)
290
+ return T.must(credentials.scopes) unless credentials.scopes.nil?
291
+
292
+ hook_ctx.oauth2_scopes || []
293
+ end
294
+
295
+ sig { params(scopes: T::Array[String]).returns(String) }
296
+ def get_scope_key(scopes)
297
+ return '' if scopes.empty?
298
+
299
+ scopes.sort.join('&')
300
+ end
301
+
302
+ sig { params(client_key: String, scopes: T::Array[String], session: Session).void }
303
+ def store_session(client_key, scopes, session)
304
+ scope_key = get_scope_key(scopes)
305
+ lock = get_client_lock(client_key)
306
+ lock.synchronize do
307
+ self.class.sessions[client_key] ||= {}
308
+ self.class.sessions[client_key][scope_key] = session
309
+ end
310
+ end
311
+
312
+ sig { params(client_key: String, scope_key: String).void }
313
+ def remove_session(client_key, scope_key)
314
+ lock = get_client_lock(client_key)
315
+ lock.synchronize do
316
+ if self.class.sessions.key?(client_key) && self.class.sessions[client_key].key?(scope_key)
317
+ self.class.sessions[client_key].delete(scope_key)
318
+ self.class.sessions.delete(client_key) if self.class.sessions[client_key].empty?
319
+ end
320
+ end
321
+ end
322
+
323
+ sig { params(client_key: String, required_scopes: T::Array[String]).returns(T.nilable(Session)) }
324
+ def get_existing_session(client_key, required_scopes)
325
+ scope_key = get_scope_key(required_scopes)
326
+ expired_keys = []
327
+ result = T.let(nil, T.untyped)
328
+
329
+ lock = get_client_lock(client_key)
330
+ lock.synchronize do
331
+ return nil unless self.class.sessions.key?(client_key)
332
+
333
+ client_sessions = self.class.sessions[client_key]
334
+
335
+ # Check for exact scope match first
336
+ if client_sessions.key?(scope_key)
337
+ exact_match = client_sessions[scope_key]
338
+ if token_expired?(exact_match.expires_at)
339
+ expired_keys << scope_key
340
+ else
341
+ result = exact_match
342
+ end
343
+ end
344
+
345
+ # If no exact match, look for a superset match
346
+ if result.nil?
347
+ found = T.let(false, T::Boolean)
348
+ client_sessions.each do |key, session|
349
+ if token_expired?(session.expires_at)
350
+ expired_keys << key
351
+ elsif !found && required_scopes?(session.scopes, required_scopes)
352
+ result = session
353
+ found = true
354
+ end
355
+ end
356
+ end
357
+
358
+ # Clean up expired sessions
359
+ expired_keys.each { |key| client_sessions.delete(key) }
360
+
361
+ # Clean up empty client sessions
362
+ self.class.sessions.delete(client_key) if self.class.sessions.key?(client_key) && self.class.sessions[client_key].empty?
363
+ end
364
+
365
+ result
366
+ end
367
+
368
+ sig { params(scopes: T::Array[String], required_scopes: T::Array[String]).returns(T::Boolean) }
369
+ def required_scopes?(scopes, required_scopes)
370
+ required_scopes.all? { |scope| scopes.include?(scope) }
371
+ end
372
+
373
+ sig { params(expires_at: T.nilable(Integer)).returns(T::Boolean) }
374
+ def token_expired?(expires_at)
375
+ !expires_at.nil? && Time.now.to_i + 60 >= expires_at
376
+ end
377
+
378
+ sig { params(client_key: String).returns(Mutex) }
379
+ def get_client_lock(client_key)
380
+ self.class.global_lock.synchronize do
381
+ self.class.client_locks[client_key] ||= Mutex.new
382
+ end
383
+ end
384
+ end
385
+ end
386
+ end
@@ -5,6 +5,8 @@
5
5
 
6
6
  require_relative './types'
7
7
  require_relative './registration'
8
+ require_relative './oauth2scopes'
9
+ require_relative './clientcredentials'
8
10
 
9
11
  module Moov
10
12
  module SDKHooks
@@ -17,6 +19,10 @@ module Moov
17
19
  @before_request_hooks = T.let([], T::Array[AbstractSDKHook])
18
20
  @after_success_hooks = T.let([], T::Array[AbstractSDKHook])
19
21
  @after_error_hooks = T.let([], T::Array[AbstractSDKHook])
22
+ cc_hook = ClientCredentialsHook.new
23
+ register_sdk_init_hook cc_hook
24
+ register_before_request_hook cc_hook
25
+ register_after_error_hook cc_hook
20
26
  Registration.init_hooks self
21
27
  end
22
28
 
@@ -0,0 +1,18 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ module Moov
7
+ module SDKHooks
8
+
9
+ # OAuth2AuthOAuth2Scope - Available scopes for the OAuth2Auth OAuth 2.0 scheme (clientCredentials flow).
10
+ class OAuth2AuthOAuth2Scope < T::Enum
11
+
12
+ enums do
13
+ # ROOT_ACCOUNTS_WRITE
14
+ ROOT_ACCOUNTS_WRITE = new('/accounts.write')
15
+ end
16
+ end
17
+ end
18
+ end
@@ -88,9 +88,9 @@ module Moov
88
88
  end
89
89
  @language = 'ruby'
90
90
  @openapi_doc_version = 'v2026.07.00'
91
- @sdk_version = '26.7.0-dev.6'
92
- @gen_version = '2.917.0'
93
- @user_agent = 'speakeasy-sdk/ruby 26.7.0-dev.6 2.917.0 v2026.07.00 moov_ruby'
91
+ @sdk_version = '26.7.0'
92
+ @gen_version = '2.924.0'
93
+ @user_agent = 'speakeasy-sdk/ruby 26.7.0 2.924.0 v2026.07.00 moov_ruby'
94
94
  end
95
95
 
96
96
  sig { returns([String, T::Hash[Symbol, String]]) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moov_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 26.7.0.pre.dev.6
4
+ version: 26.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Speakeasy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-07-13 00:00:00.000000000 Z
11
+ date: 2026-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -407,6 +407,10 @@ files:
407
407
  - lib/moov/models/components/authtoken.rbi
408
408
  - lib/moov/models/components/authtokenrequest.rb
409
409
  - lib/moov/models/components/authtokenrequest.rbi
410
+ - lib/moov/models/components/avataruploadrequest.rb
411
+ - lib/moov/models/components/avataruploadrequest.rbi
412
+ - lib/moov/models/components/avataruploadrequest_file.rb
413
+ - lib/moov/models/components/avataruploadrequest_file.rbi
410
414
  - lib/moov/models/components/bankaccount.rb
411
415
  - lib/moov/models/components/bankaccount.rbi
412
416
  - lib/moov/models/components/bankaccountexception.rb
@@ -825,6 +829,8 @@ files:
825
829
  - lib/moov/models/components/feecategory.rbi
826
830
  - lib/moov/models/components/feemodel.rb
827
831
  - lib/moov/models/components/feemodel.rbi
832
+ - lib/moov/models/components/feepaidby.rb
833
+ - lib/moov/models/components/feepaidby.rbi
828
834
  - lib/moov/models/components/feeplan.rb
829
835
  - lib/moov/models/components/feeplan.rbi
830
836
  - lib/moov/models/components/feeplanagreement.rb
@@ -1199,6 +1205,10 @@ files:
1199
1205
  - lib/moov/models/components/primaryregulator.rbi
1200
1206
  - lib/moov/models/components/product.rb
1201
1207
  - lib/moov/models/components/product.rbi
1208
+ - lib/moov/models/components/productcategories.rb
1209
+ - lib/moov/models/components/productcategories.rbi
1210
+ - lib/moov/models/components/productcategory.rb
1211
+ - lib/moov/models/components/productcategory.rbi
1202
1212
  - lib/moov/models/components/productimagemetadata.rb
1203
1213
  - lib/moov/models/components/productimagemetadata.rbi
1204
1214
  - lib/moov/models/components/productoption.rb
@@ -1369,6 +1379,10 @@ files:
1369
1379
  - lib/moov/models/components/schedulepaymentmethod.rbi
1370
1380
  - lib/moov/models/components/scheduleresponse.rb
1371
1381
  - lib/moov/models/components/scheduleresponse.rbi
1382
+ - lib/moov/models/components/schemebasicauth.rb
1383
+ - lib/moov/models/components/schemebasicauth.rbi
1384
+ - lib/moov/models/components/schemeoauth2auth.rb
1385
+ - lib/moov/models/components/schemeoauth2auth.rbi
1372
1386
  - lib/moov/models/components/seccode.rb
1373
1387
  - lib/moov/models/components/seccode.rbi
1374
1388
  - lib/moov/models/components/security.rb
@@ -1491,6 +1505,8 @@ files:
1491
1505
  - lib/moov/models/components/transferentrymode.rbi
1492
1506
  - lib/moov/models/components/transferfailurereason.rb
1493
1507
  - lib/moov/models/components/transferfailurereason.rbi
1508
+ - lib/moov/models/components/transferfeepaidby.rb
1509
+ - lib/moov/models/components/transferfeepaidby.rbi
1494
1510
  - lib/moov/models/components/transferlineitem.rb
1495
1511
  - lib/moov/models/components/transferlineitem.rbi
1496
1512
  - lib/moov/models/components/transferlineitemimagemetadata.rb
@@ -1945,6 +1961,12 @@ files:
1945
1961
  - lib/moov/models/operations/createwallet_response.rbi
1946
1962
  - lib/moov/models/operations/createwebhook_response.rb
1947
1963
  - lib/moov/models/operations/createwebhook_response.rbi
1964
+ - lib/moov/models/operations/deleteavatar_request.rb
1965
+ - lib/moov/models/operations/deleteavatar_request.rbi
1966
+ - lib/moov/models/operations/deleteavatar_response.rb
1967
+ - lib/moov/models/operations/deleteavatar_response.rbi
1968
+ - lib/moov/models/operations/deleteavatar_security.rb
1969
+ - lib/moov/models/operations/deleteavatar_security.rbi
1948
1970
  - lib/moov/models/operations/deletedisputeevidencefile_request.rb
1949
1971
  - lib/moov/models/operations/deletedisputeevidencefile_request.rbi
1950
1972
  - lib/moov/models/operations/deletedisputeevidencefile_response.rb
@@ -2349,6 +2371,8 @@ files:
2349
2371
  - lib/moov/models/operations/listpaymentmethods_request.rbi
2350
2372
  - lib/moov/models/operations/listpaymentmethods_response.rb
2351
2373
  - lib/moov/models/operations/listpaymentmethods_response.rbi
2374
+ - lib/moov/models/operations/listproductcategories_response.rb
2375
+ - lib/moov/models/operations/listproductcategories_response.rbi
2352
2376
  - lib/moov/models/operations/listproducts_request.rb
2353
2377
  - lib/moov/models/operations/listproducts_request.rbi
2354
2378
  - lib/moov/models/operations/listproducts_response.rb
@@ -2533,6 +2557,12 @@ files:
2533
2557
  - lib/moov/models/operations/updatewebhook_request.rbi
2534
2558
  - lib/moov/models/operations/updatewebhook_response.rb
2535
2559
  - lib/moov/models/operations/updatewebhook_response.rbi
2560
+ - lib/moov/models/operations/uploadavatar_request.rb
2561
+ - lib/moov/models/operations/uploadavatar_request.rbi
2562
+ - lib/moov/models/operations/uploadavatar_response.rb
2563
+ - lib/moov/models/operations/uploadavatar_response.rbi
2564
+ - lib/moov/models/operations/uploadavatar_security.rb
2565
+ - lib/moov/models/operations/uploadavatar_security.rbi
2536
2566
  - lib/moov/models/operations/uploaddisputeevidencefile_request.rb
2537
2567
  - lib/moov/models/operations/uploaddisputeevidencefile_request.rbi
2538
2568
  - lib/moov/models/operations/uploaddisputeevidencefile_response.rb
@@ -2566,8 +2596,10 @@ files:
2566
2596
  - lib/moov/representatives.rb
2567
2597
  - lib/moov/resolution_links.rb
2568
2598
  - lib/moov/scheduling.rb
2599
+ - lib/moov/sdk_hooks/clientcredentials.rb
2569
2600
  - lib/moov/sdk_hooks/hooks.rb
2570
2601
  - lib/moov/sdk_hooks/moov_version.rb
2602
+ - lib/moov/sdk_hooks/oauth2scopes.rb
2571
2603
  - lib/moov/sdk_hooks/registration.rb
2572
2604
  - lib/moov/sdk_hooks/types.rb
2573
2605
  - lib/moov/sdkconfiguration.rb
@@ -2609,9 +2641,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2609
2641
  version: '3.2'
2610
2642
  required_rubygems_version: !ruby/object:Gem::Requirement
2611
2643
  requirements:
2612
- - - ">"
2644
+ - - ">="
2613
2645
  - !ruby/object:Gem::Version
2614
- version: 1.3.1
2646
+ version: '0'
2615
2647
  requirements: []
2616
2648
  rubygems_version: 3.4.19
2617
2649
  signing_key: