aws-sdk-core 3.197.0 → 3.220.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 +297 -0
- data/VERSION +1 -1
- data/lib/aws-defaults/default_configuration.rb +1 -2
- data/lib/aws-defaults.rb +4 -1
- data/lib/aws-sdk-core/arn.rb +1 -3
- data/lib/aws-sdk-core/assume_role_credentials.rb +12 -5
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +13 -7
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -4
- data/lib/aws-sdk-core/binary/encode_handler.rb +1 -1
- 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 +8 -7
- data/lib/aws-sdk-core/credential_provider_chain.rb +13 -6
- data/lib/aws-sdk-core/credentials.rb +13 -6
- data/lib/aws-sdk-core/endpoints/endpoint.rb +3 -1
- data/lib/aws-sdk-core/endpoints/matchers.rb +6 -9
- data/lib/aws-sdk-core/endpoints.rb +74 -18
- data/lib/aws-sdk-core/error_handler.rb +41 -0
- data/lib/aws-sdk-core/errors.rb +9 -0
- data/lib/aws-sdk-core/json/error_handler.rb +8 -9
- data/lib/aws-sdk-core/json/handler.rb +6 -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 +2 -0
- data/lib/aws-sdk-core/json.rb +43 -14
- 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/param_validator.rb +1 -1
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +332 -169
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +7 -3
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +2 -8
- 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 +4 -3
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +5 -1
- data/lib/aws-sdk-core/plugins/protocols/rpc_v2.rb +17 -0
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +74 -25
- data/lib/aws-sdk-core/plugins/retry_errors.rb +0 -1
- data/lib/aws-sdk-core/plugins/sign.rb +13 -11
- data/lib/aws-sdk-core/plugins/signature_v2.rb +2 -1
- data/lib/aws-sdk-core/plugins/signature_v4.rb +2 -1
- data/lib/aws-sdk-core/plugins/stub_responses.rb +29 -2
- 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 +26 -8
- data/lib/aws-sdk-core/plugins.rb +39 -0
- data/lib/aws-sdk-core/process_credentials.rb +47 -28
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/resources.rb +8 -0
- data/lib/aws-sdk-core/rest/{request/content_type.rb → content_type_handler.rb} +1 -1
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/endpoint.rb +3 -1
- data/lib/aws-sdk-core/rest/request/headers.rb +2 -2
- data/lib/aws-sdk-core/rest.rb +1 -1
- 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 +85 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +79 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +90 -0
- data/lib/aws-sdk-core/rpc_v2.rb +69 -0
- data/lib/aws-sdk-core/shared_config.rb +7 -2
- data/lib/aws-sdk-core/shared_credentials.rb +0 -7
- data/lib/aws-sdk-core/sso_credentials.rb +2 -1
- 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.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/waiters/poller.rb +9 -4
- data/lib/aws-sdk-core/xml/error_handler.rb +11 -37
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +82 -108
- data/lib/aws-sdk-sso/client.rb +99 -37
- data/lib/aws-sdk-sso/client_api.rb +7 -0
- data/lib/aws-sdk-sso/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-sso/endpoint_provider.rb +14 -18
- data/lib/aws-sdk-sso/endpoints.rb +2 -54
- data/lib/aws-sdk-sso/plugins/endpoints.rb +19 -20
- data/lib/aws-sdk-sso/types.rb +1 -0
- data/lib/aws-sdk-sso.rb +15 -11
- data/lib/aws-sdk-ssooidc/client.rb +123 -55
- data/lib/aws-sdk-ssooidc/client_api.rb +5 -0
- data/lib/aws-sdk-ssooidc/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +14 -18
- data/lib/aws-sdk-ssooidc/endpoints.rb +2 -54
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +19 -20
- data/lib/aws-sdk-ssooidc/types.rb +21 -15
- data/lib/aws-sdk-ssooidc.rb +15 -11
- data/lib/aws-sdk-sts/client.rb +307 -89
- data/lib/aws-sdk-sts/client_api.rb +28 -2
- data/lib/aws-sdk-sts/customizations.rb +5 -1
- data/lib/aws-sdk-sts/endpoint_parameters.rb +10 -9
- data/lib/aws-sdk-sts/endpoint_provider.rb +33 -38
- data/lib/aws-sdk-sts/endpoints.rb +2 -118
- data/lib/aws-sdk-sts/errors.rb +16 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +19 -28
- data/lib/aws-sdk-sts/types.rb +171 -28
- data/lib/aws-sdk-sts.rb +15 -11
- data/lib/seahorse/client/base.rb +17 -7
- data/lib/seahorse/client/h2/handler.rb +13 -3
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +10 -2
- data/lib/seahorse/client/net_http/handler.rb +21 -9
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/net_http.rb +9 -0
- data/lib/seahorse/client/request_context.rb +8 -1
- data/lib/seahorse/client/response.rb +2 -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
- metadata +62 -18
- /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/oga.rb → oga_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
@@ -6,21 +6,28 @@ module Aws
|
|
6
6
|
# @param [String] access_key_id
|
7
7
|
# @param [String] secret_access_key
|
8
8
|
# @param [String] session_token (nil)
|
9
|
-
|
9
|
+
# @param [Hash] kwargs
|
10
|
+
# @option kwargs [String] :credential_scope (nil)
|
11
|
+
def initialize(access_key_id, secret_access_key, session_token = nil,
|
12
|
+
**kwargs)
|
10
13
|
@access_key_id = access_key_id
|
11
14
|
@secret_access_key = secret_access_key
|
12
15
|
@session_token = session_token
|
16
|
+
@account_id = kwargs[:account_id]
|
13
17
|
end
|
14
18
|
|
15
|
-
# @return [String
|
19
|
+
# @return [String]
|
16
20
|
attr_reader :access_key_id
|
17
21
|
|
18
|
-
# @return [String
|
22
|
+
# @return [String]
|
19
23
|
attr_reader :secret_access_key
|
20
24
|
|
21
25
|
# @return [String, nil]
|
22
26
|
attr_reader :session_token
|
23
27
|
|
28
|
+
# @return [String, nil]
|
29
|
+
attr_reader :account_id
|
30
|
+
|
24
31
|
# @return [Credentials]
|
25
32
|
def credentials
|
26
33
|
self
|
@@ -30,9 +37,9 @@ module Aws
|
|
30
37
|
# access key are both set.
|
31
38
|
def set?
|
32
39
|
!access_key_id.nil? &&
|
33
|
-
|
34
|
-
|
35
|
-
|
40
|
+
!access_key_id.empty? &&
|
41
|
+
!secret_access_key.nil? &&
|
42
|
+
!secret_access_key.empty?
|
36
43
|
end
|
37
44
|
|
38
45
|
# Removing the secret access key from the default inspect string.
|
@@ -3,15 +3,17 @@
|
|
3
3
|
module Aws
|
4
4
|
module Endpoints
|
5
5
|
class Endpoint
|
6
|
-
def initialize(url:, properties: {}, headers: {})
|
6
|
+
def initialize(url:, properties: {}, headers: {}, metadata: {})
|
7
7
|
@url = url
|
8
8
|
@properties = properties
|
9
9
|
@headers = headers
|
10
|
+
@metadata = metadata
|
10
11
|
end
|
11
12
|
|
12
13
|
attr_reader :url
|
13
14
|
attr_reader :properties
|
14
15
|
attr_reader :headers
|
16
|
+
attr_reader :metadata
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -28,7 +28,11 @@ module Aws
|
|
28
28
|
|
29
29
|
val = if (index = parts.first[BRACKET_REGEX, 1])
|
30
30
|
# remove brackets and index from part before indexing
|
31
|
-
|
31
|
+
if (base = parts.first.gsub(BRACKET_REGEX, '')) && !base.empty?
|
32
|
+
value[base][index.to_i]
|
33
|
+
else
|
34
|
+
value[index.to_i]
|
35
|
+
end
|
32
36
|
else
|
33
37
|
value[parts.first]
|
34
38
|
end
|
@@ -90,14 +94,7 @@ module Aws
|
|
90
94
|
|
91
95
|
# aws.partition(value: string) Option<Partition>
|
92
96
|
def self.aws_partition(value)
|
93
|
-
partition
|
94
|
-
Aws::Partitions.find { |p| p.region?(value) } ||
|
95
|
-
Aws::Partitions.find { |p| value.match(p.region_regex) } ||
|
96
|
-
Aws::Partitions.find { |p| p.name == 'aws' }
|
97
|
-
|
98
|
-
return nil unless partition
|
99
|
-
|
100
|
-
partition.metadata
|
97
|
+
Aws::Partitions::Metadata.partition(value)
|
101
98
|
end
|
102
99
|
|
103
100
|
# aws.parseArn(value: string) Option<ARN>
|
@@ -14,9 +14,18 @@ require_relative 'endpoints/templater'
|
|
14
14
|
require_relative 'endpoints/tree_rule'
|
15
15
|
require_relative 'endpoints/url'
|
16
16
|
|
17
|
+
require 'aws-sigv4'
|
18
|
+
|
17
19
|
module Aws
|
18
20
|
# @api private
|
19
21
|
module Endpoints
|
22
|
+
SUPPORTED_AUTH_TRAITS = %w[
|
23
|
+
aws.auth#sigv4
|
24
|
+
aws.auth#sigv4a
|
25
|
+
smithy.api#httpBearerAuth
|
26
|
+
smithy.api#noAuth
|
27
|
+
].freeze
|
28
|
+
|
20
29
|
class << self
|
21
30
|
def resolve_auth_scheme(context, endpoint)
|
22
31
|
if endpoint && (auth_schemes = endpoint.properties['authSchemes'])
|
@@ -33,8 +42,71 @@ module Aws
|
|
33
42
|
|
34
43
|
private
|
35
44
|
|
45
|
+
def merge_signing_defaults(auth_scheme, config)
|
46
|
+
if %w[sigv4 sigv4a sigv4-s3express].include?(auth_scheme['name'])
|
47
|
+
auth_scheme['signingName'] ||= sigv4_name(config)
|
48
|
+
|
49
|
+
# back fill disableNormalizePath for S3 until it gets correctly set in the rules
|
50
|
+
if auth_scheme['signingName'] == 's3' &&
|
51
|
+
!auth_scheme.include?('disableNormalizePath') &&
|
52
|
+
auth_scheme.include?('disableDoubleEncoding')
|
53
|
+
auth_scheme['disableNormalizePath'] = auth_scheme['disableDoubleEncoding']
|
54
|
+
end
|
55
|
+
if auth_scheme['name'] == 'sigv4a'
|
56
|
+
# config option supersedes endpoint properties
|
57
|
+
auth_scheme['signingRegionSet'] =
|
58
|
+
config.sigv4a_signing_region_set || auth_scheme['signingRegionSet'] || [config.region]
|
59
|
+
else
|
60
|
+
auth_scheme['signingRegion'] ||= config.region
|
61
|
+
end
|
62
|
+
end
|
63
|
+
auth_scheme
|
64
|
+
end
|
65
|
+
|
66
|
+
def sigv4_name(config)
|
67
|
+
config.api.metadata['signingName'] ||
|
68
|
+
config.api.metadata['endpointPrefix']
|
69
|
+
end
|
70
|
+
|
36
71
|
def default_auth_scheme(context)
|
37
|
-
|
72
|
+
if (auth_list = default_api_auth(context))
|
73
|
+
auth = auth_list.find { |a| SUPPORTED_AUTH_TRAITS.include?(a) }
|
74
|
+
case auth
|
75
|
+
when 'aws.auth#sigv4', 'aws.auth#sigv4a'
|
76
|
+
auth_scheme = { 'name' => auth.split('#').last }
|
77
|
+
if s3_or_s3v4_signature_version?(context)
|
78
|
+
auth_scheme = auth_scheme.merge(
|
79
|
+
'disableDoubleEncoding' => true,
|
80
|
+
'disableNormalizePath' => true
|
81
|
+
)
|
82
|
+
end
|
83
|
+
merge_signing_defaults(auth_scheme, context.config)
|
84
|
+
when 'smithy.api#httpBearerAuth'
|
85
|
+
{ 'name' => 'bearer' }
|
86
|
+
when 'smithy.api#noAuth'
|
87
|
+
{ 'name' => 'none' }
|
88
|
+
else
|
89
|
+
raise 'No supported auth trait for this endpoint.'
|
90
|
+
end
|
91
|
+
else
|
92
|
+
legacy_default_auth_scheme(context)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def default_api_auth(context)
|
97
|
+
context.config.api.operation(context.operation_name)['auth'] ||
|
98
|
+
context.config.api.metadata['auth']
|
99
|
+
end
|
100
|
+
|
101
|
+
def s3_or_s3v4_signature_version?(context)
|
102
|
+
%w[s3 s3v4].include?(context.config.api.metadata['signatureVersion'])
|
103
|
+
end
|
104
|
+
|
105
|
+
# Legacy auth resolution - looks for deprecated signatureVersion
|
106
|
+
# and authType traits.
|
107
|
+
|
108
|
+
def legacy_default_auth_scheme(context)
|
109
|
+
case legacy_default_api_authtype(context)
|
38
110
|
when 'v4', 'v4-unsigned-body'
|
39
111
|
auth_scheme = { 'name' => 'sigv4' }
|
40
112
|
merge_signing_defaults(auth_scheme, context.config)
|
@@ -52,27 +124,11 @@ module Aws
|
|
52
124
|
end
|
53
125
|
end
|
54
126
|
|
55
|
-
def
|
56
|
-
if %w[sigv4 sigv4a sigv4-s3express].include?(auth_scheme['name'])
|
57
|
-
auth_scheme['signingName'] ||= sigv4_name(config)
|
58
|
-
if auth_scheme['name'] == 'sigv4a'
|
59
|
-
auth_scheme['signingRegionSet'] ||= ['*']
|
60
|
-
else
|
61
|
-
auth_scheme['signingRegion'] ||= config.region
|
62
|
-
end
|
63
|
-
end
|
64
|
-
auth_scheme
|
65
|
-
end
|
66
|
-
|
67
|
-
def default_api_authtype(context)
|
127
|
+
def legacy_default_api_authtype(context)
|
68
128
|
context.config.api.operation(context.operation_name)['authtype'] ||
|
69
129
|
context.config.api.metadata['signatureVersion']
|
70
130
|
end
|
71
131
|
|
72
|
-
def sigv4_name(config)
|
73
|
-
config.api.metadata['signingName'] ||
|
74
|
-
config.api.metadata['endpointPrefix']
|
75
|
-
end
|
76
132
|
end
|
77
133
|
end
|
78
134
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
class ErrorHandler < Seahorse::Client::Handler
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def error(context)
|
9
|
+
body = context.http_response.body_contents
|
10
|
+
if body.empty?
|
11
|
+
code, message, data = http_status_error(context)
|
12
|
+
else
|
13
|
+
code, message, data = extract_error(body, context)
|
14
|
+
end
|
15
|
+
build_error(context, code, message, data)
|
16
|
+
end
|
17
|
+
|
18
|
+
def build_error(context, code, message, data)
|
19
|
+
errors_module = context.client.class.errors_module
|
20
|
+
errors_module.error_class(code).new(context, message, data)
|
21
|
+
end
|
22
|
+
|
23
|
+
def http_status_error(context)
|
24
|
+
[http_status_error_code(context), '', EmptyStructure.new]
|
25
|
+
end
|
26
|
+
|
27
|
+
def http_status_error_code(context)
|
28
|
+
status_code = context.http_response.status_code
|
29
|
+
{
|
30
|
+
302 => 'MovedTemporarily',
|
31
|
+
304 => 'NotModified',
|
32
|
+
400 => 'BadRequest',
|
33
|
+
403 => 'Forbidden',
|
34
|
+
404 => 'NotFound',
|
35
|
+
412 => 'PreconditionFailed',
|
36
|
+
413 => 'RequestEntityTooLarge',
|
37
|
+
}[status_code] || "Http#{status_code}Error"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
data/lib/aws-sdk-core/errors.rb
CHANGED
@@ -236,6 +236,15 @@ module Aws
|
|
236
236
|
end
|
237
237
|
end
|
238
238
|
|
239
|
+
# Raised when a client is constructed and the sigv4a region set is invalid.
|
240
|
+
# It is invalid when it is empty and/or contains empty strings.
|
241
|
+
class InvalidRegionSetError < ArgumentError
|
242
|
+
def initialize(*args)
|
243
|
+
msg = 'The provided sigv4a region set was empty or invalid.'
|
244
|
+
super(msg)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
239
248
|
# Raised when a client is contsructed and the region is not valid.
|
240
249
|
class InvalidRegionError < ArgumentError
|
241
250
|
def initialize(*args)
|
@@ -2,10 +2,8 @@
|
|
2
2
|
|
3
3
|
module Aws
|
4
4
|
module Json
|
5
|
-
class ErrorHandler <
|
5
|
+
class ErrorHandler < Aws::ErrorHandler
|
6
6
|
|
7
|
-
# @param [Seahorse::Client::RequestContext] context
|
8
|
-
# @return [Seahorse::Client::Response]
|
9
7
|
def call(context)
|
10
8
|
@handler.call(context).on(300..599) do |response|
|
11
9
|
response.error = error(context)
|
@@ -19,7 +17,7 @@ module Aws
|
|
19
17
|
json = Json.load(body)
|
20
18
|
code = error_code(json, context)
|
21
19
|
message = error_message(code, json)
|
22
|
-
data = parse_error_data(context, code)
|
20
|
+
data = parse_error_data(context, body, code)
|
23
21
|
[code, message, data]
|
24
22
|
rescue Json::ParseError
|
25
23
|
[http_status_error_code(context), '', EmptyStructure.new]
|
@@ -28,7 +26,8 @@ module Aws
|
|
28
26
|
def error_code(json, context)
|
29
27
|
code =
|
30
28
|
if aws_query_error?(context)
|
31
|
-
|
29
|
+
query_header = context.http_response.headers['x-amzn-query-error']
|
30
|
+
error, _type = query_header.split(';') # type not supported
|
32
31
|
remove_prefix(error, context)
|
33
32
|
else
|
34
33
|
json['__type']
|
@@ -48,7 +47,7 @@ module Aws
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def remove_prefix(error_code, context)
|
51
|
-
if prefix = context.config.api.metadata['errorPrefix']
|
50
|
+
if (prefix = context.config.api.metadata['errorPrefix'])
|
52
51
|
error_code.sub(/^#{prefix}/, '')
|
53
52
|
else
|
54
53
|
error_code
|
@@ -63,9 +62,9 @@ module Aws
|
|
63
62
|
end
|
64
63
|
end
|
65
64
|
|
66
|
-
def parse_error_data(context, code)
|
65
|
+
def parse_error_data(context, body, code)
|
67
66
|
data = EmptyStructure.new
|
68
|
-
if error_rules = context.operation.errors
|
67
|
+
if (error_rules = context.operation.errors)
|
69
68
|
error_rules.each do |rule|
|
70
69
|
# match modeled shape name with the type(code) only
|
71
70
|
# some type(code) might contains invalid characters
|
@@ -73,7 +72,7 @@ module Aws
|
|
73
72
|
match = rule.shape.name == code.gsub(/[^^a-zA-Z0-9]/, '')
|
74
73
|
next unless match && rule.shape.members.any?
|
75
74
|
|
76
|
-
data = Parser.new(rule).parse(
|
75
|
+
data = Parser.new(rule).parse(body)
|
77
76
|
# errors support HTTP bindings
|
78
77
|
apply_error_headers(rule, context, data)
|
79
78
|
end
|
@@ -12,8 +12,7 @@ module Aws
|
|
12
12
|
build_request(context)
|
13
13
|
response = @handler.call(context)
|
14
14
|
response.on(200..299) { |resp| parse_response(resp) }
|
15
|
-
response.on(200..599) { |
|
16
|
-
response
|
15
|
+
response.on(200..599) { |_resp| apply_request_id(context) }
|
17
16
|
end
|
18
17
|
|
19
18
|
private
|
@@ -22,6 +21,7 @@ module Aws
|
|
22
21
|
context.http_request.http_method = 'POST'
|
23
22
|
context.http_request.headers['Content-Type'] = content_type(context)
|
24
23
|
context.http_request.headers['X-Amz-Target'] = target(context)
|
24
|
+
context.http_request.headers['X-Amzn-Query-Mode'] = 'true' if query_compatible?(context)
|
25
25
|
context.http_request.body = build_body(context)
|
26
26
|
end
|
27
27
|
|
@@ -38,10 +38,10 @@ module Aws
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def parse_body(context)
|
41
|
+
json = context.http_response.body_contents
|
41
42
|
if simple_json?(context)
|
42
|
-
Json.load(
|
43
|
-
elsif rules = context.operation.output
|
44
|
-
json = context.http_response.body_contents
|
43
|
+
Json.load(json)
|
44
|
+
elsif (rules = context.operation.output)
|
45
45
|
if json.is_a?(Array)
|
46
46
|
# an array of emitted events
|
47
47
|
if json[0].respond_to?(:response)
|
@@ -62,7 +62,7 @@ module Aws
|
|
62
62
|
Parser.new(
|
63
63
|
rules,
|
64
64
|
query_compatible: query_compatible?(context)
|
65
|
-
).parse(json
|
65
|
+
).parse(json)
|
66
66
|
end
|
67
67
|
else
|
68
68
|
EmptyStructure.new
|
@@ -1,10 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'oj'
|
4
|
+
|
3
5
|
module Aws
|
4
6
|
module Json
|
5
7
|
module OjEngine
|
6
8
|
# @api private
|
7
|
-
LOAD_OPTIONS = {
|
9
|
+
LOAD_OPTIONS = {
|
10
|
+
mode: :compat,
|
11
|
+
symbol_keys: false,
|
12
|
+
empty_string: false
|
13
|
+
}.freeze
|
8
14
|
|
9
15
|
# @api private
|
10
16
|
DUMP_OPTIONS = { mode: :compat }.freeze
|
data/lib/aws-sdk-core/json.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'json'
|
4
3
|
require_relative 'json/builder'
|
5
4
|
require_relative 'json/error_handler'
|
6
5
|
require_relative 'json/handler'
|
7
6
|
require_relative 'json/parser'
|
8
|
-
require_relative 'json/json_engine'
|
9
|
-
require_relative 'json/oj_engine'
|
10
7
|
|
11
8
|
module Aws
|
12
9
|
# @api private
|
@@ -21,29 +18,61 @@ module Aws
|
|
21
18
|
end
|
22
19
|
|
23
20
|
class << self
|
24
|
-
|
25
|
-
|
21
|
+
# @param [Symbol,Class] engine
|
22
|
+
# Must be one of the following values:
|
23
|
+
#
|
24
|
+
# * :oj
|
25
|
+
# * :json
|
26
|
+
#
|
27
|
+
def engine=(engine)
|
28
|
+
@engine = Class === engine ? engine : load_engine(engine)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @return [Class] Returns the default engine.
|
32
|
+
# One of:
|
33
|
+
#
|
34
|
+
# * {OjEngine}
|
35
|
+
# * {JsonEngine}
|
36
|
+
#
|
37
|
+
def engine
|
38
|
+
set_default_engine unless @engine
|
39
|
+
@engine
|
26
40
|
end
|
27
41
|
|
28
|
-
def
|
29
|
-
load(
|
42
|
+
def load(json)
|
43
|
+
@engine.load(json)
|
30
44
|
end
|
31
45
|
|
32
46
|
def dump(value)
|
33
|
-
|
47
|
+
@engine.dump(value)
|
48
|
+
end
|
49
|
+
|
50
|
+
def set_default_engine
|
51
|
+
[:oj, :json].each do |name|
|
52
|
+
@engine ||= try_load_engine(name)
|
53
|
+
end
|
54
|
+
unless @engine
|
55
|
+
raise 'Unable to find a compatible json library. ' \
|
56
|
+
'Ensure that you have installed or added to your Gemfile one of ' \
|
57
|
+
'oj or json'
|
58
|
+
end
|
34
59
|
end
|
35
60
|
|
36
61
|
private
|
37
62
|
|
38
|
-
def
|
39
|
-
require
|
40
|
-
|
63
|
+
def load_engine(name)
|
64
|
+
require "aws-sdk-core/json/#{name}_engine"
|
65
|
+
const_name = name[0].upcase + name[1..-1] + 'Engine'
|
66
|
+
const_get(const_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
def try_load_engine(name)
|
70
|
+
load_engine(name)
|
41
71
|
rescue LoadError
|
42
|
-
|
72
|
+
false
|
43
73
|
end
|
44
74
|
end
|
45
75
|
|
46
|
-
|
47
|
-
ENGINE = select_engine
|
76
|
+
set_default_engine
|
48
77
|
end
|
49
78
|
end
|
@@ -55,14 +55,14 @@ module Aws
|
|
55
55
|
filtered[key] = if @enabled && filters.include?(key)
|
56
56
|
'[FILTERED]'
|
57
57
|
else
|
58
|
-
filter(value,
|
58
|
+
filter(value, value.class)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
filtered
|
62
62
|
end
|
63
63
|
|
64
64
|
def filter_array(values, type)
|
65
|
-
values.map { |value| filter(value,
|
65
|
+
values.map { |value| filter(value, value.class) }
|
66
66
|
end
|
67
67
|
|
68
68
|
end
|
@@ -51,13 +51,17 @@ module Aws
|
|
51
51
|
when String then summarize_string(value)
|
52
52
|
when Hash then '{' + summarize_hash(value) + '}'
|
53
53
|
when Array then summarize_array(value)
|
54
|
-
when File then summarize_file(value
|
55
|
-
when Pathname then
|
54
|
+
when File then summarize_file(value)
|
55
|
+
when Pathname then summarize_filepath(value)
|
56
56
|
else value.inspect
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
def summarize_file(
|
60
|
+
def summarize_file(file)
|
61
|
+
"#<File:#{file.path} (#{file.size} bytes)>"
|
62
|
+
end
|
63
|
+
|
64
|
+
def summarize_filepath(path)
|
61
65
|
"#<File:#{path} (#{File.size(path)} bytes)>"
|
62
66
|
end
|
63
67
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Aws
|
4
|
+
# setup autoloading for Log module
|
5
|
+
module Log
|
6
|
+
autoload :Formatter, 'aws-sdk-core/log/formatter'
|
7
|
+
autoload :ParamFilter, 'aws-sdk-core/log/param_filter'
|
8
|
+
autoload :ParamFormatter, 'aws-sdk-core/log/param_formatter'
|
9
|
+
end
|
10
|
+
end
|
@@ -71,7 +71,7 @@ module Aws
|
|
71
71
|
end
|
72
72
|
|
73
73
|
if @validate_required && shape.union
|
74
|
-
set_values =
|
74
|
+
set_values = values.to_h.length
|
75
75
|
if set_values > 1
|
76
76
|
errors << "multiple values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
|
77
77
|
elsif set_values == 0
|
@@ -4,6 +4,8 @@ module Aws
|
|
4
4
|
# @api private
|
5
5
|
module Plugins
|
6
6
|
# @api private
|
7
|
+
# Deprecated - does not look at new traits like `auth` and `unsignedPayload`
|
8
|
+
# Necessary to exist after endpoints 2.0 for old service clients + new core
|
7
9
|
class BearerAuthorization < Seahorse::Client::Plugin
|
8
10
|
|
9
11
|
option(:token_provider,
|