aws-sdk-core 3.46.2 → 3.126.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (206) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1258 -0
  3. data/LICENSE.txt +202 -0
  4. data/VERSION +1 -1
  5. data/lib/aws-defaults/default_configuration.rb +153 -0
  6. data/lib/aws-defaults/defaults_mode_config_resolver.rb +107 -0
  7. data/lib/aws-defaults.rb +3 -0
  8. data/lib/aws-sdk-core/arn.rb +92 -0
  9. data/lib/aws-sdk-core/arn_parser.rb +40 -0
  10. data/lib/aws-sdk-core/assume_role_credentials.rb +20 -0
  11. data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +109 -0
  12. data/lib/aws-sdk-core/async_client_stubs.rb +82 -0
  13. data/lib/aws-sdk-core/binary/decode_handler.rb +11 -1
  14. data/lib/aws-sdk-core/binary/encode_handler.rb +34 -0
  15. data/lib/aws-sdk-core/binary/event_builder.rb +124 -0
  16. data/lib/aws-sdk-core/binary/event_parser.rb +50 -18
  17. data/lib/aws-sdk-core/binary/event_stream_decoder.rb +7 -2
  18. data/lib/aws-sdk-core/binary/event_stream_encoder.rb +55 -0
  19. data/lib/aws-sdk-core/binary.rb +5 -0
  20. data/lib/aws-sdk-core/client_side_monitoring/publisher.rb +11 -1
  21. data/lib/aws-sdk-core/client_side_monitoring/request_metrics.rb +2 -0
  22. data/lib/aws-sdk-core/client_stubs.rb +16 -13
  23. data/lib/aws-sdk-core/credential_provider.rb +1 -30
  24. data/lib/aws-sdk-core/credential_provider_chain.rb +102 -40
  25. data/lib/aws-sdk-core/credentials.rb +2 -0
  26. data/lib/aws-sdk-core/deprecations.rb +17 -11
  27. data/lib/aws-sdk-core/eager_loader.rb +2 -0
  28. data/lib/aws-sdk-core/ec2_metadata.rb +238 -0
  29. data/lib/aws-sdk-core/ecs_credentials.rb +18 -9
  30. data/lib/aws-sdk-core/endpoint_cache.rb +16 -11
  31. data/lib/aws-sdk-core/errors.rb +138 -15
  32. data/lib/aws-sdk-core/event_emitter.rb +44 -0
  33. data/lib/aws-sdk-core/ini_parser.rb +2 -0
  34. data/lib/aws-sdk-core/instance_profile_credentials.rb +179 -42
  35. data/lib/aws-sdk-core/json/builder.rb +2 -0
  36. data/lib/aws-sdk-core/json/error_handler.rb +21 -2
  37. data/lib/aws-sdk-core/json/handler.rb +21 -1
  38. data/lib/aws-sdk-core/json/json_engine.rb +12 -8
  39. data/lib/aws-sdk-core/json/oj_engine.rb +35 -6
  40. data/lib/aws-sdk-core/json/parser.rb +10 -0
  41. data/lib/aws-sdk-core/json.rb +11 -28
  42. data/lib/aws-sdk-core/log/formatter.rb +16 -4
  43. data/lib/aws-sdk-core/log/handler.rb +2 -0
  44. data/lib/aws-sdk-core/log/param_filter.rb +38 -13
  45. data/lib/aws-sdk-core/log/param_formatter.rb +2 -0
  46. data/lib/aws-sdk-core/pageable_response.rb +48 -24
  47. data/lib/aws-sdk-core/pager.rb +5 -0
  48. data/lib/aws-sdk-core/param_converter.rb +2 -0
  49. data/lib/aws-sdk-core/param_validator.rb +63 -7
  50. data/lib/aws-sdk-core/plugins/api_key.rb +5 -1
  51. data/lib/aws-sdk-core/plugins/apig_authorizer_token.rb +2 -0
  52. data/lib/aws-sdk-core/plugins/apig_credentials_configuration.rb +2 -0
  53. data/lib/aws-sdk-core/plugins/apig_user_agent.rb +2 -0
  54. data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +28 -1
  55. data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +2 -0
  56. data/lib/aws-sdk-core/plugins/credentials_configuration.rb +26 -7
  57. data/lib/aws-sdk-core/plugins/defaults_mode.rb +40 -0
  58. data/lib/aws-sdk-core/plugins/endpoint_discovery.rb +12 -4
  59. data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +8 -6
  60. data/lib/aws-sdk-core/plugins/event_stream_configuration.rb +16 -0
  61. data/lib/aws-sdk-core/plugins/global_configuration.rb +2 -0
  62. data/lib/aws-sdk-core/plugins/helpful_socket_errors.rb +2 -0
  63. data/lib/aws-sdk-core/plugins/http_checksum.rb +57 -0
  64. data/lib/aws-sdk-core/plugins/idempotency_token.rb +2 -0
  65. data/lib/aws-sdk-core/plugins/invocation_id.rb +35 -0
  66. data/lib/aws-sdk-core/plugins/jsonvalue_converter.rb +2 -0
  67. data/lib/aws-sdk-core/plugins/logging.rb +2 -0
  68. data/lib/aws-sdk-core/plugins/param_converter.rb +2 -0
  69. data/lib/aws-sdk-core/plugins/param_validator.rb +2 -0
  70. data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +19 -0
  71. data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -0
  72. data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +2 -0
  73. data/lib/aws-sdk-core/plugins/protocols/query.rb +2 -0
  74. data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +18 -1
  75. data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +2 -0
  76. data/lib/aws-sdk-core/plugins/recursion_detection.rb +27 -0
  77. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +74 -16
  78. data/lib/aws-sdk-core/plugins/response_paging.rb +2 -0
  79. data/lib/aws-sdk-core/plugins/retries/client_rate_limiter.rb +139 -0
  80. data/lib/aws-sdk-core/plugins/retries/clock_skew.rb +100 -0
  81. data/lib/aws-sdk-core/plugins/retries/error_inspector.rb +146 -0
  82. data/lib/aws-sdk-core/plugins/retries/retry_quota.rb +59 -0
  83. data/lib/aws-sdk-core/plugins/retry_errors.rb +295 -107
  84. data/lib/aws-sdk-core/plugins/signature_v2.rb +2 -0
  85. data/lib/aws-sdk-core/plugins/signature_v4.rb +28 -25
  86. data/lib/aws-sdk-core/plugins/stub_responses.rb +24 -7
  87. data/lib/aws-sdk-core/plugins/transfer_encoding.rb +53 -0
  88. data/lib/aws-sdk-core/plugins/user_agent.rb +6 -8
  89. data/lib/aws-sdk-core/process_credentials.rb +12 -5
  90. data/lib/aws-sdk-core/query/ec2_param_builder.rb +2 -0
  91. data/lib/aws-sdk-core/query/handler.rb +2 -0
  92. data/lib/aws-sdk-core/query/param.rb +2 -0
  93. data/lib/aws-sdk-core/query/param_builder.rb +2 -0
  94. data/lib/aws-sdk-core/query/param_list.rb +2 -0
  95. data/lib/aws-sdk-core/query.rb +2 -0
  96. data/lib/aws-sdk-core/refreshing_credentials.rb +15 -2
  97. data/lib/aws-sdk-core/resources/collection.rb +2 -0
  98. data/lib/aws-sdk-core/rest/handler.rb +2 -0
  99. data/lib/aws-sdk-core/rest/request/body.rb +21 -1
  100. data/lib/aws-sdk-core/rest/request/builder.rb +2 -0
  101. data/lib/aws-sdk-core/rest/request/endpoint.rb +10 -3
  102. data/lib/aws-sdk-core/rest/request/headers.rb +20 -6
  103. data/lib/aws-sdk-core/rest/request/querystring_builder.rb +4 -2
  104. data/lib/aws-sdk-core/rest/response/body.rb +2 -0
  105. data/lib/aws-sdk-core/rest/response/headers.rb +6 -3
  106. data/lib/aws-sdk-core/rest/response/parser.rb +2 -0
  107. data/lib/aws-sdk-core/rest/response/status_code.rb +2 -0
  108. data/lib/aws-sdk-core/rest.rb +2 -0
  109. data/lib/aws-sdk-core/shared_config.rb +153 -127
  110. data/lib/aws-sdk-core/shared_credentials.rb +9 -1
  111. data/lib/aws-sdk-core/sso_credentials.rb +136 -0
  112. data/lib/aws-sdk-core/structure.rb +14 -4
  113. data/lib/aws-sdk-core/stubbing/data_applicator.rb +2 -0
  114. data/lib/aws-sdk-core/stubbing/empty_stub.rb +2 -0
  115. data/lib/aws-sdk-core/stubbing/protocols/api_gateway.rb +2 -0
  116. data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +2 -0
  117. data/lib/aws-sdk-core/stubbing/protocols/json.rb +3 -1
  118. data/lib/aws-sdk-core/stubbing/protocols/query.rb +4 -2
  119. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +52 -7
  120. data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +3 -1
  121. data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +2 -2
  122. data/lib/aws-sdk-core/stubbing/stub_data.rb +15 -4
  123. data/lib/aws-sdk-core/stubbing/xml_error.rb +2 -0
  124. data/lib/aws-sdk-core/type_builder.rb +2 -0
  125. data/lib/aws-sdk-core/util.rb +6 -0
  126. data/lib/aws-sdk-core/waiters/errors.rb +2 -0
  127. data/lib/aws-sdk-core/waiters/poller.rb +2 -0
  128. data/lib/aws-sdk-core/waiters/waiter.rb +4 -2
  129. data/lib/aws-sdk-core/waiters.rb +2 -0
  130. data/lib/aws-sdk-core/xml/builder.rb +5 -3
  131. data/lib/aws-sdk-core/xml/default_list.rb +2 -0
  132. data/lib/aws-sdk-core/xml/default_map.rb +2 -0
  133. data/lib/aws-sdk-core/xml/doc_builder.rb +15 -4
  134. data/lib/aws-sdk-core/xml/error_handler.rb +29 -4
  135. data/lib/aws-sdk-core/xml/parser/engines/libxml.rb +2 -0
  136. data/lib/aws-sdk-core/xml/parser/engines/nokogiri.rb +2 -0
  137. data/lib/aws-sdk-core/xml/parser/engines/oga.rb +2 -0
  138. data/lib/aws-sdk-core/xml/parser/engines/ox.rb +3 -1
  139. data/lib/aws-sdk-core/xml/parser/engines/rexml.rb +4 -1
  140. data/lib/aws-sdk-core/xml/parser/frame.rb +25 -0
  141. data/lib/aws-sdk-core/xml/parser/parsing_error.rb +2 -0
  142. data/lib/aws-sdk-core/xml/parser/stack.rb +2 -0
  143. data/lib/aws-sdk-core/xml/parser.rb +7 -0
  144. data/lib/aws-sdk-core/xml.rb +2 -0
  145. data/lib/aws-sdk-core.rb +23 -4
  146. data/lib/aws-sdk-sso/client.rb +568 -0
  147. data/lib/aws-sdk-sso/client_api.rb +190 -0
  148. data/lib/aws-sdk-sso/customizations.rb +1 -0
  149. data/lib/aws-sdk-sso/errors.rb +102 -0
  150. data/lib/aws-sdk-sso/resource.rb +26 -0
  151. data/lib/aws-sdk-sso/types.rb +352 -0
  152. data/lib/aws-sdk-sso.rb +55 -0
  153. data/lib/aws-sdk-sts/client.rb +1282 -531
  154. data/lib/aws-sdk-sts/client_api.rb +76 -1
  155. data/lib/aws-sdk-sts/customizations.rb +4 -0
  156. data/lib/aws-sdk-sts/errors.rb +153 -1
  157. data/lib/aws-sdk-sts/plugins/sts_regional_endpoints.rb +38 -0
  158. data/lib/aws-sdk-sts/presigner.rb +75 -0
  159. data/lib/aws-sdk-sts/resource.rb +4 -1
  160. data/lib/aws-sdk-sts/types.rb +958 -229
  161. data/lib/aws-sdk-sts.rb +16 -6
  162. data/lib/seahorse/client/async_base.rb +52 -0
  163. data/lib/seahorse/client/async_response.rb +64 -0
  164. data/lib/seahorse/client/base.rb +7 -2
  165. data/lib/seahorse/client/block_io.rb +6 -2
  166. data/lib/seahorse/client/configuration.rb +7 -1
  167. data/lib/seahorse/client/events.rb +3 -1
  168. data/lib/seahorse/client/h2/connection.rb +250 -0
  169. data/lib/seahorse/client/h2/handler.rb +152 -0
  170. data/lib/seahorse/client/handler.rb +2 -0
  171. data/lib/seahorse/client/handler_builder.rb +2 -0
  172. data/lib/seahorse/client/handler_list.rb +2 -0
  173. data/lib/seahorse/client/handler_list_entry.rb +6 -4
  174. data/lib/seahorse/client/http/async_response.rb +44 -0
  175. data/lib/seahorse/client/http/headers.rb +2 -0
  176. data/lib/seahorse/client/http/request.rb +5 -3
  177. data/lib/seahorse/client/http/response.rb +18 -11
  178. data/lib/seahorse/client/logging/formatter.rb +6 -2
  179. data/lib/seahorse/client/logging/handler.rb +2 -0
  180. data/lib/seahorse/client/managed_file.rb +2 -0
  181. data/lib/seahorse/client/net_http/connection_pool.rb +30 -23
  182. data/lib/seahorse/client/net_http/handler.rb +24 -7
  183. data/lib/seahorse/client/net_http/patches.rb +15 -84
  184. data/lib/seahorse/client/networking_error.rb +30 -0
  185. data/lib/seahorse/client/plugin.rb +10 -7
  186. data/lib/seahorse/client/plugin_list.rb +2 -0
  187. data/lib/seahorse/client/plugins/content_length.rb +14 -3
  188. data/lib/seahorse/client/plugins/endpoint.rb +4 -2
  189. data/lib/seahorse/client/plugins/h2.rb +69 -0
  190. data/lib/seahorse/client/plugins/logging.rb +2 -0
  191. data/lib/seahorse/client/plugins/net_http.rb +39 -3
  192. data/lib/seahorse/client/plugins/operation_methods.rb +2 -0
  193. data/lib/seahorse/client/plugins/raise_response_errors.rb +2 -0
  194. data/lib/seahorse/client/plugins/request_callback.rb +110 -0
  195. data/lib/seahorse/client/plugins/response_target.rb +23 -14
  196. data/lib/seahorse/client/request.rb +2 -0
  197. data/lib/seahorse/client/request_context.rb +2 -0
  198. data/lib/seahorse/client/response.rb +5 -5
  199. data/lib/seahorse/model/api.rb +10 -0
  200. data/lib/seahorse/model/authorizer.rb +2 -0
  201. data/lib/seahorse/model/operation.rb +9 -0
  202. data/lib/seahorse/model/shapes.rb +29 -2
  203. data/lib/seahorse/util.rb +8 -1
  204. data/lib/seahorse/version.rb +2 -0
  205. data/lib/seahorse.rb +12 -0
  206. metadata +64 -14
