aws-sdk-appflow 1.28.0 → 1.30.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69f0934da037fc9f5300a97e0cde240614cca8106e76556b67ce47aa4724c27d
4
- data.tar.gz: d1e4385cca3d5471c8bcac97719d0b9e5f3a10bc84890cb7c61bdbf6a132971d
3
+ metadata.gz: 957ffd1d2b407f7410aa1554e0e3ff5f36dcef3f5b61f8c443094b9068747b13
4
+ data.tar.gz: 581cd0255b3dfa2c2ec733f5756e6116514ae9e25a2b5a0fd324569949cccf07
5
5
  SHA512:
6
- metadata.gz: '0538ecd074aa0f5a142fcf0ac55c218bd399396981d2c3507179d1773c174551be68d5aa53c599e244097fc6ee45e43572793d45311e60ce51ed9bbb11ed2e9e'
7
- data.tar.gz: b040a98eaf501afa752a8415feb7b0341e124d2c7406331d2b2ce0a25100293c946d57a43fa47ed60d169be7242e763d4b54bd86aa69aefb3ebe4307572320ed
6
+ metadata.gz: 67ea05bb9666646427a1c6bdbdc38a443bd830680215583c315fe6f7057fc0cff9a4c0bf284a6207a922c28e5ea80cc91bedb5158a5a1c3741fb6f48274e3616
7
+ data.tar.gz: d06488ad04059c1ec3e2ea270fc62fc322477fc88712a3d40bb1097cccc85e1d74e654531eb07e0c6ff9b0ce3d15fe54ba01a0fb9fd17b0bf3d200f3ba1c6c9f
data/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Unreleased Changes
2
2
  ------------------
3
3
 
4
+ 1.30.0 (2022-11-17)
5
+ ------------------
6
+
7
+ * Feature - AppFlow simplifies the preparation and cataloging of SaaS data into the AWS Glue Data Catalog where your data can be discovered and accessed by AWS analytics and ML services. AppFlow now also supports data field partitioning and file size optimization to improve query performance and reduce cost.
8
+
9
+ 1.29.0 (2022-10-25)
10
+ ------------------
11
+
12
+ * Feature - Code Generated Changes, see `./build_tools` or `aws-sdk-core`'s CHANGELOG.md for details.
13
+
4
14
  1.28.0 (2022-10-13)
5
15
  ------------------
6
16
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.28.0
1
+ 1.30.0
@@ -30,7 +30,7 @@ require 'aws-sdk-core/plugins/http_checksum.rb'
30
30
  require 'aws-sdk-core/plugins/checksum_algorithm.rb'
31
31
  require 'aws-sdk-core/plugins/defaults_mode.rb'
32
32
  require 'aws-sdk-core/plugins/recursion_detection.rb'
33
- require 'aws-sdk-core/plugins/signature_v4.rb'
33
+ require 'aws-sdk-core/plugins/sign.rb'
34
34
  require 'aws-sdk-core/plugins/protocols/rest_json.rb'
35
35
 
36
36
  Aws::Plugins::GlobalConfiguration.add_identifier(:appflow)
@@ -79,8 +79,9 @@ module Aws::Appflow
79
79
  add_plugin(Aws::Plugins::ChecksumAlgorithm)
80
80
  add_plugin(Aws::Plugins::DefaultsMode)
81
81
  add_plugin(Aws::Plugins::RecursionDetection)
82
- add_plugin(Aws::Plugins::SignatureV4)
82
+ add_plugin(Aws::Plugins::Sign)
83
83
  add_plugin(Aws::Plugins::Protocols::RestJson)
84
+ add_plugin(Aws::Appflow::Plugins::Endpoints)
84
85
 
85
86
  # @overload initialize(options)
86
87
  # @param [Hash] options
@@ -287,6 +288,19 @@ module Aws::Appflow
287
288
  # ** Please note ** When response stubbing is enabled, no HTTP
288
289
  # requests are made, and retries are disabled.
289
290
  #
291
+ # @option options [Aws::TokenProvider] :token_provider
292
+ # A Bearer Token Provider. This can be an instance of any one of the
293
+ # following classes:
294
+ #
295
+ # * `Aws::StaticTokenProvider` - Used for configuring static, non-refreshing
296
+ # tokens.
297
+ #
298
+ # * `Aws::SSOTokenProvider` - Used for loading tokens from AWS SSO using an
299
+ # access token generated from `aws login`.
300
+ #
301
+ # When `:token_provider` is not configured directly, the `Aws::TokenProviderChain`
302
+ # will be used to search for tokens configured for your profile in shared configuration files.
303
+ #
290
304
  # @option options [Boolean] :use_dualstack_endpoint
291
305
  # When set to `true`, dualstack enabled endpoints (with `.aws` TLD)
292
306
  # will be used if available.
@@ -300,6 +314,9 @@ module Aws::Appflow
300
314
  # When `true`, request parameters are validated before
301
315
  # sending the request.
302
316
  #
317
+ # @option options [Aws::Appflow::EndpointProvider] :endpoint_provider
318
+ # The endpoint provider used to resolve endpoints. Any object that responds to `#resolve_endpoint(parameters)` where `parameters` is a Struct similar to `Aws::Appflow::EndpointParameters`
319
+ #
303
320
  # @option options [URI::HTTP,String] :http_proxy A proxy to send
304
321
  # requests through. Formatted like 'http://proxy.com:123'.
305
322
  #
@@ -671,6 +688,12 @@ module Aws::Appflow
671
688
  # @option params [Hash<String,String>] :tags
672
689
  # The tags used to organize, track, or control access for your flow.
673
690
  #
691
+ # @option params [Types::MetadataCatalogConfig] :metadata_catalog_config
692
+ # Specifies the configuration that Amazon AppFlow uses when it catalogs
693
+ # the data that's transferred by the associated flow. When Amazon
694
+ # AppFlow catalogs the data from a flow, it stores metadata in a data
695
+ # catalog.
696
+ #
674
697
  # @return [Types::CreateFlowResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
675
698
  #
676
699
  # * {Types::CreateFlowResponse#flow_arn #flow_arn} => String
@@ -793,9 +816,11 @@ module Aws::Appflow
793
816
  # prefix_config: {
794
817
  # prefix_type: "FILENAME", # accepts FILENAME, PATH, PATH_AND_FILENAME
795
818
  # prefix_format: "YEAR", # accepts YEAR, MONTH, DAY, HOUR, MINUTE
