aws-sdk-core 3.152.0 → 3.234.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/CHANGELOG.md +942 -1
- data/VERSION +1 -1
- data/lib/aws-defaults/default_configuration.rb +5 -6
- data/lib/aws-defaults.rb +4 -1
- data/lib/aws-sdk-core/arn.rb +14 -3
- data/lib/aws-sdk-core/assume_role_credentials.rb +21 -13
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +16 -9
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -9
- data/lib/aws-sdk-core/binary/encode_handler.rb +13 -2
- data/lib/aws-sdk-core/binary/event_builder.rb +34 -37
- data/lib/aws-sdk-core/binary/event_stream_decoder.rb +1 -0
- data/lib/aws-sdk-core/binary/event_stream_encoder.rb +4 -3
- data/lib/aws-sdk-core/cbor/decoder.rb +308 -0
- data/lib/aws-sdk-core/cbor/encoder.rb +243 -0
- data/lib/aws-sdk-core/cbor.rb +53 -0
- data/lib/aws-sdk-core/client_side_monitoring.rb +9 -0
- data/lib/aws-sdk-core/client_stubs.rb +33 -55
- data/lib/aws-sdk-core/credential_provider.rb +8 -1
- data/lib/aws-sdk-core/credential_provider_chain.rb +81 -29
- data/lib/aws-sdk-core/credentials.rb +19 -6
- data/lib/aws-sdk-core/ec2_metadata.rb +1 -1
- data/lib/aws-sdk-core/ecs_credentials.rb +186 -60
- data/lib/aws-sdk-core/endpoints/condition.rb +41 -0
- data/lib/aws-sdk-core/endpoints/endpoint.rb +19 -0
- data/lib/aws-sdk-core/endpoints/endpoint_rule.rb +75 -0
- data/lib/aws-sdk-core/endpoints/error_rule.rb +42 -0
- data/lib/aws-sdk-core/endpoints/function.rb +80 -0
- data/lib/aws-sdk-core/endpoints/matchers.rb +129 -0
- data/lib/aws-sdk-core/endpoints/reference.rb +31 -0
- data/lib/aws-sdk-core/endpoints/rule.rb +25 -0
- data/lib/aws-sdk-core/endpoints/rule_set.rb +52 -0
- data/lib/aws-sdk-core/endpoints/rules_provider.rb +37 -0
- data/lib/aws-sdk-core/endpoints/templater.rb +58 -0
- data/lib/aws-sdk-core/endpoints/tree_rule.rb +45 -0
- data/lib/aws-sdk-core/endpoints/url.rb +60 -0
- data/lib/aws-sdk-core/endpoints.rb +158 -0
- data/lib/aws-sdk-core/error_handler.rb +46 -0
- data/lib/aws-sdk-core/errors.rb +14 -5
- data/lib/aws-sdk-core/event_emitter.rb +1 -17
- data/lib/aws-sdk-core/ini_parser.rb +7 -0
- data/lib/aws-sdk-core/instance_profile_credentials.rb +168 -155
- data/lib/aws-sdk-core/json/builder.rb +8 -1
- data/lib/aws-sdk-core/json/error_handler.rb +46 -11
- data/lib/aws-sdk-core/json/handler.rb +13 -6
- data/lib/aws-sdk-core/json/json_engine.rb +3 -1
- data/lib/aws-sdk-core/json/oj_engine.rb +7 -1
- data/lib/aws-sdk-core/json/parser.rb +33 -3
- data/lib/aws-sdk-core/json.rb +43 -14
- data/lib/aws-sdk-core/log/formatter.rb +6 -0
- data/lib/aws-sdk-core/log/param_filter.rb +2 -2
- data/lib/aws-sdk-core/log/param_formatter.rb +7 -3
- data/lib/aws-sdk-core/log.rb +10 -0
- data/lib/aws-sdk-core/lru_cache.rb +75 -0
- data/lib/aws-sdk-core/pageable_response.rb +3 -1
- data/lib/aws-sdk-core/param_validator.rb +9 -4
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +348 -169
- data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +1 -1
- data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +14 -2
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +84 -38
- data/lib/aws-sdk-core/plugins/endpoint_discovery.rb +6 -2
- data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +40 -32
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +3 -8
- data/lib/aws-sdk-core/plugins/invocation_id.rb +1 -11
- data/lib/aws-sdk-core/plugins/logging.rb +2 -0
- data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +3 -1
- data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -24
- data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +6 -8
- data/lib/aws-sdk-core/plugins/protocols/query.rb +4 -2
- data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +3 -15
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +3 -0
- data/lib/aws-sdk-core/plugins/protocols/rpc_v2.rb +17 -0
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +164 -34
- data/lib/aws-sdk-core/plugins/request_compression.rb +226 -0
- data/lib/aws-sdk-core/plugins/retries/error_inspector.rb +2 -1
- data/lib/aws-sdk-core/plugins/retry_errors.rb +12 -3
- data/lib/aws-sdk-core/plugins/sign.rb +222 -0
- data/lib/aws-sdk-core/plugins/signature_v2.rb +2 -0
- data/lib/aws-sdk-core/plugins/signature_v4.rb +2 -0
- data/lib/aws-sdk-core/plugins/stub_responses.rb +59 -9
- data/lib/aws-sdk-core/plugins/telemetry.rb +75 -0
- data/lib/aws-sdk-core/plugins/transfer_encoding.rb +16 -9
- data/lib/aws-sdk-core/plugins/user_agent.rb +192 -14
- data/lib/aws-sdk-core/plugins.rb +39 -0
- data/lib/aws-sdk-core/process_credentials.rb +48 -29
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/ec2_param_builder.rb +5 -7
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query/param_builder.rb +2 -2
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/refreshing_credentials.rb +20 -23
- data/lib/aws-sdk-core/resources.rb +8 -0
- data/lib/aws-sdk-core/rest/content_type_handler.rb +60 -0
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/body.rb +32 -5
- data/lib/aws-sdk-core/rest/request/endpoint.rb +24 -4
- data/lib/aws-sdk-core/rest/request/headers.rb +14 -10
- data/lib/aws-sdk-core/rest/request/querystring_builder.rb +62 -36
- data/lib/aws-sdk-core/rest/response/body.rb +15 -1
- data/lib/aws-sdk-core/rest/response/header_list_parser.rb +79 -0
- data/lib/aws-sdk-core/rest/response/headers.rb +8 -3
- data/lib/aws-sdk-core/rest.rb +1 -0
- data/lib/aws-sdk-core/rpc_v2/builder.rb +62 -0
- data/lib/aws-sdk-core/rpc_v2/cbor_engine.rb +18 -0
- data/lib/aws-sdk-core/rpc_v2/content_type_handler.rb +47 -0
- data/lib/aws-sdk-core/rpc_v2/error_handler.rb +95 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +79 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +98 -0
- data/lib/aws-sdk-core/rpc_v2.rb +69 -0
- data/lib/aws-sdk-core/shared_config.rb +160 -36
- data/lib/aws-sdk-core/shared_credentials.rb +1 -7
- data/lib/aws-sdk-core/sso_credentials.rb +84 -46
- data/lib/aws-sdk-core/sso_token_provider.rb +3 -2
- data/lib/aws-sdk-core/static_token_provider.rb +1 -2
- data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +12 -11
- data/lib/aws-sdk-core/stubbing/protocols/json.rb +11 -10
- data/lib/aws-sdk-core/stubbing/protocols/query.rb +7 -6
- data/lib/aws-sdk-core/stubbing/protocols/rest.rb +2 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +9 -8
- data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +6 -5
- data/lib/aws-sdk-core/stubbing/protocols/rpc_v2.rb +39 -0
- data/lib/aws-sdk-core/stubbing/stub_data.rb +11 -0
- data/lib/aws-sdk-core/stubbing.rb +22 -0
- data/lib/aws-sdk-core/telemetry/base.rb +177 -0
- data/lib/aws-sdk-core/telemetry/no_op.rb +70 -0
- data/lib/aws-sdk-core/telemetry/otel.rb +235 -0
- data/lib/aws-sdk-core/telemetry/span_kind.rb +22 -0
- data/lib/aws-sdk-core/telemetry/span_status.rb +59 -0
- data/lib/aws-sdk-core/telemetry.rb +78 -0
- data/lib/aws-sdk-core/token.rb +3 -3
- data/lib/aws-sdk-core/token_provider.rb +4 -0
- data/lib/aws-sdk-core/token_provider_chain.rb +2 -6
- data/lib/aws-sdk-core/util.rb +41 -1
- data/lib/aws-sdk-core/waiters/poller.rb +12 -5
- data/lib/aws-sdk-core/xml/builder.rb +17 -9
- data/lib/aws-sdk-core/xml/error_handler.rb +35 -43
- data/lib/aws-sdk-core/xml/parser/frame.rb +4 -20
- data/lib/aws-sdk-core/xml/parser/{engines/oga.rb → oga_engine.rb} +2 -0
- data/lib/aws-sdk-core/xml/parser/stack.rb +2 -0
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +82 -103
- data/lib/aws-sdk-sso/client.rb +219 -89
- data/lib/aws-sdk-sso/client_api.rb +7 -0
- data/lib/aws-sdk-sso/endpoint_parameters.rb +69 -0
- data/lib/aws-sdk-sso/endpoint_provider.rb +53 -0
- data/lib/aws-sdk-sso/endpoints.rb +20 -0
- data/lib/aws-sdk-sso/plugins/endpoints.rb +77 -0
- data/lib/aws-sdk-sso/types.rb +1 -35
- data/lib/aws-sdk-sso.rb +15 -7
- data/lib/aws-sdk-ssooidc/client.rb +650 -118
- data/lib/aws-sdk-ssooidc/client_api.rb +94 -1
- data/lib/aws-sdk-ssooidc/endpoint_parameters.rb +69 -0
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +53 -0
- data/lib/aws-sdk-ssooidc/endpoints.rb +20 -0
- data/lib/aws-sdk-ssooidc/errors.rb +62 -0
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +77 -0
- data/lib/aws-sdk-ssooidc/types.rb +437 -67
- data/lib/aws-sdk-ssooidc.rb +15 -7
- data/lib/aws-sdk-sts/client.rb +670 -368
- data/lib/aws-sdk-sts/client_api.rb +48 -9
- data/lib/aws-sdk-sts/customizations.rb +5 -2
- data/lib/aws-sdk-sts/endpoint_parameters.rb +79 -0
- data/lib/aws-sdk-sts/endpoint_provider.rb +107 -0
- data/lib/aws-sdk-sts/endpoints.rb +20 -0
- data/lib/aws-sdk-sts/errors.rb +15 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +77 -0
- data/lib/aws-sdk-sts/presigner.rb +12 -18
- data/lib/aws-sdk-sts/types.rb +296 -222
- data/lib/aws-sdk-sts.rb +15 -7
- data/lib/seahorse/client/async_base.rb +4 -6
- data/lib/seahorse/client/async_response.rb +19 -0
- data/lib/seahorse/client/base.rb +18 -21
- data/lib/seahorse/client/configuration.rb +1 -5
- data/lib/seahorse/client/h2/connection.rb +27 -36
- data/lib/seahorse/client/h2/handler.rb +14 -3
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/http/response.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +15 -12
- data/lib/seahorse/client/net_http/handler.rb +21 -9
- data/lib/seahorse/client/net_http/patches.rb +1 -4
- data/lib/seahorse/client/networking_error.rb +1 -1
- data/lib/seahorse/client/plugin.rb +9 -0
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/h2.rb +4 -4
- data/lib/seahorse/client/plugins/net_http.rb +57 -16
- data/lib/seahorse/client/plugins/request_callback.rb +40 -9
- data/lib/seahorse/client/request_context.rb +9 -2
- data/lib/seahorse/client/response.rb +8 -0
- data/lib/seahorse/model/operation.rb +3 -0
- data/lib/seahorse/model/shapes.rb +2 -2
- data/lib/seahorse/util.rb +6 -1
- data/sig/aws-sdk-core/async_client_stubs.rbs +21 -0
- data/sig/aws-sdk-core/client_stubs.rbs +10 -0
- data/sig/aws-sdk-core/errors.rbs +22 -0
- data/sig/aws-sdk-core/resources/collection.rbs +21 -0
- data/sig/aws-sdk-core/structure.rbs +4 -0
- data/sig/aws-sdk-core/telemetry/base.rbs +46 -0
- data/sig/aws-sdk-core/telemetry/otel.rbs +22 -0
- data/sig/aws-sdk-core/telemetry/span_kind.rbs +15 -0
- data/sig/aws-sdk-core/telemetry/span_status.rbs +24 -0
- data/sig/aws-sdk-core/waiters/errors.rbs +20 -0
- data/sig/aws-sdk-core.rbs +7 -0
- data/sig/seahorse/client/async_base.rbs +18 -0
- data/sig/seahorse/client/base.rbs +25 -0
- data/sig/seahorse/client/handler_builder.rbs +16 -0
- data/sig/seahorse/client/response.rbs +61 -0
- metadata +133 -23
- /data/lib/aws-sdk-core/xml/parser/{engines/libxml.rb → libxml_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/nokogiri.rb → nokogiri_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/ox.rb → ox_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/rexml.rb → rexml_engine.rb} +0 -0
data/lib/aws-sdk-sts.rb
CHANGED
|
@@ -13,12 +13,7 @@ unless Module.const_defined?(:Aws)
|
|
|
13
13
|
require 'aws-sigv4'
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
require_relative 'aws-sdk-sts/client_api'
|
|
18
|
-
require_relative 'aws-sdk-sts/client'
|
|
19
|
-
require_relative 'aws-sdk-sts/errors'
|
|
20
|
-
require_relative 'aws-sdk-sts/resource'
|
|
21
|
-
require_relative 'aws-sdk-sts/customizations'
|
|
16
|
+
Aws::Plugins::GlobalConfiguration.add_identifier(:sts)
|
|
22
17
|
|
|
23
18
|
# This module provides support for AWS Security Token Service. This module is available in the
|
|
24
19
|
# `aws-sdk-core` gem.
|
|
@@ -49,7 +44,20 @@ require_relative 'aws-sdk-sts/customizations'
|
|
|
49
44
|
#
|
|
50
45
|
# @!group service
|
|
51
46
|
module Aws::STS
|
|
47
|
+
autoload :Types, 'aws-sdk-sts/types'
|
|
48
|
+
autoload :ClientApi, 'aws-sdk-sts/client_api'
|
|
49
|
+
module Plugins
|
|
50
|
+
autoload :Endpoints, 'aws-sdk-sts/plugins/endpoints.rb'
|
|
51
|
+
end
|
|
52
|
+
autoload :Client, 'aws-sdk-sts/client'
|
|
53
|
+
autoload :Errors, 'aws-sdk-sts/errors'
|
|
54
|
+
autoload :Resource, 'aws-sdk-sts/resource'
|
|
55
|
+
autoload :EndpointParameters, 'aws-sdk-sts/endpoint_parameters'
|
|
56
|
+
autoload :EndpointProvider, 'aws-sdk-sts/endpoint_provider'
|
|
57
|
+
autoload :Endpoints, 'aws-sdk-sts/endpoints'
|
|
52
58
|
|
|
53
|
-
GEM_VERSION = '3.
|
|
59
|
+
GEM_VERSION = '3.234.0'
|
|
54
60
|
|
|
55
61
|
end
|
|
62
|
+
|
|
63
|
+
require_relative 'aws-sdk-sts/customizations'
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
module Seahorse
|
|
4
4
|
module Client
|
|
5
5
|
class AsyncBase < Seahorse::Client::Base
|
|
6
|
-
|
|
7
6
|
# default H2 plugins
|
|
7
|
+
# @api private
|
|
8
8
|
@plugins = PluginList.new([
|
|
9
9
|
Plugins::Endpoint,
|
|
10
10
|
Plugins::H2,
|
|
@@ -12,9 +12,8 @@ module Seahorse
|
|
|
12
12
|
])
|
|
13
13
|
|
|
14
14
|
def initialize(plugins, options)
|
|
15
|
-
super
|
|
16
|
-
@connection = H2::Connection.new(
|
|
17
|
-
@options = options
|
|
15
|
+
super(plugins, options)
|
|
16
|
+
@connection = H2::Connection.new(@config)
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
# @return [H2::Connection]
|
|
@@ -36,7 +35,7 @@ module Seahorse
|
|
|
36
35
|
# @return [Seahorse::Client::H2::Connection]
|
|
37
36
|
def new_connection
|
|
38
37
|
if @connection.closed?
|
|
39
|
-
@connection = H2::Connection.new(@
|
|
38
|
+
@connection = H2::Connection.new(@config)
|
|
40
39
|
else
|
|
41
40
|
@connection
|
|
42
41
|
end
|
|
@@ -49,4 +48,3 @@ module Seahorse
|
|
|
49
48
|
end
|
|
50
49
|
end
|
|
51
50
|
end
|
|
52
|
-
|
|
@@ -12,24 +12,43 @@ module Seahorse
|
|
|
12
12
|
@sync_queue = options[:sync_queue]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
+
# @return [RequestContext]
|
|
15
16
|
def context
|
|
16
17
|
@response.context
|
|
17
18
|
end
|
|
18
19
|
|
|
20
|
+
# @return [StandardError, nil]
|
|
19
21
|
def error
|
|
20
22
|
@response.error
|
|
21
23
|
end
|
|
22
24
|
|
|
25
|
+
# @overload on(status_code, &block)
|
|
26
|
+
# @param [Integer] status_code The block will be
|
|
27
|
+
# triggered only for responses with the given status code.
|
|
28
|
+
#
|
|
29
|
+
# @overload on(status_code_range, &block)
|
|
30
|
+
# @param [Range<Integer>] status_code_range The block will be
|
|
31
|
+
# triggered only for responses with a status code that falls
|
|
32
|
+
# witin the given range.
|
|
33
|
+
#
|
|
34
|
+
# @return [self]
|
|
23
35
|
def on(range, &block)
|
|
24
36
|
@response.on(range, &block)
|
|
25
37
|
self
|
|
26
38
|
end
|
|
27
39
|
|
|
40
|
+
# @api private
|
|
28
41
|
def on_complete(&block)
|
|
29
42
|
@response.on_complete(&block)
|
|
30
43
|
self
|
|
31
44
|
end
|
|
32
45
|
|
|
46
|
+
# @return [Boolean] Returns `true` if the response is complete with
|
|
47
|
+
# no error.
|
|
48
|
+
def successful?
|
|
49
|
+
@response.error.nil?
|
|
50
|
+
end
|
|
51
|
+
|
|
33
52
|
def wait
|
|
34
53
|
if error && context.config.raise_response_errors
|
|
35
54
|
raise error
|
data/lib/seahorse/client/base.rb
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'thread'
|
|
4
|
-
|
|
5
3
|
module Seahorse
|
|
6
4
|
module Client
|
|
7
5
|
class Base
|
|
@@ -9,6 +7,7 @@ module Seahorse
|
|
|
9
7
|
include HandlerBuilder
|
|
10
8
|
|
|
11
9
|
# default plugins
|
|
10
|
+
# @api private
|
|
12
11
|
@plugins = PluginList.new([
|
|
13
12
|
Plugins::Endpoint,
|
|
14
13
|
Plugins::NetHttp,
|
|
@@ -59,6 +58,7 @@ module Seahorse
|
|
|
59
58
|
def build_config(plugins, options)
|
|
60
59
|
config = Configuration.new
|
|
61
60
|
config.add_option(:api)
|
|
61
|
+
config.add_option(:plugins)
|
|
62
62
|
plugins.each do |plugin|
|
|
63
63
|
plugin.add_options(config) if plugin.respond_to?(:add_options)
|
|
64
64
|
end
|
|
@@ -95,9 +95,9 @@ module Seahorse
|
|
|
95
95
|
class << self
|
|
96
96
|
|
|
97
97
|
def new(options = {})
|
|
98
|
-
plugins = build_plugins
|
|
99
98
|
options = options.dup
|
|
100
|
-
|
|
99
|
+
plugins = build_plugins(self.plugins + options.fetch(:plugins, []))
|
|
100
|
+
plugins = before_initialize(plugins, options)
|
|
101
101
|
client = allocate
|
|
102
102
|
client.send(:initialize, plugins, options)
|
|
103
103
|
client
|
|
@@ -176,8 +176,6 @@ module Seahorse
|
|
|
176
176
|
# @return [Model::Api]
|
|
177
177
|
def set_api(api)
|
|
178
178
|
@api = api
|
|
179
|
-
define_operation_methods
|
|
180
|
-
@api
|
|
181
179
|
end
|
|
182
180
|
|
|
183
181
|
# @option options [Model::Api, Hash] :api ({})
|
|
@@ -196,29 +194,28 @@ module Seahorse
|
|
|
196
194
|
|
|
197
195
|
private
|
|
198
196
|
|
|
199
|
-
def
|
|
200
|
-
operations_module = Module.new
|
|
201
|
-
@api.operation_names.each do |method_name|
|
|
202
|
-
operations_module.send(:define_method, method_name) do |*args, &block|
|
|
203
|
-
params = args[0] || {}
|
|
204
|
-
options = args[1] || {}
|
|
205
|
-
build_request(method_name, params).send_request(options, &block)
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
include(operations_module)
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
def build_plugins
|
|
197
|
+
def build_plugins(plugins)
|
|
212
198
|
plugins.map { |plugin| plugin.is_a?(Class) ? plugin.new : plugin }
|
|
213
199
|
end
|
|
214
200
|
|
|
215
201
|
def before_initialize(plugins, options)
|
|
216
|
-
|
|
217
|
-
|
|
202
|
+
queue = Queue.new
|
|
203
|
+
plugins.each { |plugin| queue.push(plugin) }
|
|
204
|
+
until queue.empty?
|
|
205
|
+
plugin = queue.pop
|
|
206
|
+
next unless plugin.respond_to?(:before_initialize)
|
|
207
|
+
|
|
208
|
+
plugins_before = options.fetch(:plugins, [])
|
|
209
|
+
plugin.before_initialize(self, options)
|
|
210
|
+
plugins_after = build_plugins(options.fetch(:plugins, []) - plugins_before)
|
|
211
|
+
# Plugins with before_initialize can add other plugins
|
|
212
|
+
plugins_after.each { |p| queue.push(p); plugins << p }
|
|
218
213
|
end
|
|
214
|
+
plugins
|
|
219
215
|
end
|
|
220
216
|
|
|
221
217
|
def inherited(subclass)
|
|
218
|
+
super
|
|
222
219
|
subclass.instance_variable_set('@plugins', PluginList.new(@plugins))
|
|
223
220
|
end
|
|
224
221
|
|
|
@@ -68,7 +68,7 @@ module Seahorse
|
|
|
68
68
|
@block = block
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
def call(*args)
|
|
71
|
+
def call(*args)
|
|
72
72
|
@block.call(*args)
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -204,10 +204,6 @@ module Seahorse
|
|
|
204
204
|
def value_at(opt_name)
|
|
205
205
|
value = @struct[opt_name]
|
|
206
206
|
if value.is_a?(Defaults)
|
|
207
|
-
# this config value is used by endpoint discovery
|
|
208
|
-
if opt_name == :endpoint && @struct.members.include?(:regional_endpoint)
|
|
209
|
-
@struct[:regional_endpoint] = true
|
|
210
|
-
end
|
|
211
207
|
resolve_defaults(opt_name, value)
|
|
212
208
|
else
|
|
213
209
|
value
|
|
@@ -10,13 +10,8 @@ module Seahorse
|
|
|
10
10
|
module Client
|
|
11
11
|
# @api private
|
|
12
12
|
module H2
|
|
13
|
-
|
|
14
13
|
# H2 Connection build on top of `http/2` gem
|
|
15
|
-
# (requires Ruby >= 2.1)
|
|
16
|
-
# with TLS layer plus ALPN, requires:
|
|
17
|
-
# Ruby >= 2.3 and OpenSSL >= 1.0.2
|
|
18
14
|
class Connection
|
|
19
|
-
|
|
20
15
|
OPTIONS = {
|
|
21
16
|
max_concurrent_streams: 100,
|
|
22
17
|
connection_timeout: 60,
|
|
@@ -27,7 +22,7 @@ module Seahorse
|
|
|
27
22
|
ssl_ca_bundle: nil,
|
|
28
23
|
ssl_ca_directory: nil,
|
|
29
24
|
ssl_ca_store: nil,
|
|
30
|
-
enable_alpn:
|
|
25
|
+
enable_alpn: true
|
|
31
26
|
}
|
|
32
27
|
|
|
33
28
|
# chunk read size at socket
|
|
@@ -41,23 +36,23 @@ module Seahorse
|
|
|
41
36
|
instance_variable_set("@#{opt_name}", value)
|
|
42
37
|
end
|
|
43
38
|
@h2_client = HTTP2::Client.new(
|
|
44
|
-
settings_max_concurrent_streams: max_concurrent_streams
|
|
39
|
+
settings_max_concurrent_streams: @max_concurrent_streams
|
|
45
40
|
)
|
|
46
|
-
@logger
|
|
41
|
+
@logger ||= Logger.new($stdout) if @http_wire_trace
|
|
47
42
|
@chunk_size = options[:read_chunk_size] || CHUNKSIZE
|
|
43
|
+
|
|
48
44
|
@errors = []
|
|
49
45
|
@status = :ready
|
|
46
|
+
|
|
50
47
|
@mutex = Mutex.new # connection can be shared across requests
|
|
51
48
|
@socket = nil
|
|
52
49
|
@socket_thread = nil
|
|
53
50
|
end
|
|
54
51
|
|
|
55
52
|
OPTIONS.keys.each do |attr_name|
|
|
56
|
-
attr_reader
|
|
53
|
+
attr_reader attr_name
|
|
57
54
|
end
|
|
58
55
|
|
|
59
|
-
alias ssl_verify_peer? ssl_verify_peer
|
|
60
|
-
|
|
61
56
|
attr_reader :errors
|
|
62
57
|
|
|
63
58
|
attr_accessor :input_signal_thread
|
|
@@ -104,13 +99,13 @@ module Seahorse
|
|
|
104
99
|
@mutex.synchronize {
|
|
105
100
|
return if @socket_thread
|
|
106
101
|
@socket_thread = Thread.new do
|
|
107
|
-
while !@socket.closed?
|
|
102
|
+
while @socket && !@socket.closed?
|
|
108
103
|
begin
|
|
109
104
|
data = @socket.read_nonblock(@chunk_size)
|
|
110
105
|
@h2_client << data
|
|
111
106
|
rescue IO::WaitReadable
|
|
112
107
|
begin
|
|
113
|
-
unless IO.select([@socket], nil, nil, connection_read_timeout)
|
|
108
|
+
unless IO.select([@socket], nil, nil, @connection_read_timeout)
|
|
114
109
|
self.debug_output('socket connection read time out')
|
|
115
110
|
self.close!
|
|
116
111
|
else
|
|
@@ -130,6 +125,7 @@ module Seahorse
|
|
|
130
125
|
self.close!
|
|
131
126
|
end
|
|
132
127
|
end
|
|
128
|
+
@socket_thread = nil
|
|
133
129
|
end
|
|
134
130
|
@socket_thread.abort_on_exception = true
|
|
135
131
|
}
|
|
@@ -142,10 +138,6 @@ module Seahorse
|
|
|
142
138
|
@socket.close
|
|
143
139
|
@socket = nil
|
|
144
140
|
end
|
|
145
|
-
if @socket_thread
|
|
146
|
-
Thread.kill(@socket_thread)
|
|
147
|
-
@socket_thread = nil
|
|
148
|
-
end
|
|
149
141
|
@status = :closed
|
|
150
142
|
}
|
|
151
143
|
end
|
|
@@ -155,11 +147,11 @@ module Seahorse
|
|
|
155
147
|
end
|
|
156
148
|
|
|
157
149
|
def debug_output(msg, type = nil)
|
|
158
|
-
prefix =
|
|
150
|
+
prefix =
|
|
151
|
+
case type
|
|
159
152
|
when :send then '-> '
|
|
160
153
|
when :receive then '<- '
|
|
161
|
-
else
|
|
162
|
-
''
|
|
154
|
+
else ''
|
|
163
155
|
end
|
|
164
156
|
return unless @logger
|
|
165
157
|
_debug_entry(prefix + msg)
|
|
@@ -183,11 +175,13 @@ module Seahorse
|
|
|
183
175
|
@socket.flush
|
|
184
176
|
end
|
|
185
177
|
end
|
|
186
|
-
@
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
178
|
+
if @http_wire_trace
|
|
179
|
+
@h2_client.on(:frame_sent) do |frame|
|
|
180
|
+
debug_output("frame: #{frame.inspect}", :send)
|
|
181
|
+
end
|
|
182
|
+
@h2_client.on(:frame_received) do |frame|
|
|
183
|
+
debug_output("frame: #{frame.inspect}", :receive)
|
|
184
|
+
end
|
|
191
185
|
end
|
|
192
186
|
end
|
|
193
187
|
|
|
@@ -205,7 +199,7 @@ module Seahorse
|
|
|
205
199
|
begin
|
|
206
200
|
tcp.connect_nonblock(addr)
|
|
207
201
|
rescue IO::WaitWritable
|
|
208
|
-
unless IO.select(nil, [tcp], nil, connection_timeout)
|
|
202
|
+
unless IO.select(nil, [tcp], nil, @connection_timeout)
|
|
209
203
|
tcp.close
|
|
210
204
|
raise
|
|
211
205
|
end
|
|
@@ -219,15 +213,15 @@ module Seahorse
|
|
|
219
213
|
|
|
220
214
|
def _tls_context
|
|
221
215
|
ssl_ctx = OpenSSL::SSL::SSLContext.new(:TLSv1_2)
|
|
222
|
-
if ssl_verify_peer
|
|
216
|
+
if @ssl_verify_peer
|
|
223
217
|
ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
|
224
|
-
ssl_ctx.ca_file = ssl_ca_bundle
|
|
225
|
-
ssl_ctx.ca_path = ssl_ca_directory
|
|
226
|
-
ssl_ctx.cert_store = ssl_ca_store if ssl_ca_store
|
|
218
|
+
ssl_ctx.ca_file = @ssl_ca_bundle || _default_ca_bundle
|
|
219
|
+
ssl_ctx.ca_path = @ssl_ca_directory || _default_ca_directory
|
|
220
|
+
ssl_ctx.cert_store = @ssl_ca_store if @ssl_ca_store
|
|
227
221
|
else
|
|
228
222
|
ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
229
223
|
end
|
|
230
|
-
if enable_alpn
|
|
224
|
+
if @enable_alpn
|
|
231
225
|
debug_output('enabling ALPN for TLS ...')
|
|
232
226
|
ssl_ctx.alpn_protocols = ['h2']
|
|
233
227
|
end
|
|
@@ -235,15 +229,12 @@ module Seahorse
|
|
|
235
229
|
end
|
|
236
230
|
|
|
237
231
|
def _default_ca_bundle
|
|
238
|
-
File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
|
239
|
-
OpenSSL::X509::DEFAULT_CERT_FILE : nil
|
|
232
|
+
OpenSSL::X509::DEFAULT_CERT_FILE if File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE)
|
|
240
233
|
end
|
|
241
234
|
|
|
242
235
|
def _default_ca_directory
|
|
243
|
-
Dir.exist?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
|
244
|
-
OpenSSL::X509::DEFAULT_CERT_DIR : nil
|
|
236
|
+
OpenSSL::X509::DEFAULT_CERT_DIR if Dir.exist?(OpenSSL::X509::DEFAULT_CERT_DIR)
|
|
245
237
|
end
|
|
246
|
-
|
|
247
238
|
end
|
|
248
239
|
end
|
|
249
240
|
end
|
|
@@ -27,6 +27,12 @@ module Seahorse
|
|
|
27
27
|
class Handler < Client::Handler
|
|
28
28
|
|
|
29
29
|
def call(context)
|
|
30
|
+
span_wrapper(context) { _call(context) }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def _call(context)
|
|
30
36
|
stream = nil
|
|
31
37
|
begin
|
|
32
38
|
conn = context.client.connection
|
|
@@ -80,8 +86,6 @@ module Seahorse
|
|
|
80
86
|
)
|
|
81
87
|
end
|
|
82
88
|
|
|
83
|
-
private
|
|
84
|
-
|
|
85
89
|
def _register_callbacks(resp, stream, stream_mutex, close_condition, sync_queue)
|
|
86
90
|
stream.on(:headers) do |headers|
|
|
87
91
|
resp.signal_headers(headers)
|
|
@@ -126,6 +130,7 @@ module Seahorse
|
|
|
126
130
|
# https://http2.github.io/http2-spec/#rfc.section.8.1.2.3
|
|
127
131
|
def _h2_headers(req)
|
|
128
132
|
headers = {}
|
|
133
|
+
headers[':authority'] = req.endpoint.host
|
|
129
134
|
headers[':method'] = req.http_method.upcase
|
|
130
135
|
headers[':scheme'] = req.endpoint.scheme
|
|
131
136
|
headers[':path'] = req.endpoint.path.empty? ? '/' : req.endpoint.path
|
|
@@ -145,8 +150,14 @@ module Seahorse
|
|
|
145
150
|
end
|
|
146
151
|
end
|
|
147
152
|
|
|
153
|
+
def span_wrapper(context, &block)
|
|
154
|
+
context.tracer.in_span(
|
|
155
|
+
'Handler.H2',
|
|
156
|
+
attributes: Aws::Telemetry.http_request_attrs(context),
|
|
157
|
+
&block
|
|
158
|
+
)
|
|
159
|
+
end
|
|
148
160
|
end
|
|
149
|
-
|
|
150
161
|
end
|
|
151
162
|
end
|
|
152
163
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "cgi/escape"
|
|
4
|
+
require "cgi/util" if RUBY_VERSION < "3.5"
|
|
4
5
|
require 'net/http'
|
|
5
6
|
require 'net/https'
|
|
6
7
|
require 'delegate'
|
|
@@ -34,7 +35,9 @@ module Seahorse
|
|
|
34
35
|
ssl_ca_bundle: nil,
|
|
35
36
|
ssl_ca_directory: nil,
|
|
36
37
|
ssl_ca_store: nil,
|
|
37
|
-
ssl_timeout: nil
|
|
38
|
+
ssl_timeout: nil,
|
|
39
|
+
ssl_cert: nil,
|
|
40
|
+
ssl_key: nil
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
# @api private
|
|
@@ -119,11 +122,7 @@ module Seahorse
|
|
|
119
122
|
# pool, not counting those currently in use.
|
|
120
123
|
def size
|
|
121
124
|
@pool_mutex.synchronize do
|
|
122
|
-
size
|
|
123
|
-
@pool.each_pair do |endpoint,sessions|
|
|
124
|
-
size += sessions.size
|
|
125
|
-
end
|
|
126
|
-
size
|
|
125
|
+
@pool.values.flatten.size
|
|
127
126
|
end
|
|
128
127
|
end
|
|
129
128
|
|
|
@@ -142,9 +141,7 @@ module Seahorse
|
|
|
142
141
|
# @return [nil]
|
|
143
142
|
def empty!
|
|
144
143
|
@pool_mutex.synchronize do
|
|
145
|
-
@pool.
|
|
146
|
-
sessions.each(&:finish)
|
|
147
|
-
end
|
|
144
|
+
@pool.values.flatten.map(&:finish)
|
|
148
145
|
@pool.clear
|
|
149
146
|
end
|
|
150
147
|
nil
|
|
@@ -252,7 +249,9 @@ module Seahorse
|
|
|
252
249
|
:ssl_ca_bundle => options[:ssl_ca_bundle],
|
|
253
250
|
:ssl_ca_directory => options[:ssl_ca_directory],
|
|
254
251
|
:ssl_ca_store => options[:ssl_ca_store],
|
|
255
|
-
:ssl_timeout => options[:ssl_timeout]
|
|
252
|
+
:ssl_timeout => options[:ssl_timeout],
|
|
253
|
+
:ssl_cert => options[:ssl_cert],
|
|
254
|
+
:ssl_key => options[:ssl_key]
|
|
256
255
|
}
|
|
257
256
|
end
|
|
258
257
|
|
|
@@ -297,6 +296,8 @@ module Seahorse
|
|
|
297
296
|
http.ca_file = ssl_ca_bundle if ssl_ca_bundle
|
|
298
297
|
http.ca_path = ssl_ca_directory if ssl_ca_directory
|
|
299
298
|
http.cert_store = ssl_ca_store if ssl_ca_store
|
|
299
|
+
http.cert = ssl_cert if ssl_cert
|
|
300
|
+
http.key = ssl_key if ssl_key
|
|
300
301
|
else
|
|
301
302
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
302
303
|
end
|
|
@@ -312,7 +313,7 @@ module Seahorse
|
|
|
312
313
|
# @note **Must** be called behind a `@pool_mutex` synchronize block.
|
|
313
314
|
def _clean
|
|
314
315
|
now = Aws::Util.monotonic_milliseconds
|
|
315
|
-
@pool.
|
|
316
|
+
@pool.values.each do |sessions|
|
|
316
317
|
sessions.delete_if do |session|
|
|
317
318
|
if session.last_used.nil? or now - session.last_used > http_idle_timeout * 1000
|
|
318
319
|
session.finish
|
|
@@ -336,6 +337,8 @@ module Seahorse
|
|
|
336
337
|
attr_reader :last_used
|
|
337
338
|
|
|
338
339
|
def __getobj__
|
|
340
|
+
return yield if block_given? && !defined?(@http)
|
|
341
|
+
|
|
339
342
|
@http
|
|
340
343
|
end
|
|
341
344
|
|
|
@@ -23,17 +23,12 @@ module Seahorse
|
|
|
23
23
|
|
|
24
24
|
NETWORK_ERRORS = [
|
|
25
25
|
SocketError, EOFError, IOError, Timeout::Error,
|
|
26
|
-
Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE,
|
|
27
|
-
Errno::
|
|
28
|
-
|
|
26
|
+
Errno::ECONNABORTED, Errno::ECONNRESET, Errno::EPIPE, Errno::EINVAL,
|
|
27
|
+
Errno::ETIMEDOUT, Errno::EHOSTUNREACH, Errno::ECONNREFUSED,
|
|
28
|
+
OpenSSL::SSL::SSLError, OpenSSL::SSL::SSLErrorWaitReadable,
|
|
29
29
|
Net::HTTPFatalError # for proxy connection failures
|
|
30
30
|
]
|
|
31
31
|
|
|
32
|
-
# does not exist in Ruby 1.9.3
|
|
33
|
-
if OpenSSL::SSL.const_defined?(:SSLErrorWaitReadable)
|
|
34
|
-
NETWORK_ERRORS << OpenSSL::SSL::SSLErrorWaitReadable
|
|
35
|
-
end
|
|
36
|
-
|
|
37
32
|
# @api private
|
|
38
33
|
DNS_ERROR_MESSAGES = [
|
|
39
34
|
'getaddrinfo: nodename nor servname provided, or not known', # MacOS
|
|
@@ -47,7 +42,13 @@ module Seahorse
|
|
|
47
42
|
# @param [RequestContext] context
|
|
48
43
|
# @return [Response]
|
|
49
44
|
def call(context)
|
|
50
|
-
|
|
45
|
+
span_wrapper(context) do
|
|
46
|
+
transmit(
|
|
47
|
+
context.config,
|
|
48
|
+
context.http_request,
|
|
49
|
+
context.http_response
|
|
50
|
+
)
|
|
51
|
+
end
|
|
51
52
|
Response.new(context: context)
|
|
52
53
|
end
|
|
53
54
|
|
|
@@ -197,6 +198,17 @@ module Seahorse
|
|
|
197
198
|
end
|
|
198
199
|
end
|
|
199
200
|
|
|
201
|
+
def span_wrapper(context, &block)
|
|
202
|
+
context.tracer.in_span(
|
|
203
|
+
'Handler.NetHttp',
|
|
204
|
+
attributes: Aws::Telemetry.http_request_attrs(context)
|
|
205
|
+
) do |span|
|
|
206
|
+
block.call
|
|
207
|
+
span.add_attributes(
|
|
208
|
+
Aws::Telemetry.http_response_attrs(context)
|
|
209
|
+
)
|
|
210
|
+
end
|
|
211
|
+
end
|
|
200
212
|
end
|
|
201
213
|
end
|
|
202
214
|
end
|
|
@@ -12,12 +12,9 @@ module Seahorse
|
|
|
12
12
|
|
|
13
13
|
def self.apply!
|
|
14
14
|
Net::HTTPGenericRequest.prepend(PatchDefaultContentType)
|
|
15
|
-
return unless RUBY_VERSION < '2.5'
|
|
16
|
-
|
|
17
|
-
Net::HTTP::IDEMPOTENT_METHODS_.clear
|
|
18
15
|
end
|
|
19
16
|
|
|
20
|
-
# For requests with
|
|
17
|
+
# For requests with bodies, Net::HTTP sets a default content type of:
|
|
21
18
|
# 'application/x-www-form-urlencoded'
|
|
22
19
|
# There are cases where we should not send content type at all.
|
|
23
20
|
# Even when no body is supplied, Net::HTTP uses a default empty body
|
|
@@ -111,7 +111,15 @@ module Seahorse
|
|
|
111
111
|
|
|
112
112
|
def initialize(name, options = {})
|
|
113
113
|
@name = name
|
|
114
|
+
# prevent unstable object shapes by ensuring
|
|
115
|
+
# order and presence of instance variables
|
|
116
|
+
@default = nil
|
|
117
|
+
@default_block = nil
|
|
118
|
+
@required = nil
|
|
119
|
+
@doc_type = nil
|
|
114
120
|
@doc_default = nil
|
|
121
|
+
@docstring = nil
|
|
122
|
+
@rbs_type = nil
|
|
115
123
|
options.each_pair do |opt_name, opt_value|
|
|
116
124
|
self.send("#{opt_name}=", opt_value)
|
|
117
125
|
end
|
|
@@ -124,6 +132,7 @@ module Seahorse
|
|
|
124
132
|
attr_accessor :doc_type
|
|
125
133
|
attr_writer :doc_default
|
|
126
134
|
attr_accessor :docstring
|
|
135
|
+
attr_accessor :rbs_type
|
|
127
136
|
|
|
128
137
|
def doc_default(options)
|
|
129
138
|
if @doc_default.nil? && !default.is_a?(Proc)
|
|
@@ -53,10 +53,10 @@ When `true`, SSL peer certificates are verified when establishing a connection.
|
|
|
53
53
|
When `true`, HTTP2 debug output will be sent to the `:logger`.
|
|
54
54
|
DOCS
|
|
55
55
|
|
|
56
|
-
option(:enable_alpn, default:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
option(:enable_alpn, default: true, doc_type: 'Boolean', docstring: <<-DOCS)
|
|
57
|
+
Set to `false` to disable ALPN in HTTP2 over TLS. ALPN requires Openssl version >= 1.0.2.
|
|
58
|
+
Note: RFC7540 requires HTTP2 to use ALPN over TLS but some
|
|
59
|
+
services may not fully support ALPN and require setting this to `false`.
|
|
60
60
|
DOCS
|
|
61
61
|
|
|
62
62
|
option(:logger)
|