@@ -1,43 +1,68 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
  require 'set'
3
5
 
4
6
  module Aws
5
7
  module Log
6
8
  class ParamFilter
7
-
9
+ # DEPRECATED - This must exist for backwards compatibility. Sensitive
10
+ # members are now computed for each request/response type. This can be
11
+ # removed in a new major version. This list is no longer updated.
12
+ #
8
13
  # A managed list of sensitive parameters that should be filtered from
9
14
  # logs. This is updated automatically as part of each release. See the
10
- # `tasks/sensitive.rake` for more information.
15
+ # `tasks/update-sensitive-params.rake` for more information.
11
16
  #
12
17
  # @api private
13
18
  # begin
14
- SENSITIVE = [:access_token, :account_name, :account_password, :address, :admin_contact, :artifact_credentials, :auth_code, :authentication_token, :authorization_result, :backup_plan_tags, :backup_vault_tags, :base_32_string_seed, :body, :bot_configuration, :cause, :client_id, :client_secret, :configuration, :copy_source_sse_customer_key, :credentials, :custom_attributes, :db_password, :definition, :description, :display_name, :email, :email_address, :email_message, :embed_url, :error, :feedback_token, :file, :first_name, :id, :id_token, :input, :input_text, :key_id, :key_store_password, :kms_key_id, :kms_master_key_id, :last_name, :local_console_password, :master_account_email, :master_user_password, :message, :name, :new_password, :notes, :old_password, :output, :owner_information, :parameters, :passphrase, :password, :payload, :phone_number, :plaintext, :previous_password, :primary_email, :private_key, :proposed_password, :public_key, :qr_code_png, :query, :recovery_point_tags, :refresh_token, :registrant_contact, :request_attributes, :search_query, :secret_access_key, :secret_binary, :secret_code, :secret_hash, :secret_string, :service_password, :session_attributes, :share_notes, :shared_secret, :slots, :sse_customer_key, :ssekms_key_id, :status_message, :tag_key_list, :tags, :task_parameters, :tech_contact, :temporary_password, :text, :token, :trust_password, :upload_credentials, :upload_url, :user_email, :user_name, :username, :value, :values, :variables, :zip_file]
19
+ SENSITIVE = [:access_token, :account_name, :account_password, :address, :admin_contact, :admin_password, :alexa_for_business_room_arn, :artifact_credentials, :auth_code, :auth_parameters, :authentication_token, :authorization_result, :backup_plan_tags, :backup_vault_tags, :base_32_string_seed, :basic_auth_credentials, :block, :block_address, :block_data, :blocks, :body, :bot_configuration, :bot_email, :calling_name, :cause, :client_id, :client_request_token, :client_secret, :comment, :configuration, :content, :copy_source_sse_customer_key, :credentials, :current_password, :custom_attributes, :custom_private_key, :db_password, :default_phone_number, :definition, :description, :destination_access_token, :digest_tip_address, :display_name, :domain_signing_private_key, :e164_phone_number, :email, :email_address, :email_message, :embed_url, :emergency_phone_number, :error, :external_meeting_id, :external_model_endpoint_data_blobs, :external_user_id, :fall_back_phone_number, :feedback_token, :file, :filter_expression, :first_name, :full_name, :host_key, :id, :id_token, :input, :input_text, :ion_text, :join_token, :key, :key_id, :key_material, :key_store_password, :kms_key_id, :kms_master_key_id, :lambda_function_arn, :last_name, :local_console_password, :master_account_email, :master_user_name, :master_user_password, :meeting_host_id, :message, :metadata, :name, :new_password, :next_password, :notes, :number, :oauth_token, :old_password, :outbound_events_https_endpoint, :output, :owner_information, :parameters, :passphrase, :password, :payload, :phone_number, :plaintext, :previous_password, :primary_email, :primary_provisioned_number, :private_key, :private_key_plaintext, :proof, :proposed_password, :proxy_phone_number, :public_key, :qr_code_png, :query, :random_password, :recovery_point_tags, :refresh_token, :registrant_contact, :request_attributes, :resource_arn, :restore_metadata, :revision, :saml_assertion, :search_query, :secret_access_key, :secret_binary, :secret_code, :secret_hash, :secret_string, :secret_to_authenticate_initiator, :secret_to_authenticate_target, :security_token, :service_password, :session_attributes, :session_token, :share_notes, :shared_secret, :slots, :sns_topic_arn, :source_access_token, :sqs_queue_arn, :sse_customer_key, :ssekms_encryption_context, :ssekms_key_id, :status_message, :tag_key_list, :tags, :target_address, :task_parameters, :tech_contact, :temporary_password, :test_phone_number, :text, :token, :trust_password, :type, :upload_credentials, :upload_url, :uri, :user_data, :user_email, :user_name, :user_password, :username, :value, :values, :variables, :vpn_psk, :web_identity_token, :zip_file]
15
20
  # end