819
+ # path_prefix_hierarchy: ["EXECUTION_ID"], # accepts EXECUTION_ID, SCHEMA_VERSION
796
820
  # },
797
821
  # aggregation_config: {
798
822
  # aggregation_type: "None", # accepts None, SingleFile
823
+ # target_file_size: 1,
799
824
  # },
800
825
  # preserve_source_data_typing: false,
801
826
  # },
@@ -839,9 +864,11 @@ module Aws::Appflow
839
864
  # prefix_config: { # required
840
865
  # prefix_type: "FILENAME", # accepts FILENAME, PATH, PATH_AND_FILENAME
841
866
  # prefix_format: "YEAR", # accepts YEAR, MONTH, DAY, HOUR, MINUTE
867
+ # path_prefix_hierarchy: ["EXECUTION_ID"], # accepts EXECUTION_ID, SCHEMA_VERSION
842
868
  # },
843
869
  # aggregation_config: {
844
870
  # aggregation_type: "None", # accepts None, SingleFile
871
+ # target_file_size: 1,
845
872
  # },
846
873
  # },
847
874
  # },
@@ -927,7 +954,7 @@ module Aws::Appflow
927
954
  # custom_connector: "PROJECTION", # accepts PROJECTION, LESS_THAN, GREATER_THAN, CONTAINS, BETWEEN, LESS_THAN_OR_EQUAL_TO, GREATER_THAN_OR_EQUAL_TO, EQUAL_TO, NOT_EQUAL_TO, ADDITION, MULTIPLICATION, DIVISION, SUBTRACTION, MASK_ALL, MASK_FIRST_N, MASK_LAST_N, VALIDATE_NON_NULL, VALIDATE_NON_ZERO, VALIDATE_NON_NEGATIVE, VALIDATE_NUMERIC, NO_OP
928
955
  # },
929
956
  # destination_field: "DestinationField",
930
- # task_type: "Arithmetic", # required, accepts Arithmetic, Filter, Map, Map_all, Mask, Merge, Passthrough, Truncate, Validate
957
+ # task_type: "Arithmetic", # required, accepts Arithmetic, Filter, Map, Map_all, Mask, Merge, Passthrough, Truncate, Validate, Partition
931
958
  # task_properties: {
932
959
  # "VALUE" => "Property",
933
960
  # },
@@ -936,6 +963,13 @@ module Aws::Appflow
936
963
  # tags: {
937
964
  # "TagKey" => "TagValue",
938
965
  # },
966
+ # metadata_catalog_config: {
967
+ # glue_data_catalog: {
968
+ # role_arn: "GlueDataCatalogIAMRole", # required
969
+ # database_name: "GlueDataCatalogDatabaseName", # required
970
+ # table_prefix: "GlueDataCatalogTablePrefix", # required
971
+ # },
972
+ # },
939
973
  # })
940
974
  #
941
975
  # @example Response structure
@@ -1479,6 +1513,9 @@ module Aws::Appflow
1479
1513
  # * {Types::DescribeFlowResponse#created_by #created_by} => String
1480
1514
  # * {Types::DescribeFlowResponse#last_updated_by #last_updated_by} => String
1481
1515
  # * {Types::DescribeFlowResponse#tags #tags} => Hash&lt;String,String&gt;
1516
+ # * {Types::DescribeFlowResponse#metadata_catalog_config #metadata_catalog_config} => Types::MetadataCatalogConfig
1517
+ # * {Types::DescribeFlowResponse#last_run_metadata_catalog_details #last_run_metadata_catalog_details} => Array&lt;Types::MetadataCatalogDetail&gt;
1518
+ # * {Types::DescribeFlowResponse#schema_version #schema_version} => Integer
1482
1519
  #
1483
1520
  # @example Request syntax with placeholder values
1484
1521
  #
@@ -1540,7 +1577,10 @@ module Aws::Appflow
1540
1577
  # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.file_type #=> String, one of "CSV", "JSON", "PARQUET"
1541
1578
  # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.prefix_config.prefix_type #=> String, one of "FILENAME", "PATH", "PATH_AND_FILENAME"
1542
1579
  # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.prefix_config.prefix_format #=> String, one of "YEAR", "MONTH", "DAY", "HOUR", "MINUTE"
1580
+ # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.prefix_config.path_prefix_hierarchy #=> Array
1581
+ # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.prefix_config.path_prefix_hierarchy[0] #=> String, one of "EXECUTION_ID", "SCHEMA_VERSION"
1543
1582
  # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.aggregation_config.aggregation_type #=> String, one of "None", "SingleFile"
1583
+ # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.aggregation_config.target_file_size #=> Integer
1544
1584
  # resp.destination_flow_config_list[0].destination_connector_properties.s3.s3_output_format_config.preserve_source_data_typing #=> Boolean
1545
1585
  # resp.destination_flow_config_list[0].destination_connector_properties.salesforce.object #=> String
1546
1586
  # resp.destination_flow_config_list[0].destination_connector_properties.salesforce.id_field_names #=> Array
@@ -1565,7 +1605,10 @@ module Aws::Appflow
1565
1605
  # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.file_type #=> String, one of "CSV", "JSON", "PARQUET"
1566
1606
  # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.prefix_config.prefix_type #=> String, one of "FILENAME", "PATH", "PATH_AND_FILENAME"
1567
1607
  # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.prefix_config.prefix_format #=> String, one of "YEAR", "MONTH", "DAY", "HOUR", "MINUTE"
1608
+ # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.prefix_config.path_prefix_hierarchy #=> Array
1609
+ # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.prefix_config.path_prefix_hierarchy[0] #=> String, one of "EXECUTION_ID", "SCHEMA_VERSION"
1568
1610
  # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.aggregation_config.aggregation_type #=> String, one of "None", "SingleFile"
1611
+ # resp.destination_flow_config_list[0].destination_connector_properties.upsolver.s3_output_format_config.aggregation_config.target_file_size #=> Integer
1569
1612
  # resp.destination_flow_config_list[0].destination_connector_properties.honeycode.object #=> String
1570
1613
  # resp.destination_flow_config_list[0].destination_connector_properties.honeycode.error_handling_config.fail_on_first_destination_error #=> Boolean
1571
1614
  # resp.destination_flow_config_list[0].destination_connector_properties.honeycode.error_handling_config.bucket_prefix #=> String
