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.
- checksums.yaml +4 -4
- data/lib/moov/avatars.rb +275 -0
- data/lib/moov/models/components/avataruploadrequest.rb +32 -0
- data/lib/moov/models/components/avataruploadrequest.rbi +13 -0
- data/lib/moov/models/components/avataruploadrequest_file.rb +36 -0
- data/lib/moov/models/components/avataruploadrequest_file.rbi +15 -0
- data/lib/moov/models/components/capabilityid.rb +1 -0
- data/lib/moov/models/components/createtransfer.rb +6 -2
- data/lib/moov/models/components/createtransfer.rbi +2 -0
- data/lib/moov/models/components/feepaidby.rb +19 -0
- data/lib/moov/models/components/feepaidby.rbi +11 -0
- data/lib/moov/models/components/incurredfee.rb +6 -2
- data/lib/moov/models/components/incurredfee.rbi +2 -0
- data/lib/moov/models/components/issuingintervallimit.rb +1 -1
- data/lib/moov/models/components/issuingvelocitylimit.rb +1 -1
- data/lib/moov/models/components/paymentlinkpayoutdetails.rb +8 -2
- data/lib/moov/models/components/paymentlinkpayoutdetails.rbi +2 -0
- data/lib/moov/models/components/paymentlinkpayoutdetailsupdate.rb +8 -2
- data/lib/moov/models/components/paymentlinkpayoutdetailsupdate.rbi +2 -0
- data/lib/moov/models/components/payoutdetailserror.rb +6 -2
- data/lib/moov/models/components/payoutdetailserror.rbi +2 -0
- data/lib/moov/models/components/product.rb +6 -2
- data/lib/moov/models/components/product.rbi +2 -0
- data/lib/moov/models/components/productcategories.rb +32 -0
- data/lib/moov/models/components/productcategories.rbi +13 -0
- data/lib/moov/models/components/productcategory.rb +48 -0
- data/lib/moov/models/components/productcategory.rbi +21 -0
- data/lib/moov/models/components/productrequest.rb +6 -2
- data/lib/moov/models/components/productrequest.rbi +2 -0
- data/lib/moov/models/components/schemebasicauth.rb +36 -0
- data/lib/moov/models/components/schemebasicauth.rbi +15 -0
- data/lib/moov/models/components/schemeoauth2auth.rb +40 -0
- data/lib/moov/models/components/schemeoauth2auth.rbi +17 -0
- data/lib/moov/models/components/transferfeepaidby.rb +32 -0
- data/lib/moov/models/components/transferfeepaidby.rbi +13 -0
- data/lib/moov/models/components.rb +8 -0
- data/lib/moov/models/errors/productrequestvalidationerror.rb +6 -2
- data/lib/moov/models/errors/productrequestvalidationerror.rbi +2 -0
- data/lib/moov/models/operations/deleteavatar_request.rb +32 -0
- data/lib/moov/models/operations/deleteavatar_request.rbi +13 -0
- data/lib/moov/models/operations/deleteavatar_response.rb +44 -0
- data/lib/moov/models/operations/deleteavatar_response.rbi +19 -0
- data/lib/moov/models/operations/deleteavatar_security.rb +36 -0
- data/lib/moov/models/operations/deleteavatar_security.rbi +15 -0
- data/lib/moov/models/operations/listproductcategories_response.rb +48 -0
- data/lib/moov/models/operations/listproductcategories_response.rbi +21 -0
- data/lib/moov/models/operations/listproducts_request.rb +8 -2
- data/lib/moov/models/operations/listproducts_request.rbi +2 -0
- data/lib/moov/models/operations/uploadavatar_request.rb +36 -0
- data/lib/moov/models/operations/uploadavatar_request.rbi +15 -0
- data/lib/moov/models/operations/uploadavatar_response.rb +44 -0
- data/lib/moov/models/operations/uploadavatar_response.rbi +19 -0
- data/lib/moov/models/operations/uploadavatar_security.rb +36 -0
- data/lib/moov/models/operations/uploadavatar_security.rbi +15 -0
- data/lib/moov/models/operations.rb +7 -0
- data/lib/moov/products.rb +113 -8
- data/lib/moov/sdk_hooks/clientcredentials.rb +386 -0
- data/lib/moov/sdk_hooks/hooks.rb +6 -0
- data/lib/moov/sdk_hooks/oauth2scopes.rb +18 -0
- data/lib/moov/sdkconfiguration.rb +3 -3
- 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
|
data/lib/moov/sdk_hooks/hooks.rb
CHANGED
|
@@ -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.
|
|
92
|
-
@gen_version = '2.
|
|
93
|
-
@user_agent = 'speakeasy-sdk/ruby 26.10.0-dev.
|
|
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.
|
|
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-
|
|
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
|