16
21
 
17
22
  def initialize(options = {})
18
- @filters = Set.new(SENSITIVE + Array(options[:filter]))
23
+ @enabled = options[:filter_sensitive_params] != false
24
+ @additional_filters = options[:filter] || []
19
25
  end
20
26
 
21
- def filter(value)
22
- case value
23
- when Struct, Hash then filter_hash(value)
24
- when Array then filter_array(value)
25
- else value
27
+ def filter(values, type)
28
+ case values
29
+ when Struct then filter_struct(values, type)
30
+ when Hash then filter_hash(values, type)
31
+ when Array then filter_array(values, type)
32
+ else values
26
33
  end
27
34
  end
28
35
 
29
36
  private
30
37
 
31
- def filter_hash(values)
38
+ def filter_struct(values, type)
39
+ if values.class.include? Aws::Structure::Union
40
+ values = { values.member => values.value }
41
+ end
42
+ filter_hash(values, type)
43
+ end
44
+
45
+ def filter_hash(values, type)
46
+ if type.const_defined?('SENSITIVE')
47
+ filters = type::SENSITIVE + @additional_filters
48
+ else
49
+ # Support backwards compatibility (new core + old service)
50
+ filters = SENSITIVE + @additional_filters
51
+ end
52
+
32
53
  filtered = {}