@@ -1633,7 +1676,7 @@ module Aws::Appflow
1633
1676
  # resp.tasks[0].connector_operator.sapo_data #=> String, one of "PROJECTION", "LESS_THAN", "CONTAINS", "GREATER_THAN", "BETWEEN", "LESS_THAN_OR_EQUAL_TO", "GREATER_THAN_OR_EQUAL_TO", "EQUAL_TO", "NOT_EQUAL_TO", "ADDITION", "MULTIPLICATION", "DIVISION", "SUBTRACTION", "MASK_ALL", "MASK_FIRST_N", "MASK_LAST_N", "VALIDATE_NON_NULL", "VALIDATE_NON_ZERO", "VALIDATE_NON_NEGATIVE", "VALIDATE_NUMERIC", "NO_OP"
1634
1677
  # resp.tasks[0].connector_operator.custom_connector #=> String, one of "PROJECTION", "LESS_THAN", "GREATER_THAN", "CONTAINS", "BETWEEN", "LESS_THAN_OR_EQUAL_TO", "GREATER_THAN_OR_EQUAL_TO", "EQUAL_TO", "NOT_EQUAL_TO", "ADDITION", "MULTIPLICATION", "DIVISION", "SUBTRACTION", "MASK_ALL", "MASK_FIRST_N", "MASK_LAST_N", "VALIDATE_NON_NULL", "VALIDATE_NON_ZERO", "VALIDATE_NON_NEGATIVE", "VALIDATE_NUMERIC", "NO_OP"
1635
1678
  # resp.tasks[0].destination_field #=> String
1636
- # resp.tasks[0].task_type #=> String, one of "Arithmetic", "Filter", "Map", "Map_all", "Mask", "Merge", "Passthrough", "Truncate", "Validate"
1679
+ # resp.tasks[0].task_type #=> String, one of "Arithmetic", "Filter", "Map", "Map_all", "Mask", "Merge", "Passthrough", "Truncate", "Validate", "Partition"
1637
1680
  # resp.tasks[0].task_properties #=> Hash
1638
1681
  # resp.tasks[0].task_properties["OperatorPropertiesKeys"] #=> String
1639
1682
  # resp.created_at #=> Time
@@ -1642,6 +1685,19 @@ module Aws::Appflow
1642
1685
  # resp.last_updated_by #=> String
1643
1686
  # resp.tags #=> Hash
1644
1687
  # resp.tags["TagKey"] #=> String
1688
+ # resp.metadata_catalog_config.glue_data_catalog.role_arn #=> String
1689
+ # resp.metadata_catalog_config.glue_data_catalog.database_name #=> String
1690
+ # resp.metadata_catalog_config.glue_data_catalog.table_prefix #=> String
1691
+ # resp.last_run_metadata_catalog_details #=> Array
1692
+ # resp.last_run_metadata_catalog_details[0].catalog_type #=> String, one of "GLUE"
1693
+ # resp.last_run_metadata_catalog_details[0].table_name #=> String
1694
+ # resp.last_run_metadata_catalog_details[0].table_registration_output.message #=> String
1695
+ # resp.last_run_metadata_catalog_details[0].table_registration_output.result #=> String
1696
+ # resp.last_run_metadata_catalog_details[0].table_registration_output.status #=> String, one of "InProgress", "Successful", "Error"
1697
+ # resp.last_run_metadata_catalog_details[0].partition_registration_output.message #=> String
1698
+ # resp.last_run_metadata_catalog_details[0].partition_registration_output.result #=> String
1699
+ # resp.last_run_metadata_catalog_details[0].partition_registration_output.status #=> String, one of "InProgress", "Successful", "Error"
1700
+ # resp.schema_version #=> Integer
1645
1701
  #
1646
1702
  # @see http://docs.aws.amazon.com/goto/WebAPI/appflow-2020-08-23/DescribeFlow AWS API Documentation
1647
1703
  #
@@ -1695,6 +1751,15 @@ module Aws::Appflow
1695
1751
  # resp.flow_executions[0].last_updated_at #=> Time
1696
1752
  # resp.flow_executions[0].data_pull_start_time #=> Time
1697
1753
  # resp.flow_executions[0].data_pull_end_time #=> Time
1754
+ # resp.flow_executions[0].metadata_catalog_details #=> Array
1755
+ # resp.flow_executions[0].metadata_catalog_details[0].catalog_type #=> String, one of "GLUE"
1756
+ # resp.flow_executions[0].metadata_catalog_details[0].table_name #=> String
1757
+ # resp.flow_executions[0].metadata_catalog_details[0].table_registration_output.message #=> String
1758
+ # resp.flow_executions[0].metadata_catalog_details[0].table_registration_output.result #=> String
1759
+ # resp.flow_executions[0].metadata_catalog_details[0].table_registration_output.status #=> String, one of "InProgress", "Successful", "Error"
1760
+ # resp.flow_executions[0].metadata_catalog_details[0].partition_registration_output.message #=> String
1761
+ # resp.flow_executions[0].metadata_catalog_details[0].partition_registration_output.result #=> String
1762
+ # resp.flow_executions[0].metadata_catalog_details[0].partition_registration_output.status #=> String, one of "InProgress", "Successful", "Error"
1698
1763
  # resp.next_token #=> String
1699
1764
  #
1700
1765
  # @see http://docs.aws.amazon.com/goto/WebAPI/appflow-2020-08-23/DescribeFlowExecutionRecords AWS API Documentation
@@ -2378,6 +2443,12 @@ module Aws::Appflow
2378
2443
  # A list of tasks that Amazon AppFlow performs while transferring the
2379
2444
  # data in the flow run.
2380
2445
  #
2446
+ # @option params [Types::MetadataCatalogConfig] :metadata_catalog_config
2447
+ # Specifies the configuration that Amazon AppFlow uses when it catalogs
2448
+ # the data that's transferred by the associated flow. When Amazon
2449
+ # AppFlow catalogs the data from a flow, it stores metadata in a data
2450
+ # catalog.
2451
+ #
2381
2452
  # @return [Types::UpdateFlowResponse] Returns a {Seahorse::Client::Response response} object which responds to the following methods:
2382
2453
  #
2383
2454
  # * {Types::UpdateFlowResponse#flow_status #flow_status} => String
@@ -2498,9 +2569,11 @@ module Aws::Appflow
2498
2569
  # prefix_config: {
2499
2570
  # prefix_type: "FILENAME", # accepts FILENAME, PATH, PATH_AND_FILENAME
