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.
- 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 +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
|
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.07.00'
|
|
91
|
-
@sdk_version = '26.7.0
|
|
92
|
-
@gen_version = '2.
|
|
93
|
-
@user_agent = 'speakeasy-sdk/ruby 26.7.0
|
|
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
|
|
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-
|
|
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:
|
|
2646
|
+
version: '0'
|
|
2615
2647
|
requirements: []
|
|
2616
2648
|
rubygems_version: 3.4.19
|
|
2617
2649
|
signing_key:
|