33
54
  values.each_pair do |key, value|
34
- filtered[key] = @filters.include?(key) ? '[FILTERED]' : filter(value)
55
+ filtered[key] = if @enabled && filters.include?(key)
56
+ '[FILTERED]'
57
+ else
58
+ filter(value, type)
59
+ end
35
60
  end
36
61
  filtered
37
62
  end
38
63
 
39
- def filter_array(values)
40
- values.map { |value| filter(value) }
64
+ def filter_array(values, type)
65
+ values.map { |value| filter(value, type) }
41
66
  end
42
67
 
43
68
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
 
3
5
  module Aws
@@ -1,38 +1,56 @@
1
- module Aws
1
+ # frozen_string_literal: true
2
2
 
3
- # Decorates a {Seahorse::Client::Response} with paging methods:
4
- #
5
- # resp = s3.list_objects(params)
6
- # resp.last_page?
7
- # #=> false
3
+ module Aws
4
+ # Decorates a {Seahorse::Client::Response} with paging convenience methods.
5
+ # Some AWS calls provide paged responses to limit the amount of data returned
6
+ # with each response. To optimize for latency, some APIs may return an
7
+ # inconsistent number of responses per page. You should rely on the values of
8
+ # the `next_page?` method or using enumerable methods such as `each` rather
9
+ # than the number of items returned to iterate through results. See below for
10
+ # examples.
8
11
  #