2500
2571
  # prefix_format: "YEAR", # accepts YEAR, MONTH, DAY, HOUR, MINUTE
2572
+ # path_prefix_hierarchy: ["EXECUTION_ID"], # accepts EXECUTION_ID, SCHEMA_VERSION
2501
2573
  # },
2502
2574
  # aggregation_config: {
2503
2575
  # aggregation_type: "None", # accepts None, SingleFile
2576
+ # target_file_size: 1,
2504
2577
  # },
2505
2578
  # preserve_source_data_typing: false,
2506
2579
  # },
@@ -2544,9 +2617,11 @@ module Aws::Appflow
2544
2617
  # prefix_config: { # required
2545
2618
  # prefix_type: "FILENAME", # accepts FILENAME, PATH, PATH_AND_FILENAME
2546
2619
  # prefix_format: "YEAR", # accepts YEAR, MONTH, DAY, HOUR, MINUTE
2620
+ # path_prefix_hierarchy: ["EXECUTION_ID"], # accepts EXECUTION_ID, SCHEMA_VERSION
2547
2621
  # },
2548
2622
  # aggregation_config: {
2549
2623
  # aggregation_type: "None", # accepts None, SingleFile
2624
+ # target_file_size: 1,
2550
2625
  # },
2551
2626
  # },
2552
2627
  # },
@@ -2632,12 +2707,19 @@ module Aws::Appflow
2632
2707
  # custom_connector: "PROJECTION", # accepts PROJECTION, LESS_THAN, GREATER_THAN, CONTAINS, BETWEEN, LESS_THAN_OR_EQUAL_TO, GREATER_THAN_OR_EQUAL_TO, EQUAL_TO, NOT_EQUAL_TO, ADDITION, MULTIPLICATION, DIVISION, SUBTRACTION, MASK_ALL, MASK_FIRST_N, MASK_LAST_N, VALIDATE_NON_NULL, VALIDATE_NON_ZERO, VALIDATE_NON_NEGATIVE, VALIDATE_NUMERIC, NO_OP
2633
2708
  # },
2634
2709
  # destination_field: "DestinationField",
2635
- # task_type: "Arithmetic", # required, accepts Arithmetic, Filter, Map, Map_all, Mask, Merge, Passthrough, Truncate, Validate
2710
+ # task_type: "Arithmetic", # required, accepts Arithmetic, Filter, Map, Map_all, Mask, Merge, Passthrough, Truncate, Validate, Partition
2636
2711
  # task_properties: {
2637
2712
  # "VALUE" => "Property",
2638
2713
  # },
2639
2714
  # },
2640
2715
  # ],
2716
+ # metadata_catalog_config: {
2717
+ # glue_data_catalog: {
2718
+ # role_arn: "GlueDataCatalogIAMRole", # required
2719
+ # database_name: "GlueDataCatalogDatabaseName", # required
2720
+ # table_prefix: "GlueDataCatalogTablePrefix", # required
2721
+ # },
2722
+ # },
2641
2723
  # })
2642
2724
  #
2643
2725
  # @example Response structure
@@ -2666,7 +2748,7 @@ module Aws::Appflow
2666
2748
  params: params,
2667
2749
  config: config)
2668
2750
  context[:gem_name] = 'aws-sdk-appflow'
2669
- context[:gem_version] = '1.28.0'
2751
+ context[:gem_version] = '1.30.0'
2670
2752
  Seahorse::Client::Request.new(handlers, context)
2671
2753
  end
2672
2754
 
@@ -45,6 +45,7 @@ module Aws::Appflow
45
45
  Boolean = Shapes::BooleanShape.new(name: 'Boolean')
46
46
  BucketName = Shapes::StringShape.new(name: 'BucketName')
47
47
  BucketPrefix = Shapes::StringShape.new(name: 'BucketPrefix')
48
+ CatalogType = Shapes::StringShape.new(name: 'CatalogType')
48
49
  ClientCredentialsArn = Shapes::StringShape.new(name: 'ClientCredentialsArn')
49
50
  ClientId = Shapes::StringShape.new(name: 'ClientId')
50
51
  ClientNumber = Shapes::StringShape.new(name: 'ClientNumber')
@@ -177,6 +178,10 @@ module Aws::Appflow
177
178
  FlowName = Shapes::StringShape.new(name: 'FlowName')
178
179
  FlowStatus = Shapes::StringShape.new(name: 'FlowStatus')
179
180
  FlowStatusMessage = Shapes::StringShape.new(name: 'FlowStatusMessage')
181
+ GlueDataCatalogConfig = Shapes::StructureShape.new(name: 'GlueDataCatalogConfig')
182
+ GlueDataCatalogDatabaseName = Shapes::StringShape.new(name: 'GlueDataCatalogDatabaseName')
183
+ GlueDataCatalogIAMRole = Shapes::StringShape.new(name: 'GlueDataCatalogIAMRole')
184
+ GlueDataCatalogTablePrefix = Shapes::StringShape.new(name: 'GlueDataCatalogTablePrefix')
180
185
  GoogleAnalyticsConnectorOperator = Shapes::StringShape.new(name: 'GoogleAnalyticsConnectorOperator')
181
186
  GoogleAnalyticsConnectorProfileCredentials = Shapes::StructureShape.new(name: 'GoogleAnalyticsConnectorProfileCredentials')
182
187
  GoogleAnalyticsConnectorProfileProperties = Shapes::StructureShape.new(name: 'GoogleAnalyticsConnectorProfileProperties')
@@ -221,6 +226,9 @@ module Aws::Appflow
221
226
  MarketoMetadata = Shapes::StructureShape.new(name: 'MarketoMetadata')
222
227
  MarketoSourceProperties = Shapes::StructureShape.new(name: 'MarketoSourceProperties')
223
228
  MaxResults = Shapes::IntegerShape.new(name: 'MaxResults')
229
+ MetadataCatalogConfig = Shapes::StructureShape.new(name: 'MetadataCatalogConfig')
230
+ MetadataCatalogDetail = Shapes::StructureShape.new(name: 'MetadataCatalogDetail')
231
+ MetadataCatalogDetails = Shapes::ListShape.new(name: 'MetadataCatalogDetails')
224
232
  MostRecentExecutionMessage = Shapes::StringShape.new(name: 'MostRecentExecutionMessage')
225
233
  Name = Shapes::StringShape.new(name: 'Name')
