workato-connector-sdk 1.0.1 → 1.1.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 +17 -11
- data/lib/workato/cli/edit_command.rb +4 -3
- data/lib/workato/cli/exec_command.rb +27 -35
- data/lib/workato/cli/generate_command.rb +1 -0
- data/lib/workato/cli/generators/connector_generator.rb +1 -0
- data/lib/workato/cli/generators/master_key_generator.rb +1 -0
- data/lib/workato/cli/main.rb +44 -11
- data/lib/workato/cli/oauth2_command.rb +6 -5
- data/lib/workato/cli/push_command.rb +8 -5
- data/lib/workato/cli/schema_command.rb +6 -7
- data/lib/workato/connector/sdk/account_properties.rb +1 -0
- data/lib/workato/connector/sdk/action.rb +78 -20
- data/lib/workato/connector/sdk/block_invocation_refinements.rb +1 -0
- data/lib/workato/connector/sdk/connection.rb +204 -44
- data/lib/workato/connector/sdk/connector.rb +200 -65
- data/lib/workato/connector/sdk/dsl/account_property.rb +1 -0
- data/lib/workato/connector/sdk/dsl/aws.rb +23 -27
- data/lib/workato/connector/sdk/dsl/call.rb +6 -2
- data/lib/workato/connector/sdk/dsl/error.rb +1 -0
- data/lib/workato/connector/sdk/dsl/http.rb +2 -7
- data/lib/workato/connector/sdk/dsl/lookup_table.rb +1 -0
- data/lib/workato/connector/sdk/dsl/time.rb +6 -0
- data/lib/workato/connector/sdk/dsl/workato_code_lib.rb +38 -0
- data/lib/workato/connector/sdk/dsl/workato_schema.rb +1 -0
- data/lib/workato/connector/sdk/dsl.rb +19 -4
- data/lib/workato/connector/sdk/errors.rb +62 -4
- data/lib/workato/connector/sdk/lookup_tables.rb +1 -0
- data/lib/workato/connector/sdk/object_definitions.rb +22 -17
- data/lib/workato/connector/sdk/operation.rb +127 -88
- data/lib/workato/connector/sdk/request.rb +95 -31
- data/lib/workato/connector/sdk/schema/field/array.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/convertors.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/date.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/date_time.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/integer.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/number.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/object.rb +1 -0
- data/lib/workato/connector/sdk/schema/field/string.rb +1 -0
- data/lib/workato/connector/sdk/schema/type/time.rb +1 -0
- data/lib/workato/connector/sdk/schema/type/unicode_string.rb +1 -0
- data/lib/workato/connector/sdk/schema.rb +1 -0
- data/lib/workato/connector/sdk/settings.rb +9 -4
- data/lib/workato/connector/sdk/summarize.rb +3 -2
- data/lib/workato/connector/sdk/trigger.rb +106 -10
- data/lib/workato/connector/sdk/version.rb +2 -1
- data/lib/workato/connector/sdk/workato_schemas.rb +1 -0
- data/lib/workato/connector/sdk/xml.rb +1 -0
- data/lib/workato/connector/sdk.rb +8 -0
- data/lib/workato/extension/array.rb +1 -0
- data/lib/workato/extension/case_sensitive_headers.rb +1 -0
- data/lib/workato/extension/currency.rb +2 -1
- data/lib/workato/extension/date.rb +1 -0
- data/lib/workato/extension/enumerable.rb +1 -0
- data/lib/workato/extension/extra_chain_cert.rb +1 -0
- data/lib/workato/extension/hash.rb +1 -0
- data/lib/workato/extension/integer.rb +1 -0
- data/lib/workato/extension/nil_class.rb +1 -0
- data/lib/workato/extension/object.rb +1 -0
- data/lib/workato/extension/phone.rb +2 -1
- data/lib/workato/extension/string.rb +6 -2
- data/lib/workato/extension/symbol.rb +1 -0
- data/lib/workato/extension/time.rb +1 -0
- data/lib/workato/testing/vcr_encrypted_cassette_serializer.rb +5 -0
- data/lib/workato/testing/vcr_multipart_body_matcher.rb +1 -0
- data/lib/workato/utilities/encoding.rb +57 -0
- data/lib/workato/web/app.rb +1 -0
- data/lib/workato-connector-sdk.rb +1 -0
- metadata +88 -17
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: true
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require_relative './block_invocation_refinements'
|
@@ -27,20 +28,34 @@ module Workato
|
|
27
28
|
def sleep(seconds)
|
28
29
|
::Kernel.sleep(seconds.presence || 0)
|
29
30
|
end
|
31
|
+
|
32
|
+
def puts(*args)
|
33
|
+
T.unsafe(::Kernel).puts(*args)
|
34
|
+
end
|
30
35
|
end
|
31
36
|
|
32
37
|
class WithDsl
|
38
|
+
extend T::Sig
|
39
|
+
|
33
40
|
include Global
|
34
41
|
|
35
42
|
using BlockInvocationRefinements
|
36
43
|
|
37
|
-
|
38
|
-
|
44
|
+
sig { params(connection: Connection, args: T.untyped, block: T.untyped).returns(T.untyped) }
|
45
|
+
def execute(connection, *args, &block)
|
46
|
+
@connection = connection
|
47
|
+
T.unsafe(self).instance_exec(*args, &block)
|
39
48
|
end
|
40
49
|
|
41
|
-
|
42
|
-
|
50
|
+
sig { params(connection: Connection, args: T.untyped, block: T.untyped).returns(T.untyped) }
|
51
|
+
def self.execute(connection, *args, &block)
|
52
|
+
T.unsafe(WithDsl.new).execute(connection, *args, &block)
|
43
53
|
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
sig { returns(Connection) }
|
58
|
+
attr_reader :connection
|
44
59
|
end
|
45
60
|
end
|
46
61
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: true
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Workato
|
@@ -5,16 +6,55 @@ module Workato
|
|
5
6
|
module Sdk
|
6
7
|
InvalidDefinitionError = Class.new(StandardError)
|
7
8
|
|
8
|
-
|
9
|
+
class UnexpectedMethodDefinitionError < InvalidDefinitionError
|
10
|
+
attr_reader :name
|
11
|
+
attr_reader :definition
|
12
|
+
|
13
|
+
def initialize(name, definition)
|
14
|
+
super("Expected lambda for method '#{name}' definition, got: #{definition.class.name}")
|
15
|
+
@name = name
|
16
|
+
@definition = definition
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class UndefinedMethodError < InvalidDefinitionError
|
21
|
+
attr_reader :name
|
22
|
+
|
23
|
+
def initialize(name)
|
24
|
+
super("Method '#{name}' does not exists")
|
25
|
+
@name = name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
InvalidSchemaError = Class.new(InvalidDefinitionError)
|
9
30
|
|
10
31
|
CustomRequestError = Class.new(StandardError)
|
11
32
|
|
12
33
|
RuntimeError = Class.new(StandardError)
|
13
34
|
|
35
|
+
class UnresolvedObjectDefinitionError < StandardError
|
36
|
+
attr_reader :name
|
37
|
+
|
38
|
+
def initialize(name)
|
39
|
+
super("Cannot find object definition for '#{name}'")
|
40
|
+
@name = name
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class CircleReferenceObjectDefinitionError < StandardError
|
45
|
+
attr_reader :name
|
46
|
+
|
47
|
+
def initialize(name, backtrace = [])
|
48
|
+
super("Infinite recursion occurred in object definition for '#{name}'")
|
49
|
+
set_backtrace(backtrace)
|
50
|
+
@name = name
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
14
54
|
class RequestError < StandardError
|
15
|
-
attr_reader :method
|
16
|
-
|
17
|
-
|
55
|
+
attr_reader :method
|
56
|
+
attr_reader :code
|
57
|
+
attr_reader :response
|
18
58
|
|
19
59
|
def initialize(message:, method:, code:, response:)
|
20
60
|
super(message)
|
@@ -40,6 +80,24 @@ module Workato
|
|
40
80
|
super(message)
|
41
81
|
end
|
42
82
|
end
|
83
|
+
|
84
|
+
RequestTLSCertificateFormatError = Class.new(StandardError)
|
85
|
+
|
86
|
+
RequestPayloadFormatError = Class.new(StandardError)
|
87
|
+
|
88
|
+
JSONRequestFormatError = Class.new(RequestPayloadFormatError)
|
89
|
+
|
90
|
+
JSONResponseFormatError = Class.new(RequestPayloadFormatError)
|
91
|
+
|
92
|
+
XMLRequestFormatError = Class.new(RequestPayloadFormatError)
|
93
|
+
|
94
|
+
XMLResponseFormatError = Class.new(RequestPayloadFormatError)
|
95
|
+
|
96
|
+
WWWFormURLEncodedRequestFormatError = Class.new(RequestPayloadFormatError)
|
97
|
+
|
98
|
+
MultipartFormRequestFormatError = Class.new(RequestPayloadFormatError)
|
99
|
+
|
100
|
+
RAWResponseFormatError = Class.new(RequestPayloadFormatError)
|
43
101
|
end
|
44
102
|
end
|
45
103
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: true
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require_relative './block_invocation_refinements'
|
@@ -8,36 +9,40 @@ module Workato
|
|
8
9
|
class ObjectDefinitions
|
9
10
|
using BlockInvocationRefinements
|
10
11
|
|
11
|
-
def initialize(object_definitions:, connection:, methods
|
12
|
+
def initialize(object_definitions:, connection:, methods:)
|
12
13
|
@object_definitions_source = object_definitions
|
13
14
|
@methods_source = methods
|
14
15
|
@connection = connection
|
15
|
-
@settings = settings
|
16
16
|
define_object_definition_methods(object_definitions)
|
17
17
|
end
|
18
18
|
|
19
19
|
def lazy(settings = nil, config_fields = {})
|
20
20
|
DupHashWithIndifferentAccess.new do |object_definitions, name|
|
21
|
-
fields_proc = object_definitions_source
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
21
|
+
fields_proc = object_definitions_source.dig(name, :fields)
|
22
|
+
raise Workato::Connector::Sdk::UnresolvedObjectDefinitionError, name unless fields_proc
|
23
|
+
|
24
|
+
begin
|
25
|
+
object_definitions[name] = Action.new(
|
26
|
+
action: {
|
27
|
+
execute: lambda do |connection, input|
|
28
|
+
instance_exec(connection, input, object_definitions, &fields_proc)
|
29
|
+
end
|
30
|
+
},
|
31
|
+
methods: methods_source,
|
32
|
+
connection: connection
|
33
|
+
).execute(settings, config_fields)
|
34
|
+
rescue SystemStackError => e
|
35
|
+
raise Workato::Connector::Sdk::CircleReferenceObjectDefinitionError.new(name, e.backtrace)
|
36
|
+
end
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
35
40
|
private
|
36
41
|
|
37
|
-
attr_reader :methods_source
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
attr_reader :methods_source
|
43
|
+
attr_reader :connection
|
44
|
+
attr_reader :settings
|
45
|
+
attr_reader :object_definitions_source
|
41
46
|
|
42
47
|
def define_object_definition_methods(object_definitions)
|
43
48
|
object_definitions.each do |(object, _definition)|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: strict
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require_relative './dsl'
|
@@ -7,7 +8,39 @@ require_relative './schema'
|
|
7
8
|
module Workato
|
8
9
|
module Connector
|
9
10
|
module Sdk
|
11
|
+
module SorbetTypes
|
12
|
+
OperationInputHash = T.type_alias { T::Hash[T.any(Symbol, String), T.untyped] }
|
13
|
+
|
14
|
+
OperationExecuteProc = T.type_alias do
|
15
|
+
T.proc.params(
|
16
|
+
arg0: HashWithIndifferentAccess,
|
17
|
+
arg1: HashWithIndifferentAccess,
|
18
|
+
arg2: T.any(Schema, T::Array[HashWithIndifferentAccess]),
|
19
|
+
arg3: T.any(Schema, T::Array[HashWithIndifferentAccess]),
|
20
|
+
arg4: HashWithIndifferentAccess
|
21
|
+
).returns(
|
22
|
+
T.untyped
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
OperationSchema = T.type_alias do
|
27
|
+
T.any(Schema, T::Array[T::Hash[T.any(Symbol, String), T.untyped]])
|
28
|
+
end
|
29
|
+
|
30
|
+
OperationSchemaProc = T.type_alias do
|
31
|
+
T.proc.params(
|
32
|
+
arg0: HashWithIndifferentAccess,
|
33
|
+
arg1: HashWithIndifferentAccess,
|
34
|
+
arg2: HashWithIndifferentAccess
|
35
|
+
).returns(
|
36
|
+
T.nilable(T.any(SorbetTypes::OperationSchema, T::Hash[T.any(Symbol, String), T.untyped]))
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
10
41
|
class Operation
|
42
|
+
extend T::Sig
|
43
|
+
|
11
44
|
include Dsl::Global
|
12
45
|
include Dsl::HTTP
|
13
46
|
include Dsl::Call
|
@@ -15,21 +48,38 @@ module Workato
|
|
15
48
|
|
16
49
|
using BlockInvocationRefinements
|
17
50
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
51
|
+
sig do
|
52
|
+
params(
|
53
|
+
operation: SorbetTypes::SourceHash,
|
54
|
+
methods: SorbetTypes::SourceHash,
|
55
|
+
connection: Connection,
|
56
|
+
object_definitions: T.nilable(ObjectDefinitions)
|
57
|
+
).void
|
58
|
+
end
|
59
|
+
def initialize(operation: {}, methods: {}, connection: Connection.new, object_definitions: nil)
|
60
|
+
@operation = T.let(operation.with_indifferent_access, HashWithIndifferentAccess)
|
61
|
+
@_methods = T.let(methods.with_indifferent_access, HashWithIndifferentAccess)
|
62
|
+
@connection = T.let(connection, Connection)
|
63
|
+
@object_definitions = T.let(object_definitions, T.nilable(ObjectDefinitions))
|
64
|
+
end
|
65
|
+
|
66
|
+
sig do
|
67
|
+
params(
|
68
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
69
|
+
input: SorbetTypes::OperationInputHash,
|
70
|
+
extended_input_schema: SorbetTypes::OperationSchema,
|
71
|
+
extended_output_schema: SorbetTypes::OperationSchema,
|
72
|
+
continue: T::Hash[T.any(Symbol, String), T.untyped],
|
73
|
+
block: SorbetTypes::OperationExecuteProc
|
74
|
+
).returns(
|
75
|
+
T.untyped
|
76
|
+
)
|
26
77
|
end
|
27
|
-
|
28
78
|
def execute(settings = nil, input = {}, extended_input_schema = [], extended_output_schema = [], continue = {},
|
29
79
|
&block)
|
30
|
-
|
31
|
-
request_or_result = instance_exec(
|
32
|
-
|
80
|
+
connection.merge_settings!(settings) if settings
|
81
|
+
request_or_result = T.unsafe(self).instance_exec(
|
82
|
+
connection.settings,
|
33
83
|
input.with_indifferent_access,
|
34
84
|
Array.wrap(extended_input_schema).map(&:with_indifferent_access),
|
35
85
|
Array.wrap(extended_output_schema).map(&:with_indifferent_access),
|
@@ -39,55 +89,78 @@ module Workato
|
|
39
89
|
resolve_request(request_or_result)
|
40
90
|
end
|
41
91
|
|
92
|
+
sig do
|
93
|
+
params(
|
94
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
95
|
+
config_fields: SorbetTypes::OperationInputHash
|
96
|
+
).returns(
|
97
|
+
HashWithIndifferentAccess
|
98
|
+
)
|
99
|
+
end
|
42
100
|
def extended_schema(settings = nil, config_fields = {})
|
43
101
|
object_definitions_hash = object_definitions.lazy(settings, config_fields)
|
44
102
|
{
|
45
|
-
input:
|
103
|
+
input: Array.wrap(
|
104
|
+
schema_fields(object_definitions_hash, settings, config_fields, &operation[:input_fields])
|
105
|
+
),
|
46
106
|
output: schema_fields(object_definitions_hash, settings, config_fields, &operation[:output_fields])
|
47
107
|
}.with_indifferent_access
|
48
108
|
end
|
49
109
|
|
110
|
+
sig do
|
111
|
+
params(
|
112
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
113
|
+
config_fields: SorbetTypes::OperationInputHash
|
114
|
+
).returns(
|
115
|
+
SorbetTypes::OperationSchema
|
116
|
+
)
|
117
|
+
end
|
50
118
|
def input_fields(settings = nil, config_fields = {})
|
51
119
|
object_definitions_hash = object_definitions.lazy(settings, config_fields)
|
52
|
-
schema_fields(object_definitions_hash, settings, config_fields, &operation[:input_fields])
|
120
|
+
Array.wrap(schema_fields(object_definitions_hash, settings, config_fields, &operation[:input_fields]))
|
53
121
|
end
|
54
122
|
|
123
|
+
sig do
|
124
|
+
params(
|
125
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
126
|
+
config_fields: SorbetTypes::OperationInputHash
|
127
|
+
).returns(
|
128
|
+
T.nilable(SorbetTypes::OperationSchema)
|
129
|
+
)
|
130
|
+
end
|
55
131
|
def output_fields(settings = nil, config_fields = {})
|
56
132
|
object_definitions_hash = object_definitions.lazy(settings, config_fields)
|
57
|
-
|
133
|
+
T.cast(
|
134
|
+
schema_fields(object_definitions_hash, settings, config_fields, &operation[:output_fields]),
|
135
|
+
T.nilable(SorbetTypes::OperationSchema)
|
136
|
+
)
|
58
137
|
end
|
59
138
|
|
139
|
+
sig { params(input: SorbetTypes::OperationInputHash).returns(T.untyped) }
|
60
140
|
def summarize_input(input = {})
|
61
141
|
summarize(input, operation[:summarize_input])
|
62
142
|
end
|
63
143
|
|
144
|
+
sig { params(output: SorbetTypes::OperationInputHash).returns(T.untyped) }
|
64
145
|
def summarize_output(output = {})
|
65
146
|
summarize(output, operation[:summarize_output])
|
66
147
|
end
|
67
148
|
|
149
|
+
sig do
|
150
|
+
params(
|
151
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
152
|
+
input: SorbetTypes::OperationInputHash
|
153
|
+
).returns(
|
154
|
+
T.untyped
|
155
|
+
)
|
156
|
+
end
|
68
157
|
def sample_output(settings = nil, input = {})
|
69
158
|
execute(settings, input, &operation[:sample_output])
|
70
159
|
end
|
71
160
|
|
72
|
-
def refresh_authorization!(http_code, http_body, exception, settings = {})
|
73
|
-
return unless refresh_auth?(http_code, http_body, exception)
|
74
|
-
|
75
|
-
new_settings = if /oauth2/i =~ connection.authorization.type
|
76
|
-
refresh_oauth2_token(settings)
|
77
|
-
elsif connection.authorization.acquire?
|
78
|
-
acquire_token(settings)
|
79
|
-
end
|
80
|
-
return unless new_settings
|
81
|
-
|
82
|
-
settings.merge!(new_settings)
|
83
|
-
|
84
|
-
on_settings_updated&.call("Refresh token triggered on response \"#{exception}\"", settings)
|
85
|
-
|
86
|
-
settings
|
87
|
-
end
|
88
|
-
|
89
161
|
private
|
90
162
|
|
163
|
+
sig { params(input: SorbetTypes::OperationInputHash, schema: Schema).returns(SorbetTypes::OperationInputHash) }
|
91
164
|
def apply_input_schema(input, schema)
|
92
165
|
input = schema.trim(input)
|
93
166
|
schema.apply(input, enforce_required: true) do |value, field|
|
@@ -95,27 +168,40 @@ module Workato
|
|
95
168
|
end
|
96
169
|
end
|
97
170
|
|
171
|
+
sig { params(output: SorbetTypes::OperationInputHash, schema: Schema).returns(SorbetTypes::OperationInputHash) }
|
98
172
|
def apply_output_schema(output, schema)
|
99
173
|
schema.apply(output, enforce_required: false) do |value, field|
|
100
174
|
field.parse_output(value, @_methods[field[:parse_output]])
|
101
175
|
end
|
102
176
|
end
|
103
177
|
|
178
|
+
sig { returns(SorbetTypes::OperationSchema) }
|
104
179
|
def config_fields_schema
|
105
180
|
operation[:config_fields] || []
|
106
181
|
end
|
107
182
|
|
183
|
+
sig { params(data: SorbetTypes::OperationInputHash, paths: T::Array[String]).returns(T.untyped) }
|
108
184
|
def summarize(data, paths)
|
109
185
|
return data unless paths.present?
|
110
186
|
|
111
187
|
Summarize.new(data: data, paths: paths).call
|
112
188
|
end
|
113
189
|
|
190
|
+
sig do
|
191
|
+
params(
|
192
|
+
object_definitions_hash: HashWithIndifferentAccess,
|
193
|
+
settings: T.nilable(SorbetTypes::SettingsHash),
|
194
|
+
config_fields: SorbetTypes::OperationInputHash,
|
195
|
+
schema_proc: T.nilable(SorbetTypes::OperationSchemaProc)
|
196
|
+
).returns(
|
197
|
+
T.nilable(T.any(SorbetTypes::OperationSchema, T::Hash[T.any(Symbol, String), T.untyped]))
|
198
|
+
)
|
199
|
+
end
|
114
200
|
def schema_fields(object_definitions_hash, settings, config_fields, &schema_proc)
|
115
201
|
return [] unless schema_proc
|
116
202
|
|
117
203
|
execute(settings, config_fields) do |connection, input|
|
118
|
-
instance_exec(
|
204
|
+
T.unsafe(self).instance_exec(
|
119
205
|
object_definitions_hash,
|
120
206
|
connection,
|
121
207
|
input,
|
@@ -124,6 +210,7 @@ module Workato
|
|
124
210
|
end
|
125
211
|
end
|
126
212
|
|
213
|
+
sig { params(request_or_result: T.untyped).returns(T.untyped) }
|
127
214
|
def resolve_request(request_or_result)
|
128
215
|
case request_or_result
|
129
216
|
when Request
|
@@ -151,64 +238,16 @@ module Workato
|
|
151
238
|
end
|
152
239
|
end
|
153
240
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
pattern.is_a?(::Integer) && pattern == http_code ||
|
158
|
-
pattern === exception&.to_s ||
|
159
|
-
pattern === http_body
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
def acquire_token(settings)
|
164
|
-
connection.authorization.acquire(settings)
|
165
|
-
end
|
166
|
-
|
167
|
-
def refresh_oauth2_token_using_refresh(settings)
|
168
|
-
new_tokens, new_settings = connection.authorization.refresh(settings, settings[:refresh_token])
|
169
|
-
new_tokens.with_indifferent_access.merge(new_settings || {})
|
241
|
+
sig { returns(ObjectDefinitions) }
|
242
|
+
def object_definitions
|
243
|
+
T.must(@object_definitions)
|
170
244
|
end
|
171
245
|
|
172
|
-
|
173
|
-
|
174
|
-
raise NotImplementedError, 'refresh_token is empty. ' \
|
175
|
-
'Use workato oauth2 command to acquire access_token and refresh_token'
|
176
|
-
end
|
177
|
-
|
178
|
-
response = RestClient::Request.execute(
|
179
|
-
url: connection.authorization.token_url(settings),
|
180
|
-
method: :post,
|
181
|
-
payload: {
|
182
|
-
client_id: connection.authorization.client_id(settings),
|
183
|
-
client_secret: connection.authorization.client_secret(settings),
|
184
|
-
grant_type: :refresh_token,
|
185
|
-
refresh_token: settings[:refresh_token]
|
186
|
-
},
|
187
|
-
headers: {
|
188
|
-
accept: :json
|
189
|
-
}
|
190
|
-
)
|
191
|
-
tokens = JSON.parse(response.body)
|
192
|
-
{
|
193
|
-
access_token: tokens['access_token'],
|
194
|
-
refresh_token: tokens['refresh_token'].presence || settings[:refresh_token]
|
195
|
-
}.with_indifferent_access
|
196
|
-
end
|
197
|
-
|
198
|
-
def refresh_oauth2_token(settings)
|
199
|
-
if connection.authorization.refresh?
|
200
|
-
refresh_oauth2_token_using_refresh(settings)
|
201
|
-
elsif connection.authorization.token_url?
|
202
|
-
refresh_oauth2_token_using_token_url(settings)
|
203
|
-
else
|
204
|
-
raise InvalidDefinitionError, "'refresh' block or 'token_url' is required for refreshing the token"
|
205
|
-
end
|
206
|
-
end
|
246
|
+
sig { returns(HashWithIndifferentAccess) }
|
247
|
+
attr_reader :operation
|
207
248
|
|
208
|
-
|
209
|
-
|
210
|
-
:settings,
|
211
|
-
:object_definitions
|
249
|
+
sig { returns(Connection) }
|
250
|
+
attr_reader :connection
|
212
251
|
end
|
213
252
|
end
|
214
253
|
end
|