9
- # # sends a request to receive the next response page
10
- # resp = resp.next_page
11
- # resp.last_page?
12
- # #=> true
12
+ # @note Methods such as `to_json` will enumerate all of the responses before
13
+ # returning the full response as JSON.
13
14
  #
14
- # resp.next_page
15
- # #=> raises PageableResponse::LastPageError
15
+ # # Paged Responses Are Enumerable
16
+ # The simplest way to handle paged response data is to use the built-in
17
+ # enumerator in the response object, as shown in the following example.
16
18
  #
17
- # You can enumerate all response pages with a block
19
+ # s3 = Aws::S3::Client.new
18
20
  #
19
- # ec2.describe_instances(params).each do |page|
20
- # # yields once per page
21
- # page.reservations.each do |r|
22
- # # ...
23
- # end
21
+ # s3.list_objects(bucket:'aws-sdk').each do |response|
22
+ # puts response.contents.map(&:key)
24
23
  # end
25
24
  #
26
- # Or using {#next_page} and {#last_page?}:
25
+ # This yields one response object per API call made, and enumerates objects
26
+ # in the named bucket. The SDK retrieves additional pages of data to
27
+ # complete the request.
28
+ #
29
+ # # Handling Paged Responses Manually
30
+ # To handle paging yourself, use the response’s `next_page?` method to verify
31
+ # there are more pages to retrieve, or use the last_page? method to verify
32
+ # there are no more pages to retrieve.
33
+ #
34
+ # If there are more pages, use the `next_page` method to retrieve the
35
+ # next page of results, as shown in the following example.
27
36
  #
28
- # resp.last_page?
29
- # resp = resp.next_page until resp.last_page?
37
+ # s3 = Aws::S3::Client.new
38
+ #
39
+ # # Get the first page of data
40
+ # response = s3.list_objects(bucket:'aws-sdk')
41
+ #
42
+ # # Get additional pages
43
+ # while response.next_page? do
44
+ # response = response.next_page
45
+ # # Use the response data here...
46
+ # puts response.contents.map(&:key)
47
+ # end
30
48
  #
31
49
  module PageableResponse
32
50
 
33
51
  def self.extended(base)
34
- base.send(:extend, Enumerable)
35
- base.send(:extend, UnsafeEnumerableMethods)
52
+ base.extend Enumerable
53
+ base.extend UnsafeEnumerableMethods
36
54
  base.instance_variable_set("@last_page", nil)
37
55
  base.instance_variable_set("@more_results", nil)
38
56
  end
@@ -97,7 +115,13 @@ module Aws
97
115
  # @return [Hash] Returns the hash of request parameters for the
98
116
  # next page, merging any given params.
99
117
  def next_page_params(params)
100
- context[:original_params].merge(@pager.next_tokens(self).merge(params))
118
+ # Remove all previous tokens from original params
119
+ # Sometimes a token can be nil and merge would not include it.
120
+ tokens = @pager.tokens.values.map(&:to_sym)
121
+
122
+ params_without_tokens = context[:original_params].reject { |k, _v| tokens.include?(k) }
123
+ params_without_tokens.merge!(@pager.next_tokens(self).merge(params))
124
+ params_without_tokens
101
125
  end
102
126
 
103
127
  # Raised when calling {PageableResponse#next_page} on a pager that
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'jmespath'
2
4
 
3
5
  module Aws
@@ -16,6 +18,9 @@ module Aws
16
18
  # @return [Symbol, nil]
17
19
  attr_reader :limit_key
18
20
 