226
234
  NextToken = Shapes::StringShape.new(name: 'NextToken')
@@ -242,6 +250,8 @@ module Aws::Appflow
242
250
  OperatorPropertiesKeys = Shapes::StringShape.new(name: 'OperatorPropertiesKeys')
243
251
  Operators = Shapes::StringShape.new(name: 'Operators')
244
252
  Password = Shapes::StringShape.new(name: 'Password')
253
+ PathPrefix = Shapes::StringShape.new(name: 'PathPrefix')
254
+ PathPrefixHierarchy = Shapes::ListShape.new(name: 'PathPrefixHierarchy')
245
255
  PortNumber = Shapes::IntegerShape.new(name: 'PortNumber')
246
256
  PrefixConfig = Shapes::StructureShape.new(name: 'PrefixConfig')
247
257
  PrefixFormat = Shapes::StringShape.new(name: 'PrefixFormat')
@@ -267,6 +277,7 @@ module Aws::Appflow
267
277
  RegisterConnectorRequest = Shapes::StructureShape.new(name: 'RegisterConnectorRequest')
268
278
  RegisterConnectorResponse = Shapes::StructureShape.new(name: 'RegisterConnectorResponse')
269
279
  RegisteredBy = Shapes::StringShape.new(name: 'RegisteredBy')
280
+ RegistrationOutput = Shapes::StructureShape.new(name: 'RegistrationOutput')
270
281
  ResourceNotFoundException = Shapes::StructureShape.new(name: 'ResourceNotFoundException')
271
282
  RoleArn = Shapes::StringShape.new(name: 'RoleArn')
272
283
  S3ConnectorOperator = Shapes::StringShape.new(name: 'S3ConnectorOperator')
@@ -392,6 +403,7 @@ module Aws::Appflow
392
403
  AccessDeniedException.struct_class = Types::AccessDeniedException
393
404
 
394
405
  AggregationConfig.add_member(:aggregation_type, Shapes::ShapeRef.new(shape: AggregationType, location_name: "aggregationType"))
406
+ AggregationConfig.add_member(:target_file_size, Shapes::ShapeRef.new(shape: Long, location_name: "targetFileSize"))
395
407
  AggregationConfig.struct_class = Types::AggregationConfig
396
408
 
397
409
  AmplitudeConnectorProfileCredentials.add_member(:api_key, Shapes::ShapeRef.new(shape: ApiKey, required: true, location_name: "apiKey"))
@@ -659,6 +671,7 @@ module Aws::Appflow
659
671
  CreateFlowRequest.add_member(:destination_flow_config_list, Shapes::ShapeRef.new(shape: DestinationFlowConfigList, required: true, location_name: "destinationFlowConfigList"))
660
672
  CreateFlowRequest.add_member(:tasks, Shapes::ShapeRef.new(shape: Tasks, required: true, location_name: "tasks"))
661
673
  CreateFlowRequest.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
674
+ CreateFlowRequest.add_member(:metadata_catalog_config, Shapes::ShapeRef.new(shape: MetadataCatalogConfig, location_name: "metadataCatalogConfig"))
662
675
  CreateFlowRequest.struct_class = Types::CreateFlowRequest
663
676
 
664
677
  CreateFlowResponse.add_member(:flow_arn, Shapes::ShapeRef.new(shape: FlowArn, location_name: "flowArn"))
@@ -798,6 +811,9 @@ module Aws::Appflow
798
811
  DescribeFlowResponse.add_member(:created_by, Shapes::ShapeRef.new(shape: CreatedBy, location_name: "createdBy"))
799
812
  DescribeFlowResponse.add_member(:last_updated_by, Shapes::ShapeRef.new(shape: UpdatedBy, location_name: "lastUpdatedBy"))
800
813
  DescribeFlowResponse.add_member(:tags, Shapes::ShapeRef.new(shape: TagMap, location_name: "tags"))
814
+ DescribeFlowResponse.add_member(:metadata_catalog_config, Shapes::ShapeRef.new(shape: MetadataCatalogConfig, location_name: "metadataCatalogConfig"))
815
+ DescribeFlowResponse.add_member(:last_run_metadata_catalog_details, Shapes::ShapeRef.new(shape: MetadataCatalogDetails, location_name: "lastRunMetadataCatalogDetails"))
816
+ DescribeFlowResponse.add_member(:schema_version, Shapes::ShapeRef.new(shape: Long, location_name: "schemaVersion"))
801
817
  DescribeFlowResponse.struct_class = Types::DescribeFlowResponse
802
818
 
803
819
  DestinationConnectorProperties.add_member(:redshift, Shapes::ShapeRef.new(shape: RedshiftDestinationProperties, location_name: "Redshift"))
@@ -869,6 +885,7 @@ module Aws::Appflow
869
885
  ExecutionRecord.add_member(:last_updated_at, Shapes::ShapeRef.new(shape: Date, location_name: "lastUpdatedAt"))
870
886
  ExecutionRecord.add_member(:data_pull_start_time, Shapes::ShapeRef.new(shape: Date, location_name: "dataPullStartTime"))
871
887
  ExecutionRecord.add_member(:data_pull_end_time, Shapes::ShapeRef.new(shape: Date, location_name: "dataPullEndTime"))
888
+ ExecutionRecord.add_member(:metadata_catalog_details, Shapes::ShapeRef.new(shape: MetadataCatalogDetails, location_name: "metadataCatalogDetails"))
872
889
  ExecutionRecord.struct_class = Types::ExecutionRecord
873
890
 
874
891
  ExecutionResult.add_member(:error_info, Shapes::ShapeRef.new(shape: ErrorInfo, location_name: "errorInfo"))
@@ -909,6 +926,11 @@ module Aws::Appflow
909
926
 
910
927
  FlowList.member = Shapes::ShapeRef.new(shape: FlowDefinition)
911
928
 
929
+ GlueDataCatalogConfig.add_member(:role_arn, Shapes::ShapeRef.new(shape: GlueDataCatalogIAMRole, required: true, location_name: "roleArn"))
930
+ GlueDataCatalogConfig.add_member(:database_name, Shapes::ShapeRef.new(shape: GlueDataCatalogDatabaseName, required: true, location_name: "databaseName"))
931
+ GlueDataCatalogConfig.add_member(:table_prefix, Shapes::ShapeRef.new(shape: GlueDataCatalogTablePrefix, required: true, location_name: "tablePrefix"))
932
+ GlueDataCatalogConfig.struct_class = Types::GlueDataCatalogConfig
933
+
912
934
  GoogleAnalyticsConnectorProfileCredentials.add_member(:client_id, Shapes::ShapeRef.new(shape: ClientId, required: true, location_name: "clientId"))
