moov_ruby 26.10.0.pre.dev.0 → 26.10.0.pre.dev.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 (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 +34 -2
@@ -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.10.00'
91
- @sdk_version = '26.10.0-dev.0'
92
- @gen_version = '2.917.0'
93
- @user_agent = 'speakeasy-sdk/ruby 26.10.0-dev.0 2.917.0 v2026.10.00 moov_ruby'
91
+ @sdk_version = '26.10.0-dev.1'
92
+ @gen_version = '2.924.0'
93
+ @user_agent = 'speakeasy-sdk/ruby 26.10.0-dev.1 2.924.0 v2026.10.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.10.0.pre.dev.0
4
+ version: 26.10.0.pre.dev.1
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
@@ -827,6 +831,8 @@ files:
827
831
  - lib/moov/models/components/feecategory.rbi
828
832
  - lib/moov/models/components/feemodel.rb
829
833
  - lib/moov/models/components/feemodel.rbi
834
+ - lib/moov/models/components/feepaidby.rb
835
+ - lib/moov/models/components/feepaidby.rbi
830
836
  - lib/moov/models/components/feeplan.rb
831
837
  - lib/moov/models/components/feeplan.rbi
832
838
  - lib/moov/models/components/feeplanagreement.rb
@@ -1203,6 +1209,10 @@ files:
1203
1209
  - lib/moov/models/components/primaryregulator.rbi
1204
1210
  - lib/moov/models/components/product.rb
1205
1211
  - lib/moov/models/components/product.rbi
1212
+ - lib/moov/models/components/productcategories.rb
1213
+ - lib/moov/models/components/productcategories.rbi
1214
+ - lib/moov/models/components/productcategory.rb
1215
+ - lib/moov/models/components/productcategory.rbi
1206
1216
  - lib/moov/models/components/productimagemetadata.rb
1207
1217
  - lib/moov/models/components/productimagemetadata.rbi
1208
1218
  - lib/moov/models/components/productoption.rb
@@ -1373,6 +1383,10 @@ files:
1373
1383
  - lib/moov/models/components/schedulepaymentmethod.rbi
1374
1384
  - lib/moov/models/components/scheduleresponse.rb
1375
1385
  - lib/moov/models/components/scheduleresponse.rbi
1386
+ - lib/moov/models/components/schemebasicauth.rb
1387
+ - lib/moov/models/components/schemebasicauth.rbi
1388
+ - lib/moov/models/components/schemeoauth2auth.rb
1389
+ - lib/moov/models/components/schemeoauth2auth.rbi
1376
1390
  - lib/moov/models/components/seccode.rb
1377
1391
  - lib/moov/models/components/seccode.rbi
1378
1392
  - lib/moov/models/components/security.rb
@@ -1495,6 +1509,8 @@ files:
1495
1509
  - lib/moov/models/components/transferentrymode.rbi
1496
1510
  - lib/moov/models/components/transferfailurereason.rb
1497
1511
  - lib/moov/models/components/transferfailurereason.rbi
1512
+ - lib/moov/models/components/transferfeepaidby.rb
1513
+ - lib/moov/models/components/transferfeepaidby.rbi
1498
1514
  - lib/moov/models/components/transferlineitem.rb
1499
1515
  - lib/moov/models/components/transferlineitem.rbi
1500
1516
  - lib/moov/models/components/transferlineitemimagemetadata.rb
@@ -1949,6 +1965,12 @@ files:
1949
1965
  - lib/moov/models/operations/createwallet_response.rbi
1950
1966
  - lib/moov/models/operations/createwebhook_response.rb
1951
1967
  - lib/moov/models/operations/createwebhook_response.rbi
1968
+ - lib/moov/models/operations/deleteavatar_request.rb
1969
+ - lib/moov/models/operations/deleteavatar_request.rbi
1970
+ - lib/moov/models/operations/deleteavatar_response.rb
1971
+ - lib/moov/models/operations/deleteavatar_response.rbi
1972
+ - lib/moov/models/operations/deleteavatar_security.rb
1973
+ - lib/moov/models/operations/deleteavatar_security.rbi
1952
1974
  - lib/moov/models/operations/deletedisputeevidencefile_request.rb
1953
1975
  - lib/moov/models/operations/deletedisputeevidencefile_request.rbi
1954
1976
  - lib/moov/models/operations/deletedisputeevidencefile_response.rb
@@ -2357,6 +2379,8 @@ files:
2357
2379
  - lib/moov/models/operations/listpaymentmethods_request.rbi
2358
2380
  - lib/moov/models/operations/listpaymentmethods_response.rb
2359
2381
  - lib/moov/models/operations/listpaymentmethods_response.rbi
2382
+ - lib/moov/models/operations/listproductcategories_response.rb
2383
+ - lib/moov/models/operations/listproductcategories_response.rbi
2360
2384
  - lib/moov/models/operations/listproducts_request.rb
2361
2385
  - lib/moov/models/operations/listproducts_request.rbi
2362
2386
  - lib/moov/models/operations/listproducts_response.rb
@@ -2541,6 +2565,12 @@ files:
2541
2565
  - lib/moov/models/operations/updatewebhook_request.rbi
2542
2566
  - lib/moov/models/operations/updatewebhook_response.rb
2543
2567
  - lib/moov/models/operations/updatewebhook_response.rbi
2568
+ - lib/moov/models/operations/uploadavatar_request.rb
2569
+ - lib/moov/models/operations/uploadavatar_request.rbi
2570
+ - lib/moov/models/operations/uploadavatar_response.rb
2571
+ - lib/moov/models/operations/uploadavatar_response.rbi
2572
+ - lib/moov/models/operations/uploadavatar_security.rb
2573
+ - lib/moov/models/operations/uploadavatar_security.rbi
2544
2574
  - lib/moov/models/operations/uploaddisputeevidencefile_request.rb
2545
2575
  - lib/moov/models/operations/uploaddisputeevidencefile_request.rbi
2546
2576
  - lib/moov/models/operations/uploaddisputeevidencefile_response.rb
@@ -2574,8 +2604,10 @@ files:
2574
2604
  - lib/moov/representatives.rb
2575
2605
  - lib/moov/resolution_links.rb
2576
2606
  - lib/moov/scheduling.rb
2607
+ - lib/moov/sdk_hooks/clientcredentials.rb
2577
2608
  - lib/moov/sdk_hooks/hooks.rb
2578
2609
  - lib/moov/sdk_hooks/moov_version.rb
2610
+ - lib/moov/sdk_hooks/oauth2scopes.rb
2579
2611
  - lib/moov/sdk_hooks/registration.rb
2580
2612
  - lib/moov/sdk_hooks/types.rb
2581
2613
  - lib/moov/sdkconfiguration.rb