21
+ # @return [Hash, nil]
22
+ attr_reader :tokens
23
+
19
24
  # @param [Seahorse::Client::Response] response
20
25
  # @return [Hash]
21
26
  def next_tokens(response)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'stringio'
2
4
  require 'date'
3
5
  require 'time'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  # @api private
3
5
  class ParamValidator
@@ -22,6 +24,7 @@ module Aws
22
24
  ShapeRef.new(shape: shape)
23
25
  end
24
26
  @validate_required = options[:validate_required] != false
27
+ @input = options[:input].nil? ? true : !!options[:input]
25
28
  end
26
29
 
27
30
  # @param [Hash] params
@@ -39,6 +42,7 @@ module Aws
39
42
  return unless correct_type?(ref, values, errors, context)
40
43
 
41
44
  if ref.eventstream
45
+ # input eventstream is provided from event signals
42
46
  values.each do |value|
43
47
  # each event is structure type
44
48
  case value[:message_type]
@@ -58,13 +62,22 @@ module Aws
58
62
  # ensure required members are present
59
63
  if @validate_required
60
64
  shape.required.each do |member_name|
61
- if values[member_name].nil?
65
+ input_eventstream = ref.shape.member(member_name).eventstream && @input
66
+ if values[member_name].nil? && !input_eventstream
62
67
  param = "#{context}[#{member_name.inspect}]"
63
68
  errors << "missing required parameter #{param}"
64
69
  end
65
70
  end
66
71
  end
67
72
 
73
+ if @validate_required && shape.union
74
+ if values.length > 1
75
+ errors << "multiple values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
76
+ elsif values.length == 0
77
+ errors << "No values provided to union at #{context} - must contain exactly one of the supported types: #{shape.member_names.join(', ')}"
78
+ end
79
+ end
80
+
68
81
  # validate non-nil members
69
82
  values.each_pair do |name, value|
70
83
  unless value.nil?
@@ -112,11 +125,32 @@ module Aws
112
125
  end
113
126
  end
114
127
 
128
+ def document(ref, value, errors, context)
129
+ document_types = [Hash, Array, Numeric, String, TrueClass, FalseClass, NilClass]
130
+ unless document_types.any? { |t| value.is_a?(t) }
131
+ errors << expected_got(context, "one of #{document_types.join(', ')}", value)
132
+ end
133
+
134
+ # recursively validate types for aggregated types
135
+ case value
136
+ when Hash
137
+ value.each do |k, v|
138
+ document(ref, v, errors, context + "[#{k}]")
139
+ end
140
+ when Array
141
+ value.each do |v|
142
+ document(ref, v, errors, context)
143
+ end
144
+ end
145
+
146
+ end
147
+
115
148
  def shape(ref, value, errors, context)
116
149
  case ref.shape
117
150
  when StructureShape then structure(ref, value, errors, context)
118
151
  when ListShape then list(ref, value, errors, context)
119
152
  when MapShape then map(ref, value, errors, context)
153
+ when DocumentShape then document(ref, value, errors, context)
120
154
  when StringShape
121
155
  unless value.is_a?(String)
122
156
  errors << expected_got(context, "a String", value)
@@ -138,8 +172,22 @@ module Aws
138
172
  errors << expected_got(context, "true or false", value)
139
173
  end
140
174
  when BlobShape
141
- unless io_like?(value) or value.is_a?(String)
142
- errors << expected_got(context, "a String or IO object", value)
175
+ unless value.is_a?(String)
176
+ if streaming_input?(ref)
177
+ unless io_like?(value, _require_size = false)
178
+ errors << expected_got(
179
+ context,
180
+ "a String or IO like object that supports read and rewind",
181
+ value
182
+ )
183
+ end
184
+ elsif !io_like?(value, _require_size = true)
185
+ errors << expected_got(
186
+ context,
187
+ "a String or IO like object that supports read, rewind, and size",
188
+ value
189
+ )
190
+ end
143
191
  end
144
192
  else
145
193
  raise "unhandled shape type: #{ref.shape.class.name}"
@@ -147,6 +195,11 @@ module Aws
147
195
  end
148
196
 
149
197
  def correct_type?(ref, value, errors, context)
198
+ if ref.eventstream && @input
199
+ errors << "instead of providing value directly for eventstreams at input,"\
200
+ " expected to use #signal events per stream"
201
+ return false
202
+ end
150
203
  case value
151
204
  when Hash then true
152
205
  when ref.shape.struct_class then true
@@ -157,10 +210,13 @@ module Aws
157
210
  end
158
211
  end
159
212
 
160
- def io_like?(value)
161
- value.respond_to?(:read) &&
162
- value.respond_to?(:rewind) &&
163
- value.respond_to?(:size)
213
+ def io_like?(value, require_size = true)
214
+ value.respond_to?(:read) && value.respond_to?(:rewind) &&
215
+ (!require_size || value.respond_to?(:size))
216
+ end
217
+
218
+ def streaming_input?(ref)
219
+ (ref["streaming"] || ref.shape["streaming"])
164
220
  end
165
221
 
166
222
  def error_messages(errors)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
 
@@ -21,7 +23,9 @@ When provided, `x-api-key` header will be injected with the value provided.
21
23
  class OptionHandler < Seahorse::Client::Handler
22
24
  def call(context)
23
25
  if context.operation.require_apikey