913
935
  GoogleAnalyticsConnectorProfileCredentials.add_member(:client_secret, Shapes::ShapeRef.new(shape: ClientSecret, required: true, location_name: "clientSecret"))
914
936
  GoogleAnalyticsConnectorProfileCredentials.add_member(:access_token, Shapes::ShapeRef.new(shape: AccessToken, location_name: "accessToken"))
@@ -1014,6 +1036,17 @@ module Aws::Appflow
1014
1036
  MarketoSourceProperties.add_member(:object, Shapes::ShapeRef.new(shape: Object, required: true, location_name: "object"))
1015
1037
  MarketoSourceProperties.struct_class = Types::MarketoSourceProperties
1016
1038
 
1039
+ MetadataCatalogConfig.add_member(:glue_data_catalog, Shapes::ShapeRef.new(shape: GlueDataCatalogConfig, location_name: "glueDataCatalog"))
1040
+ MetadataCatalogConfig.struct_class = Types::MetadataCatalogConfig
1041
+
1042
+ MetadataCatalogDetail.add_member(:catalog_type, Shapes::ShapeRef.new(shape: CatalogType, location_name: "catalogType"))
1043
+ MetadataCatalogDetail.add_member(:table_name, Shapes::ShapeRef.new(shape: String, location_name: "tableName"))
1044
+ MetadataCatalogDetail.add_member(:table_registration_output, Shapes::ShapeRef.new(shape: RegistrationOutput, location_name: "tableRegistrationOutput"))
1045
+ MetadataCatalogDetail.add_member(:partition_registration_output, Shapes::ShapeRef.new(shape: RegistrationOutput, location_name: "partitionRegistrationOutput"))
1046
+ MetadataCatalogDetail.struct_class = Types::MetadataCatalogDetail
1047
+
1048
+ MetadataCatalogDetails.member = Shapes::ShapeRef.new(shape: MetadataCatalogDetail)
1049
+
1017
1050
  OAuth2Credentials.add_member(:client_id, Shapes::ShapeRef.new(shape: ClientId, location_name: "clientId"))
1018
1051
  OAuth2Credentials.add_member(:client_secret, Shapes::ShapeRef.new(shape: ClientSecret, location_name: "clientSecret"))
1019
1052
  OAuth2Credentials.add_member(:access_token, Shapes::ShapeRef.new(shape: AccessToken, location_name: "accessToken"))
@@ -1060,8 +1093,11 @@ module Aws::Appflow
1060
1093
 
1061
1094
  OAuthScopeList.member = Shapes::ShapeRef.new(shape: OAuthScope)
1062
1095
 
1096
+ PathPrefixHierarchy.member = Shapes::ShapeRef.new(shape: PathPrefix)
1097
+
1063
1098
  PrefixConfig.add_member(:prefix_type, Shapes::ShapeRef.new(shape: PrefixType, location_name: "prefixType"))
1064
1099
  PrefixConfig.add_member(:prefix_format, Shapes::ShapeRef.new(shape: PrefixFormat, location_name: "prefixFormat"))
1100
+ PrefixConfig.add_member(:path_prefix_hierarchy, Shapes::ShapeRef.new(shape: PathPrefixHierarchy, location_name: "pathPrefixHierarchy"))
1065
1101
  PrefixConfig.struct_class = Types::PrefixConfig
1066
1102
 
1067
1103
  PrivateConnectionProvisioningState.add_member(:status, Shapes::ShapeRef.new(shape: PrivateConnectionProvisioningStatus, location_name: "status"))
@@ -1105,6 +1141,11 @@ module Aws::Appflow
1105
1141
  RegisterConnectorResponse.add_member(:connector_arn, Shapes::ShapeRef.new(shape: ARN, location_name: "connectorArn"))
1106
1142
  RegisterConnectorResponse.struct_class = Types::RegisterConnectorResponse
1107
1143
 
1144
+ RegistrationOutput.add_member(:message, Shapes::ShapeRef.new(shape: String, location_name: "message"))
1145
+ RegistrationOutput.add_member(:result, Shapes::ShapeRef.new(shape: String, location_name: "result"))
1146
+ RegistrationOutput.add_member(:status, Shapes::ShapeRef.new(shape: ExecutionStatus, location_name: "status"))
1147
+ RegistrationOutput.struct_class = Types::RegistrationOutput
1148
+
1108
1149
  ResourceNotFoundException.add_member(:message, Shapes::ShapeRef.new(shape: ErrorMessage, location_name: "message"))
1109
1150
  ResourceNotFoundException.struct_class = Types::ResourceNotFoundException
1110
1151
 
@@ -1398,6 +1439,7 @@ module Aws::Appflow
1398
1439
  UpdateFlowRequest.add_member(:source_flow_config, Shapes::ShapeRef.new(shape: SourceFlowConfig, required: true, location_name: "sourceFlowConfig"))
1399
1440
  UpdateFlowRequest.add_member(:destination_flow_config_list, Shapes::ShapeRef.new(shape: DestinationFlowConfigList, required: true, location_name: "destinationFlowConfigList"))
1400
1441
  UpdateFlowRequest.add_member(:tasks, Shapes::ShapeRef.new(shape: Tasks, required: true, location_name: "tasks"))
1442
+ UpdateFlowRequest.add_member(:metadata_catalog_config, Shapes::ShapeRef.new(shape: MetadataCatalogConfig, location_name: "metadataCatalogConfig"))
1401
1443
  UpdateFlowRequest.struct_class = Types::UpdateFlowRequest
1402
1444
 
