workato-connector-sdk 1.1.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -2
- data/VERSION +1 -0
- data/lib/workato/cli/edit_command.rb +3 -1
- data/lib/workato/cli/exec_command.rb +103 -17
- data/lib/workato/cli/generate_command.rb +2 -2
- data/lib/workato/cli/main.rb +17 -10
- data/lib/workato/cli/multi_auth_selected_fallback.rb +33 -0
- data/lib/workato/cli/oauth2_command.rb +50 -12
- data/lib/workato/cli/push_command.rb +2 -2
- data/lib/workato/cli/schema_command.rb +2 -2
- data/lib/workato/connector/sdk/account_properties.rb +2 -2
- data/lib/workato/connector/sdk/action.rb +20 -70
- data/lib/workato/connector/sdk/block_invocation_refinements.rb +2 -10
- data/lib/workato/connector/sdk/connection.rb +115 -30
- data/lib/workato/connector/sdk/connector.rb +71 -81
- data/lib/workato/connector/sdk/core.rb +62 -0
- data/lib/workato/connector/sdk/dsl/aws.rb +8 -5
- data/lib/workato/connector/sdk/dsl/call.rb +1 -1
- data/lib/workato/connector/sdk/dsl/csv_package.rb +133 -0
- data/lib/workato/connector/sdk/dsl/execution_context.rb +45 -0
- data/lib/workato/connector/sdk/dsl/http.rb +1 -1
- data/lib/workato/connector/sdk/dsl/reinvoke_after.rb +84 -0
- data/lib/workato/connector/sdk/dsl/stream_package.rb +65 -0
- data/lib/workato/connector/sdk/dsl/time.rb +0 -14
- data/lib/workato/connector/sdk/dsl/workato_package.rb +146 -0
- data/lib/workato/connector/sdk/dsl.rb +64 -10
- data/lib/workato/connector/sdk/errors.rb +37 -9
- data/lib/workato/connector/sdk/lookup_tables.rb +3 -1
- data/lib/workato/connector/sdk/operation.rb +33 -10
- data/lib/workato/connector/sdk/request.rb +149 -69
- data/lib/workato/connector/sdk/schema/field/convertors.rb +2 -2
- data/lib/workato/connector/sdk/schema/type/unicode_string.rb +1 -1
- data/lib/workato/connector/sdk/schema.rb +12 -8
- data/lib/workato/connector/sdk/settings.rb +14 -3
- data/lib/workato/connector/sdk/stream.rb +243 -0
- data/lib/workato/connector/sdk/streams.rb +71 -0
- data/lib/workato/connector/sdk/summarize.rb +2 -2
- data/lib/workato/connector/sdk/trigger.rb +23 -15
- data/lib/workato/connector/sdk/version.rb +1 -1
- data/lib/workato/connector/sdk.rb +21 -47
- data/lib/workato/extension/array.rb +2 -0
- data/lib/workato/extension/case_sensitive_headers.rb +0 -26
- data/lib/workato/extension/content_encoding_decoder.rb +69 -0
- data/lib/workato/extension/currency/countries.rb +79 -0
- data/lib/workato/extension/currency/countries.yml +18433 -0
- data/lib/workato/extension/currency/currencies.rb +55 -0
- data/lib/workato/extension/currency/currencies.yml +479 -0
- data/lib/workato/extension/currency.rb +73 -5
- data/lib/workato/extension/enumerable.rb +2 -2
- data/lib/workato/extension/extra_chain_cert.rb +0 -14
- data/lib/workato/extension/hash_with_indifferent_access.rb +19 -0
- data/lib/workato/extension/metadata_fix_wrap_kw_args.rb +11 -0
- data/lib/workato/extension/string.rb +16 -112
- data/lib/workato/testing/vcr_encrypted_cassette_serializer.rb +2 -0
- data/lib/workato/types/binary.rb +55 -0
- data/lib/workato/{connector/sdk → utilities}/xml.rb +4 -4
- metadata +61 -64
- data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +0 -160
@@ -11,29 +11,34 @@ module Workato
|
|
11
11
|
extend T::Sig
|
12
12
|
using BlockInvocationRefinements
|
13
13
|
|
14
|
+
include Dsl::ReinvokeAfter
|
15
|
+
|
14
16
|
RETRY_DEFAULT_CODES = T.let([429, 500, 502, 503, 504, 507].freeze, T::Array[Integer])
|
15
17
|
RETRY_DEFAULT_METHODS = T.let(%i[get head].freeze, T::Array[Symbol])
|
16
18
|
RETRY_DELAY = T.let(5, Integer) # seconds
|
19
|
+
RETRY_DELAY_EXP_BASE = T.let(2, Integer)
|
17
20
|
MAX_RETRIES = 3
|
18
21
|
|
19
|
-
MAX_REINVOKES = 5
|
20
|
-
|
21
22
|
sig do
|
22
23
|
params(
|
23
24
|
action: SorbetTypes::SourceHash,
|
24
25
|
methods: SorbetTypes::SourceHash,
|
25
26
|
connection: Connection,
|
26
|
-
object_definitions: T.nilable(ObjectDefinitions)
|
27
|
+
object_definitions: T.nilable(ObjectDefinitions),
|
28
|
+
streams: Streams
|
27
29
|
).void
|
28
30
|
end
|
29
|
-
def initialize(action:, methods: {}, connection: Connection.new, object_definitions: nil
|
31
|
+
def initialize(action:, methods: {}, connection: Connection.new, object_definitions: nil,
|
32
|
+
streams: ProhibitedStreams.new)
|
30
33
|
super(
|
31
34
|
operation: action,
|
32
35
|
connection: connection,
|
33
36
|
methods: methods,
|
34
|
-
object_definitions: object_definitions
|
37
|
+
object_definitions: object_definitions,
|
38
|
+
streams: streams
|
35
39
|
)
|
36
40
|
|
41
|
+
@retry_delay_factor = T.let(1, Integer)
|
37
42
|
@retries_left = T.let(0, Integer)
|
38
43
|
@retry_codes = T.let([], T::Array[Integer])
|
39
44
|
@retry_methods = T.let([], T::Array[String])
|
@@ -58,33 +63,21 @@ module Workato
|
|
58
63
|
&block)
|
59
64
|
raise InvalidDefinitionError, "'execute' block is required for action" unless block || action[:execute]
|
60
65
|
|
61
|
-
|
62
|
-
|
63
|
-
raise "Max number of reinvokes on SDK Gem reached. Current limit is #{reinvoke_limit}"
|
64
|
-
end
|
65
|
-
|
66
|
-
reinvoke_sleep if @reinvoke_after
|
67
|
-
|
68
|
-
reinvoke_reset
|
69
|
-
|
70
|
-
result = super(
|
66
|
+
loop_reinvoke_after(continue) do |next_continue|
|
67
|
+
return super(
|
71
68
|
settings,
|
72
69
|
input,
|
73
70
|
extended_input_schema,
|
74
71
|
extended_output_schema,
|
75
|
-
|
72
|
+
next_continue,
|
76
73
|
&(block || action[:execute])
|
77
74
|
)
|
78
|
-
|
79
|
-
break result unless @reinvoke_after
|
80
|
-
|
81
|
-
continue = @reinvoke_after.continue
|
82
75
|
end
|
83
|
-
rescue
|
76
|
+
rescue RequestFailedError => e
|
84
77
|
raise e unless retry?(e)
|
85
78
|
|
86
79
|
@retries_left -= 1
|
87
|
-
|
80
|
+
retry_sleep
|
88
81
|
retry
|
89
82
|
end
|
90
83
|
|
@@ -100,32 +93,6 @@ module Workato
|
|
100
93
|
apply_output_schema(output, output_schema)
|
101
94
|
end
|
102
95
|
|
103
|
-
sig do
|
104
|
-
params(
|
105
|
-
continue: T::Hash[T.untyped, T.untyped],
|
106
|
-
temp_output: T.nilable(T::Hash[T.untyped, T.untyped])
|
107
|
-
).void
|
108
|
-
end
|
109
|
-
def checkpoint!(continue:, temp_output: nil)
|
110
|
-
# no-op
|
111
|
-
end
|
112
|
-
|
113
|
-
sig do
|
114
|
-
params(
|
115
|
-
seconds: Integer,
|
116
|
-
continue: T::Hash[T.untyped, T.untyped],
|
117
|
-
temp_output: T.nilable(T::Hash[T.untyped, T.untyped])
|
118
|
-
).void
|
119
|
-
end
|
120
|
-
def reinvoke_after(seconds:, continue:, temp_output: nil) # rubocop:disable Lint/UnusedMethodArgument
|
121
|
-
@reinvokes_remaining = T.let(@reinvokes_remaining, T.nilable(Integer))
|
122
|
-
@reinvokes_remaining = (@reinvokes_remaining ? @reinvokes_remaining - 1 : reinvoke_limit)
|
123
|
-
@reinvoke_after = ReinvokeAfter.new(
|
124
|
-
seconds: seconds,
|
125
|
-
continue: continue
|
126
|
-
)
|
127
|
-
end
|
128
|
-
|
129
96
|
private
|
130
97
|
|
131
98
|
sig { returns(T::Array[T.any(Symbol, String, Regexp, Integer)]) }
|
@@ -150,10 +117,10 @@ module Workato
|
|
150
117
|
retry_on_response.each { |m| m.is_a?(::Integer) ? @retry_codes << m : @retry_matchers << m }
|
151
118
|
@retry_codes = RETRY_DEFAULT_CODES if @retry_codes.empty?
|
152
119
|
@retry_methods = (retry_on_request.presence || RETRY_DEFAULT_METHODS).map(&:to_s).map(&:downcase)
|
153
|
-
@retries_left = [[max_retries.is_a?(::Integer) && max_retries || MAX_RETRIES, MAX_RETRIES].min, 0].max
|
120
|
+
@retries_left = [[(max_retries.is_a?(::Integer) && max_retries) || MAX_RETRIES, MAX_RETRIES].min, 0].max
|
154
121
|
end
|
155
122
|
|
156
|
-
sig { params(exception:
|
123
|
+
sig { params(exception: RequestFailedError).returns(T::Boolean) }
|
157
124
|
def retry?(exception)
|
158
125
|
return false unless @retries_left.positive?
|
159
126
|
return false unless @retry_codes.include?(exception.code.to_i)
|
@@ -165,28 +132,11 @@ module Workato
|
|
165
132
|
end
|
166
133
|
|
167
134
|
sig { void }
|
168
|
-
def
|
169
|
-
sleep(
|
170
|
-
|
171
|
-
|
172
|
-
sig { returns(Integer) }
|
173
|
-
def reinvoke_limit
|
174
|
-
@reinvoke_limit = T.let(@reinvoke_limit, T.nilable(Integer))
|
175
|
-
@reinvoke_limit ||= (ENV['MAX_REINVOKES'].presence || MAX_REINVOKES).to_i
|
176
|
-
end
|
177
|
-
|
178
|
-
sig { void }
|
179
|
-
def reinvoke_reset
|
180
|
-
@reinvoke_after = T.let(nil, T.nilable(ReinvokeAfter))
|
135
|
+
def retry_sleep
|
136
|
+
sleep(@retry_delay_factor * RETRY_DELAY)
|
137
|
+
@retry_delay_factor *= RETRY_DELAY_EXP_BASE
|
181
138
|
end
|
182
139
|
|
183
|
-
class ReinvokeAfter < T::Struct
|
184
|
-
prop :seconds, T.any(Float, Integer)
|
185
|
-
prop :continue, T::Hash[T.untyped, T.untyped]
|
186
|
-
end
|
187
|
-
|
188
|
-
private_constant :ReinvokeAfter
|
189
|
-
|
190
140
|
alias action operation
|
191
141
|
end
|
192
142
|
end
|
@@ -6,25 +6,17 @@ module Workato
|
|
6
6
|
module Sdk
|
7
7
|
# match proc's arguments, even if it's a lambda.
|
8
8
|
module BlockInvocationRefinements
|
9
|
-
|
9
|
+
refine Proc do
|
10
10
|
def call(*args, &block)
|
11
11
|
super(*args.take(parameters.length), &block)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
refine
|
16
|
-
prepend CallRefinement
|
17
|
-
end
|
18
|
-
|
19
|
-
module InstanceExecRefinement
|
15
|
+
refine BasicObject do
|
20
16
|
def instance_exec(*args, &block)
|
21
17
|
super(*args.take(block.parameters.length), &block)
|
22
18
|
end
|
23
19
|
end
|
24
|
-
|
25
|
-
refine BasicObject do
|
26
|
-
prepend InstanceExecRefinement
|
27
|
-
end
|
28
20
|
end
|
29
21
|
end
|
30
22
|
end
|
@@ -3,18 +3,44 @@
|
|
3
3
|
|
4
4
|
require_relative './block_invocation_refinements'
|
5
5
|
|
6
|
+
using Workato::Extension::HashWithIndifferentAccess
|
7
|
+
|
6
8
|
module Workato
|
7
9
|
module Connector
|
8
10
|
module Sdk
|
11
|
+
module SorbetTypes
|
12
|
+
AcquireOutput = T.type_alias do
|
13
|
+
T.any(
|
14
|
+
# oauth2
|
15
|
+
[
|
16
|
+
HashWithIndifferentAccess, # tokens
|
17
|
+
T.untyped, # resource_owner_id
|
18
|
+
T.nilable(HashWithIndifferentAccess) # settings
|
19
|
+
],
|
20
|
+
[
|
21
|
+
HashWithIndifferentAccess, # tokens
|
22
|
+
T.untyped # resource_owner_id
|
23
|
+
],
|
24
|
+
[
|
25
|
+
HashWithIndifferentAccess # tokens
|
26
|
+
],
|
27
|
+
# custom_auth
|
28
|
+
HashWithIndifferentAccess
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
9
33
|
class Connection
|
10
34
|
extend T::Sig
|
35
|
+
include MonitorMixin
|
11
36
|
|
12
37
|
using BlockInvocationRefinements
|
13
38
|
|
14
39
|
sig { returns(HashWithIndifferentAccess) }
|
15
40
|
attr_reader :source
|
16
41
|
|
17
|
-
|
42
|
+
class_attribute :on_settings_update, instance_predicate: false
|
43
|
+
class_attribute :multi_auth_selected_fallback, instance_predicate: false
|
18
44
|
|
19
45
|
sig do
|
20
46
|
params(
|
@@ -24,8 +50,9 @@ module Workato
|
|
24
50
|
).void
|
25
51
|
end
|
26
52
|
def initialize(connection: {}, methods: {}, settings: {})
|
27
|
-
|
28
|
-
@
|
53
|
+
super()
|
54
|
+
@methods_source = T.let(HashWithIndifferentAccess.wrap(methods), HashWithIndifferentAccess)
|
55
|
+
@source = T.let(HashWithIndifferentAccess.wrap(connection), HashWithIndifferentAccess)
|
29
56
|
@settings = T.let(settings, SorbetTypes::SettingsHash)
|
30
57
|
end
|
31
58
|
|
@@ -37,7 +64,10 @@ module Workato
|
|
37
64
|
sig { returns(HashWithIndifferentAccess) }
|
38
65
|
def settings
|
39
66
|
# we can't freeze or memoise because some developers modify it for storing something temporary in it.
|
40
|
-
|
67
|
+
# always return a new copy
|
68
|
+
synchronize do
|
69
|
+
@settings.with_indifferent_access
|
70
|
+
end
|
41
71
|
end
|
42
72
|
|
43
73
|
sig { params(settings: SorbetTypes::SettingsHash).returns(SorbetTypes::SettingsHash) }
|
@@ -64,16 +94,20 @@ module Workato
|
|
64
94
|
|
65
95
|
sig { params(settings: T.nilable(SorbetTypes::SettingsHash)).returns(T.nilable(String)) }
|
66
96
|
def base_uri(settings = nil)
|
67
|
-
source[:base_uri]
|
97
|
+
return unless source[:base_uri]
|
98
|
+
|
99
|
+
merge_settings!(settings) if settings
|
100
|
+
global_dsl_context.execute(self.settings, &source['base_uri'])
|
68
101
|
end
|
69
102
|
|
70
103
|
sig do
|
71
104
|
params(
|
72
105
|
message: String,
|
106
|
+
settings_before: SorbetTypes::SettingsHash,
|
73
107
|
refresher: T.proc.returns(T.nilable(SorbetTypes::SettingsHash))
|
74
108
|
).returns(T::Boolean)
|
75
109
|
end
|
76
|
-
def update_settings!(message, &refresher)
|
110
|
+
def update_settings!(message, settings_before, &refresher)
|
77
111
|
updater = lambda do
|
78
112
|
new_settings = refresher.call
|
79
113
|
next unless new_settings
|
@@ -81,16 +115,18 @@ module Workato
|
|
81
115
|
settings.merge(new_settings)
|
82
116
|
end
|
83
117
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
118
|
+
synchronize do
|
119
|
+
new_settings = if on_settings_update
|
120
|
+
T.must(on_settings_update).call(message, settings_before, updater)
|
121
|
+
else
|
122
|
+
updater.call
|
123
|
+
end
|
124
|
+
return false unless new_settings
|
90
125
|
|
91
|
-
|
126
|
+
merge_settings!(new_settings)
|
92
127
|
|
93
|
-
|
128
|
+
true
|
129
|
+
end
|
94
130
|
end
|
95
131
|
|
96
132
|
private
|
@@ -98,12 +134,14 @@ module Workato
|
|
98
134
|
sig { returns(HashWithIndifferentAccess) }
|
99
135
|
attr_reader :methods_source
|
100
136
|
|
137
|
+
sig { returns(Dsl::WithDsl) }
|
138
|
+
def global_dsl_context
|
139
|
+
Dsl::WithDsl.new(self)
|
140
|
+
end
|
141
|
+
|
101
142
|
class Authorization
|
102
143
|
extend T::Sig
|
103
144
|
|
104
|
-
sig { returns(HashWithIndifferentAccess) }
|
105
|
-
attr_reader :source
|
106
|
-
|
107
145
|
sig do
|
108
146
|
params(
|
109
147
|
connection: Connection,
|
@@ -123,6 +161,16 @@ module Workato
|
|
123
161
|
(source[:type].presence || 'none').to_s
|
124
162
|
end
|
125
163
|
|
164
|
+
sig { returns(T::Boolean) }
|
165
|
+
def oauth2?
|
166
|
+
!!(/oauth2/i =~ type)
|
167
|
+
end
|
168
|
+
|
169
|
+
sig { returns(T::Boolean) }
|
170
|
+
def multi?
|
171
|
+
@source[:type].to_s == 'multi'
|
172
|
+
end
|
173
|
+
|
126
174
|
sig { returns(T::Array[T.any(String, Symbol, Regexp, Integer)]) }
|
127
175
|
def refresh_on
|
128
176
|
Array.wrap(source[:refresh_on]).compact
|
@@ -135,11 +183,11 @@ module Workato
|
|
135
183
|
|
136
184
|
sig { params(settings: T.nilable(SorbetTypes::SettingsHash)).returns(T.nilable(String)) }
|
137
185
|
def client_id(settings = nil)
|
186
|
+
@connection.merge_settings!(settings) if settings
|
138
187
|
client_id = source[:client_id]
|
139
188
|
|
140
189
|
if client_id.is_a?(Proc)
|
141
|
-
@connection.
|
142
|
-
Dsl::WithDsl.execute(@connection, @connection.settings, &client_id)
|
190
|
+
global_dsl_context.execute(@connection.settings, &client_id)
|
143
191
|
else
|
144
192
|
client_id
|
145
193
|
end
|
@@ -147,11 +195,11 @@ module Workato
|
|
147
195
|
|
148
196
|
sig { params(settings: T.nilable(SorbetTypes::SettingsHash)).returns(T.nilable(String)) }
|
149
197
|
def client_secret(settings = nil)
|
198
|
+
@connection.merge_settings!(settings) if settings
|
150
199
|
client_secret_source = source[:client_secret]
|
151
200
|
|
152
201
|
if client_secret_source.is_a?(Proc)
|
153
|
-
@connection.
|
154
|
-
Dsl::WithDsl.execute(@connection, @connection.settings, &client_secret_source)
|
202
|
+
global_dsl_context.execute(@connection.settings, &client_secret_source)
|
155
203
|
else
|
156
204
|
client_secret_source
|
157
205
|
end
|
@@ -159,12 +207,18 @@ module Workato
|
|
159
207
|
|
160
208
|
sig { params(settings: T.nilable(SorbetTypes::SettingsHash)).returns(T.nilable(String)) }
|
161
209
|
def authorization_url(settings = nil)
|
162
|
-
|
210
|
+
@connection.merge_settings!(settings) if settings
|
211
|
+
return unless source[:authorization_url]
|
212
|
+
|
213
|
+
global_dsl_context.execute(@connection.settings, &source[:authorization_url])
|
163
214
|
end
|
164
215
|
|
165
216
|
sig { params(settings: T.nilable(SorbetTypes::SettingsHash)).returns(T.nilable(String)) }
|
166
217
|
def token_url(settings = nil)
|
167
|
-
|
218
|
+
@connection.merge_settings!(settings) if settings
|
219
|
+
return unless source[:token_url]
|
220
|
+
|
221
|
+
global_dsl_context.execute(@connection.settings, &source[:token_url])
|
168
222
|
end
|
169
223
|
|
170
224
|
sig do
|
@@ -172,9 +226,10 @@ module Workato
|
|
172
226
|
settings: T.nilable(SorbetTypes::SettingsHash),
|
173
227
|
oauth2_code: T.nilable(String),
|
174
228
|
redirect_url: T.nilable(String)
|
175
|
-
).returns(
|
229
|
+
).returns(T.nilable(SorbetTypes::AcquireOutput))
|
176
230
|
end
|
177
231
|
def acquire(settings = nil, oauth2_code = nil, redirect_url = nil)
|
232
|
+
@connection.merge_settings!(settings) if settings
|
178
233
|
acquire_proc = source[:acquire]
|
179
234
|
raise InvalidDefinitionError, "Expect 'acquire' block" unless acquire_proc
|
180
235
|
|
@@ -202,11 +257,11 @@ module Workato
|
|
202
257
|
).returns(T::Boolean)
|
203
258
|
end
|
204
259
|
def refresh?(http_code, http_body, exception)
|
205
|
-
return false unless
|
260
|
+
return false unless oauth2? || source[:acquire].present?
|
206
261
|
|
207
262
|
refresh_on = self.refresh_on
|
208
263
|
refresh_on.blank? || refresh_on.any? do |pattern|
|
209
|
-
pattern.is_a?(::Integer) && pattern == http_code ||
|
264
|
+
(pattern.is_a?(::Integer) && pattern == http_code) ||
|
210
265
|
pattern === exception&.to_s ||
|
211
266
|
pattern === http_body
|
212
267
|
end
|
@@ -214,10 +269,10 @@ module Workato
|
|
214
269
|
|
215
270
|
sig { params(settings: HashWithIndifferentAccess).returns(T.nilable(HashWithIndifferentAccess)) }
|
216
271
|
def refresh!(settings)
|
217
|
-
if
|
272
|
+
if oauth2?
|
218
273
|
refresh_oauth2_token(settings)
|
219
274
|
elsif source[:acquire].present?
|
220
|
-
acquire(settings)
|
275
|
+
T.cast(acquire(settings), T.nilable(HashWithIndifferentAccess))
|
221
276
|
end
|
222
277
|
end
|
223
278
|
|
@@ -230,6 +285,7 @@ module Workato
|
|
230
285
|
)
|
231
286
|
end
|
232
287
|
def refresh(settings = nil, refresh_token = nil)
|
288
|
+
@connection.merge_settings!(settings) if settings
|
233
289
|
refresh_proc = source[:refresh]
|
234
290
|
raise InvalidDefinitionError, "Expect 'refresh' block" unless refresh_proc
|
235
291
|
|
@@ -244,6 +300,27 @@ module Workato
|
|
244
300
|
end
|
245
301
|
end
|
246
302
|
|
303
|
+
sig { returns(HashWithIndifferentAccess) }
|
304
|
+
def source
|
305
|
+
return @source unless multi?
|
306
|
+
|
307
|
+
unless @source[:selected]
|
308
|
+
raise InvalidMultiAuthDefinition, "Multi-auth connection must define 'selected' block"
|
309
|
+
end
|
310
|
+
|
311
|
+
if @source[:options].blank?
|
312
|
+
raise InvalidMultiAuthDefinition, "Multi-auth connection must define 'options' list"
|
313
|
+
end
|
314
|
+
|
315
|
+
selected_auth_key = @source[:selected].call(@connection.settings)
|
316
|
+
selected_auth_key ||= @connection.multi_auth_selected_fallback&.call(@source[:options])
|
317
|
+
selected_auth_value = @source.dig(:options, selected_auth_key)
|
318
|
+
|
319
|
+
raise UnresolvedMultiAuthOptionError, selected_auth_key unless selected_auth_value
|
320
|
+
|
321
|
+
selected_auth_value
|
322
|
+
end
|
323
|
+
|
247
324
|
private
|
248
325
|
|
249
326
|
sig { returns(HashWithIndifferentAccess) }
|
@@ -266,14 +343,17 @@ module Workato
|
|
266
343
|
sig { params(settings: HashWithIndifferentAccess).returns(HashWithIndifferentAccess) }
|
267
344
|
def refresh_oauth2_token_using_refresh(settings)
|
268
345
|
new_tokens, new_settings = refresh(settings, settings[:refresh_token])
|
269
|
-
new_tokens.
|
346
|
+
new_tokens = HashWithIndifferentAccess.wrap(new_tokens)
|
347
|
+
return new_tokens unless new_settings
|
348
|
+
|
349
|
+
new_tokens.merge(new_settings)
|
270
350
|
end
|
271
351
|
|
272
352
|
sig { params(settings: HashWithIndifferentAccess).returns(HashWithIndifferentAccess) }
|
273
353
|
def refresh_oauth2_token_using_token_url(settings)
|
274
354
|
if settings[:refresh_token].blank?
|
275
355
|
raise NotImplementedError, 'refresh_token is empty. ' \
|
276
|
-
|
356
|
+
'Use workato oauth2 command to acquire access_token and refresh_token'
|
277
357
|
end
|
278
358
|
|
279
359
|
response = RestClient::Request.execute(
|
@@ -295,6 +375,11 @@ module Workato
|
|
295
375
|
refresh_token: tokens['refresh_token'].presence || settings[:refresh_token]
|
296
376
|
}.with_indifferent_access
|
297
377
|
end
|
378
|
+
|
379
|
+
sig { returns(Dsl::WithDsl) }
|
380
|
+
def global_dsl_context
|
381
|
+
Dsl::WithDsl.new(@connection)
|
382
|
+
end
|
298
383
|
end
|
299
384
|
|
300
385
|
private_constant :Authorization
|