24
- api_key = context.params.delete(:api_key)
26
+ if context.params.is_a?(Hash) && context.params[:api_key]
27
+ api_key = context.params.delete(:api_key)
28
+ end
25
29
  api_key = context.config.api_key if api_key.nil?
26
30
  context[:api_key] = api_key
27
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  # @api private
3
5
  module Plugins
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
  # @api private
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
4
+ require_relative 'retries/error_inspector'
2
5
 
3
6
  module Aws
4
7
  module Plugins
@@ -24,6 +27,16 @@ agent is running on, where client metrics will be published via UDP.
24
27
  resolve_client_side_monitoring_port(cfg)
25
28
  end
26
29
 
30
+ option(:client_side_monitoring_host,
31
+ default: "127.0.0.1",
32
+ doc_type: String,
33
+ docstring: <<-DOCS) do |cfg|
34
+ Allows you to specify the DNS hostname or IPv4 or IPv6 address that the client
35
+ side monitoring agent is running on, where client metrics will be published via UDP.
36
+ DOCS
37
+ resolve_client_side_monitoring_host(cfg)
38
+ end
39
+
27
40
  option(:client_side_monitoring_publisher,
28
41
  default: ClientSideMonitoring::Publisher,
29
42
  doc_type: Aws::ClientSideMonitoring::Publisher,
@@ -49,6 +62,7 @@ all generated client side metrics. Defaults to an empty string.
49
62
  handlers.add(Handler, step: :initialize)
50
63
  publisher = config.client_side_monitoring_publisher
51
64
  publisher.agent_port = config.client_side_monitoring_port
65
+ publisher.agent_host = config.client_side_monitoring_host
52
66
  end
53
67
  end
54
68
 
@@ -70,6 +84,19 @@ all generated client side metrics. Defaults to an empty string.
70
84
  end
71
85
  end
72
86
 
87
+ def self.resolve_client_side_monitoring_host(cfg)
88
+ env_source = ENV["AWS_CSM_HOST"]
89
+ env_source = nil if env_source == ""
90
+ cfg_source = Aws.shared_config.csm_host(profile: cfg.profile)
91
+ if env_source
92
+ env_source
93
+ elsif cfg_source
94
+ cfg_source
95
+ else
96
+ "127.0.0.1"
97
+ end
98
+ end
99
+
73
100
  def self.resolve_client_side_monitoring(cfg)
74
101
  env_source = ENV["AWS_CSM_ENABLED"]
75
102
  env_source = nil if env_source == ""
@@ -117,7 +144,7 @@ all generated client side metrics. Defaults to an empty string.
117
144
  @handler.call(context)
118
145
  rescue StandardError => e
119
146
  # Handle SDK Exceptions
120
- inspector = Aws::Plugins::RetryErrors::ErrorInspector.new(
147
+ inspector = Retries::ErrorInspector.new(
121
148
  e,
122
149
  context.http_response.status_code
123
150
  )
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
 
3
5
  module Aws
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  # @api private
3
5
  module Plugins
@@ -28,13 +30,28 @@ following classes:
28
30
  * `Aws::Credentials` - Used for configuring static, non-refreshing
29
31
  credentials.
30
32
 
33
+ * `Aws::SharedCredentials` - Used for loading static credentials from a
34
+ shared file, such as `~/.aws/config`.
35
+
36
+ * `Aws::AssumeRoleCredentials` - Used when you need to assume a role.
37
+
38
+ * `Aws::AssumeRoleWebIdentityCredentials` - Used when you need to
39
+ assume a role after providing credentials via the web.
40
+
41
+ * `Aws::SSOCredentials` - Used for loading credentials from AWS SSO using an
42
+ access token generated from `aws login`.
43
+
44
+ * `Aws::ProcessCredentials` - Used for loading credentials from a
45
+ process that outputs to stdout.
46
+
31
47
  * `Aws::InstanceProfileCredentials` - Used for loading credentials
32
48
  from an EC2 IMDS on an EC2 instance.
33
49
 
34
- * `Aws::SharedCredentials` - Used for loading credentials from a
35
- shared file, such as `~/.aws/config`.
50
+ * `Aws::ECSCredentials` - Used for loading credentials from
51
+ instances running in ECS.
36
52
 
37
- * `Aws::AssumeRoleCredentials` - Used when you need to assume a role.
53
+ * `Aws::CognitoIdentityCredentials` - Used for loading credentials
54
+ from the Cognito Identity service.
38
55
 
39
56
  When `:credentials` are not configured directly, the following
40
57
  locations will be searched for credentials:
@@ -44,10 +61,12 @@ locations will be searched for credentials:
44
61
  * ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']
45
62
  * `~/.aws/credentials`
46
63
  * `~/.aws/config`
47
- * EC2 IMDS instance profile - When used by default, the timeouts are
48
- very aggressive. Construct and pass an instance of
49
- `Aws::InstanceProfileCredentails` to enable retries and extended
50
- timeouts.
64
+ * EC2/ECS IMDS instance profile - When used by default, the timeouts
65
+ are very aggressive. Construct and pass an instance of
66
+ `Aws::InstanceProfileCredentails` or `Aws::ECSCredentials` to
67
+ enable retries and extended timeouts. Instance profile credential
68
+ fetching can be disabled by setting ENV['AWS_EC2_METADATA_DISABLED']
69
+ to true.
51
70
  DOCS
52
71
  ) do |config|
53
72
  CredentialProviderChain.new(config).resolve
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ # @api private
5
+ module Plugins
6
+ # @api private
7
+ class DefaultsMode < Seahorse::Client::Plugin
8
+
9
+ option(:defaults_mode,
10
+ default: 'legacy',
11
+ doc_type: String,
12
+ docstring: <<-DOCS
13
+ See {Aws::DefaultsModeConfiguration} for a list of the
14
+ accepted modes and the configuration defaults that are included.
15
+ DOCS
16
+ ) do |cfg|
17
+ resolve_defaults_mode(cfg)
18
+ end
19
+
20
+ option(:defaults_mode_config_resolver,
21
+ doc_type: 'Aws::DefaultsModeConfigResolver') do |cfg|
22
+ Aws::DefaultsModeConfigResolver.new(
23
+ Aws::DefaultsModeConfiguration::SDK_DEFAULT_CONFIGURATION, cfg)
24
+ end
25
+
26
+ class << self
27
+ private
28
+
29
+ def resolve_defaults_mode(cfg)
30
+ value = ENV['AWS_DEFAULTS_MODE']
31
+ value ||= Aws.shared_config.defaults_mode(
32
+ profile: cfg.profile
33
+ )
34
+ value&.downcase || "legacy"
35
+ end
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
  # @api private
4
6
  class EndpointDiscovery < Seahorse::Client::Plugin
5
7
 
6
8
  option(:endpoint_discovery,
7
- default: false,
9
+ doc_default: Proc.new { |options| options[:require_endpoint_discovery] },
8
10
  doc_type: 'Boolean',
9
11
  docstring: <<-DOCS) do |cfg|
10
- When set to `true`, endpoint discovery will be enabled for operations when available. Defaults to `false`.
12
+ When set to `true`, endpoint discovery will be enabled for operations when available.
11
13
  DOCS
12
14
  resolve_endpoint_discovery(cfg)
13
15
  end
@@ -102,6 +104,10 @@ the background every 60 secs (default). Defaults to `false`.
102
104
  key = cache.extract_key(ctx)
103
105
 
104
106
  if required
107
+ unless ctx.config.endpoint_discovery
108
+ raise ArgumentError, "Operation #{ctx.operation.name} requires "\
109
+ 'endpoint_discovery to be enabled.'
110
+ end
105
111
  # required for the operation
106
112
  unless cache.key?(key)
107
113
  cache.update(key, ctx)
@@ -151,8 +157,10 @@ the background every 60 secs (default). Defaults to `false`.
151
157
 
152
158
  def self.resolve_endpoint_discovery(cfg)
153
159
  env = ENV['AWS_ENABLE_ENDPOINT_DISCOVERY']
154
- shared_cfg = Aws.shared_config.endpoint_discovery(profile: cfg.profile)
155
- Aws::Util.str_2_bool(env) || Aws::Util.str_2_bool(shared_cfg)
160
+ default = cfg.api.require_endpoint_discovery
161
+ shared_cfg = Aws.shared_config.endpoint_discovery_enabled(profile: cfg.profile)
162
+ resolved = Aws::Util.str_2_bool(env) || Aws::Util.str_2_bool(shared_cfg)
163
+ env.nil? && shared_cfg.nil? ? default : !!resolved
156
164
  end
157
165
 
158
166
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
  # @api private
@@ -13,17 +15,17 @@ to default service endpoint when available.
13
15
  )