1403
1445
  UpdateFlowResponse.add_member(:flow_status, Shapes::ShapeRef.new(shape: FlowStatus, location_name: "flowStatus"))
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::Appflow
11
+ # Endpoint parameters used to influence endpoints per request.
12
+ #
13
+ # @!attribute region
14
+ # The AWS region used to dispatch the request.
15
+ #
16
+ # @return [String]
17
+ #
18
+ # @!attribute use_dual_stack
19
+ # When true, use the dual-stack endpoint. If the configured endpoint does not support dual-stack, dispatching the request MAY return an error.
20
+ #
21
+ # @return [Boolean]
22
+ #
23
+ # @!attribute use_fips
24
+ # When true, send this request to the FIPS-compliant regional endpoint. If the configured endpoint does not have a FIPS compliant endpoint, dispatching the request will return an error.
25
+ #
26
+ # @return [Boolean]
27
+ #
28
+ # @!attribute endpoint
29
+ # Override the endpoint used to send this request
30
+ #
31
+ # @return [String]
32
+ #
33
+ EndpointParameters = Struct.new(
34
+ :region,
35
+ :use_dual_stack,
36
+ :use_fips,
37
+ :endpoint,
38
+ ) do
39
+ include Aws::Structure
40
+
41
+ # @api private
42
+ class << self
43
+ PARAM_MAP = {
44
+ 'Region' => :region,
45
+ 'UseDualStack' => :use_dual_stack,
46
+ 'UseFIPS' => :use_fips,
47
+ 'Endpoint' => :endpoint,
48
+ }.freeze
49
+ end
50
+
51
+ def initialize(options = {})
52
+ self[:region] = options[:region]
53
+ self[:use_dual_stack] = options[:use_dual_stack]
54
+ self[:use_dual_stack] = false if self[:use_dual_stack].nil?
55
+ if self[:use_dual_stack].nil?
56
+ raise ArgumentError, "Missing required EndpointParameter: :use_dual_stack"
57
+ end
58
+ self[:use_fips] = options[:use_fips]
59
+ self[:use_fips] = false if self[:use_fips].nil?
60
+ if self[:use_fips].nil?
61
+ raise ArgumentError, "Missing required EndpointParameter: :use_fips"
62
+ end
63
+ self[:endpoint] = options[:endpoint]
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ # WARNING ABOUT GENERATED CODE
4
+ #
5
+ # This file is generated. See the contributing guide for more information:
6
+ # https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
7
+ #
8
+ # WARNING ABOUT GENERATED CODE
9
+
10
+ module Aws::Appflow
11
+ class EndpointProvider
12
+ def initialize(rule_set = nil)
13
+ @@rule_set ||= begin
14
+ endpoint_rules = Aws::Json.load(Base64.decode64(RULES))
15
+ Aws::Endpoints::RuleSet.new(
16
+ version: endpoint_rules['version'],
17
+ service_id: endpoint_rules['serviceId'],
18
+ parameters: endpoint_rules['parameters'],
19
+ rules: endpoint_rules['rules']
20
+ )
21
+ end
22
+ @provider = Aws::Endpoints::RulesProvider.new(rule_set || @@rule_set)
23
+ end
24
+
25
+ def resolve_endpoint(parameters)
26
+ @provider.resolve_endpoint(parameters)
27
+ end
28
+
29
+ # @api private
30
+ RULES = <<-JSON
31
+ eyJ2ZXJzaW9uIjoiMS4wIiwicGFyYW1ldGVycyI6eyJSZWdpb24iOnsiYnVp
32
+ bHRJbiI6IkFXUzo6UmVnaW9uIiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1bWVu
33
+ dGF0aW9uIjoiVGhlIEFXUyByZWdpb24gdXNlZCB0byBkaXNwYXRjaCB0aGUg
34
+ cmVxdWVzdC4iLCJ0eXBlIjoiU3RyaW5nIn0sIlVzZUR1YWxTdGFjayI6eyJi
35
+ dWlsdEluIjoiQVdTOjpVc2VEdWFsU3RhY2siLCJyZXF1aXJlZCI6dHJ1ZSwi
36
+ ZGVmYXVsdCI6ZmFsc2UsImRvY3VtZW50YXRpb24iOiJXaGVuIHRydWUsIHVz
37
+ ZSB0aGUgZHVhbC1zdGFjayBlbmRwb2ludC4gSWYgdGhlIGNvbmZpZ3VyZWQg
38
+ ZW5kcG9pbnQgZG9lcyBub3Qgc3VwcG9ydCBkdWFsLXN0YWNrLCBkaXNwYXRj
39
+ aGluZyB0aGUgcmVxdWVzdCBNQVkgcmV0dXJuIGFuIGVycm9yLiIsInR5cGUi
40
+ OiJCb29sZWFuIn0sIlVzZUZJUFMiOnsiYnVpbHRJbiI6IkFXUzo6VXNlRklQ
41
+ UyIsInJlcXVpcmVkIjp0cnVlLCJkZWZhdWx0IjpmYWxzZSwiZG9jdW1lbnRh
42
+ dGlvbiI6IldoZW4gdHJ1ZSwgc2VuZCB0aGlzIHJlcXVlc3QgdG8gdGhlIEZJ
43
+ UFMtY29tcGxpYW50IHJlZ2lvbmFsIGVuZHBvaW50LiBJZiB0aGUgY29uZmln
44
+ dXJlZCBlbmRwb2ludCBkb2VzIG5vdCBoYXZlIGEgRklQUyBjb21wbGlhbnQg
45
+ ZW5kcG9pbnQsIGRpc3BhdGNoaW5nIHRoZSByZXF1ZXN0IHdpbGwgcmV0dXJu
46
+ IGFuIGVycm9yLiIsInR5cGUiOiJCb29sZWFuIn0sIkVuZHBvaW50Ijp7ImJ1
47
+ aWx0SW4iOiJTREs6OkVuZHBvaW50IiwicmVxdWlyZWQiOmZhbHNlLCJkb2N1
48
+ bWVudGF0aW9uIjoiT3ZlcnJpZGUgdGhlIGVuZHBvaW50IHVzZWQgdG8gc2Vu
49
+ ZCB0aGlzIHJlcXVlc3QiLCJ0eXBlIjoiU3RyaW5nIn19LCJydWxlcyI6W3si
50
+ Y29uZGl0aW9ucyI6W3siZm4iOiJhd3MucGFydGl0aW9uIiwiYXJndiI6W3si
51
+ cmVmIjoiUmVnaW9uIn1dLCJhc3NpZ24iOiJQYXJ0aXRpb25SZXN1bHQifV0s
52
+ InR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZuIjoi
53
+ aXNTZXQiLCJhcmd2IjpbeyJyZWYiOiJFbmRwb2ludCJ9XX0seyJmbiI6InBh
54
+ cnNlVVJMIiwiYXJndiI6W3sicmVmIjoiRW5kcG9pbnQifV0sImFzc2lnbiI6
55
+ InVybCJ9XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9ucyI6
56
+ W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQ
57
+ UyJ9LHRydWVdfV0sImVycm9yIjoiSW52YWxpZCBDb25maWd1cmF0aW9uOiBG
58
+ SVBTIGFuZCBjdXN0b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0
59
+ eXBlIjoiZXJyb3IifSx7ImNvbmRpdGlvbnMiOltdLCJ0eXBlIjoidHJlZSIs
60
+ InJ1bGVzIjpbeyJjb25kaXRpb25zIjpbeyJmbiI6ImJvb2xlYW5FcXVhbHMi
61
+ LCJhcmd2IjpbeyJyZWYiOiJVc2VEdWFsU3RhY2sifSx0cnVlXX1dLCJlcnJv
62
+ ciI6IkludmFsaWQgQ29uZmlndXJhdGlvbjogRHVhbHN0YWNrIGFuZCBjdXN0
63
+ b20gZW5kcG9pbnQgYXJlIG5vdCBzdXBwb3J0ZWQiLCJ0eXBlIjoiZXJyb3Ii
64
+ fSx7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2ludCI6eyJ1cmwiOnsicmVmIjoi
65
+ RW5kcG9pbnQifSwicHJvcGVydGllcyI6e30sImhlYWRlcnMiOnt9fSwidHlw
66
+ ZSI6ImVuZHBvaW50In1dfV19LHsiY29uZGl0aW9ucyI6W3siZm4iOiJib29s
67
+ ZWFuRXF1YWxzIiwiYXJndiI6W3sicmVmIjoiVXNlRklQUyJ9LHRydWVdfSx7
68
+ ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxT
69
+ dGFjayJ9LHRydWVdfV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRp
70
+ dGlvbnMiOlt7ImZuIjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsi
71
+ Zm4iOiJnZXRBdHRyIiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0
72
+ In0sInN1cHBvcnRzRklQUyJdfV19LHsiZm4iOiJib29sZWFuRXF1YWxzIiwi
73
+ YXJndiI6W3RydWUseyJmbiI6ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQ
74
+ YXJ0aXRpb25SZXN1bHQifSwic3VwcG9ydHNEdWFsU3RhY2siXX1dfV0sInR5
75
+ cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOltdLCJlbmRwb2lu
76
+ dCI6eyJ1cmwiOiJodHRwczovL2FwcGZsb3ctZmlwcy57UmVnaW9ufS57UGFy
77
+ dGl0aW9uUmVzdWx0I2R1YWxTdGFja0Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVz
78
+ Ijp7fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19LHsiY29u
79
+ ZGl0aW9ucyI6W10sImVycm9yIjoiRklQUyBhbmQgRHVhbFN0YWNrIGFyZSBl
80
+ bmFibGVkLCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBv
81
+ bmUgb3IgYm90aCIsInR5cGUiOiJlcnJvciJ9XX0seyJjb25kaXRpb25zIjpb
82
+ eyJmbiI6ImJvb2xlYW5FcXVhbHMiLCJhcmd2IjpbeyJyZWYiOiJVc2VGSVBT
83
+ In0sdHJ1ZV19XSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0aW9u
84
+ cyI6W3siZm4iOiJib29sZWFuRXF1YWxzIiwiYXJndiI6W3RydWUseyJmbiI6
85
+ ImdldEF0dHIiLCJhcmd2IjpbeyJyZWYiOiJQYXJ0aXRpb25SZXN1bHQifSwi
86
+ c3VwcG9ydHNGSVBTIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJj
87
+ b25kaXRpb25zIjpbXSwidHlwZSI6InRyZWUiLCJydWxlcyI6W3siY29uZGl0
88
+ aW9ucyI6W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vYXBwZmxvdy1m
89
+ aXBzLntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZG5zU3VmZml4fSIsInBy
90
+ b3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRwb2ludCJ9
91
+ XX1dfSx7ImNvbmRpdGlvbnMiOltdLCJlcnJvciI6IkZJUFMgaXMgZW5hYmxl
92
+ ZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9ydCBGSVBTIiwi
93
+ dHlwZSI6ImVycm9yIn1dfSx7ImNvbmRpdGlvbnMiOlt7ImZuIjoiYm9vbGVh
94
+ bkVxdWFscyIsImFyZ3YiOlt7InJlZiI6IlVzZUR1YWxTdGFjayJ9LHRydWVd
95
+ fV0sInR5cGUiOiJ0cmVlIiwicnVsZXMiOlt7ImNvbmRpdGlvbnMiOlt7ImZu
96
+ IjoiYm9vbGVhbkVxdWFscyIsImFyZ3YiOlt0cnVlLHsiZm4iOiJnZXRBdHRy
97
+ IiwiYXJndiI6W3sicmVmIjoiUGFydGl0aW9uUmVzdWx0In0sInN1cHBvcnRz
98
+ RHVhbFN0YWNrIl19XX1dLCJ0eXBlIjoidHJlZSIsInJ1bGVzIjpbeyJjb25k
99
+ aXRpb25zIjpbXSwiZW5kcG9pbnQiOnsidXJsIjoiaHR0cHM6Ly9hcHBmbG93
100
+ LntSZWdpb259LntQYXJ0aXRpb25SZXN1bHQjZHVhbFN0YWNrRG5zU3VmZml4
101
+ fSIsInByb3BlcnRpZXMiOnt9LCJoZWFkZXJzIjp7fX0sInR5cGUiOiJlbmRw
102
+ b2ludCJ9XX0seyJjb25kaXRpb25zIjpbXSwiZXJyb3IiOiJEdWFsU3RhY2sg
103
+ aXMgZW5hYmxlZCBidXQgdGhpcyBwYXJ0aXRpb24gZG9lcyBub3Qgc3VwcG9y
104
+ dCBEdWFsU3RhY2siLCJ0eXBlIjoiZXJyb3IifV19LHsiY29uZGl0aW9ucyI6
105
+ W10sImVuZHBvaW50Ijp7InVybCI6Imh0dHBzOi8vYXBwZmxvdy57UmVnaW9u
106
+ fS57UGFydGl0aW9uUmVzdWx0I2Ruc1N1ZmZpeH0iLCJwcm9wZXJ0aWVzIjp7
107
+ fSwiaGVhZGVycyI6e319LCJ0eXBlIjoiZW5kcG9pbnQifV19XX0=
108
+
109
+ JSON
110
+ end
111
+ end