14
16
 
15
17
  def add_handlers(handlers, config)
16
- if config.regional_endpoint && !config.disable_host_prefix_injection
17
- handlers.add(Handler, priority: 90)
18
- end
18
+ handlers.add(Handler, priority: 10)
19
19
  end
20
20
 
21
21
  class Handler < Seahorse::Client::Handler
22
22
 
23
23
  def call(context)
24
- endpoint_trait = context.operation.endpoint_pattern
25
- if endpoint_trait && !endpoint_trait.empty?
26
- _apply_endpoint_trait(context, endpoint_trait)
24
+ if !context.config.disable_host_prefix_injection
25
+ endpoint_trait = context.operation.endpoint_pattern
26
+ if endpoint_trait && !endpoint_trait.empty?
27
+ _apply_endpoint_trait(context, endpoint_trait)
28
+ end
27
29
  end
28
30
  @handler.call(context)
29
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
 
@@ -10,6 +12,20 @@ module Aws
10
12
  When an EventStream or Proc object is provided, it will be used as callback for each chunk of event stream response received along the way.
11
13
  DOCS
12
14
 
15
+ option(:input_event_stream_handler,
16
+ default: nil,
17
+ doc_type: 'Proc',
18
+ docstring: <<-DOCS)
19
+ When an EventStream or Proc object is provided, it can be used for sending events for the event stream.
20
+ DOCS
21
+
22
+ option(:output_event_stream_handler,
23
+ default: nil,
24
+ doc_type: 'Proc',
25
+ docstring: <<-DOCS)
26
+ When an EventStream or Proc object is provided, it will be used as callback for each chunk of event stream response received along the way.
27
+ DOCS
28
+
13
29
  end
14
30
 
15
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'set'
2
4
 
3
5
  module Aws
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Aws
2
4
  module Plugins
3
5
  # @api private