887 887 | TriStateOption::Set(provider) => Some(provider),
|
888 888 | TriStateOption::NotSet => {
|
889 889 | let mut builder =
|
890 890 | credentials::DefaultCredentialsChain::builder().configure(conf.clone());
|
891 891 | builder.set_region(region.clone());
|
892 892 | Some(SharedCredentialsProvider::new(builder.build().await))
|
893 893 | }
|
894 894 | TriStateOption::ExplicitlyUnset => None,
|
895 895 | };
|
896 896 |
|
897 - | let token_provider = match self.token_provider {
|
898 - | Some(provider) => Some(provider),
|
899 - | None => {
|
900 - | #[cfg(feature = "sso")]
|
901 - | {
|
902 - | let mut builder =
|
903 - | crate::default_provider::token::DefaultTokenChain::builder()
|
904 - | .configure(conf.clone());
|
905 - | builder.set_region(region.clone());
|
906 - | Some(SharedTokenProvider::new(builder.build().await))
|
907 - | }
|
908 - | #[cfg(not(feature = "sso"))]
|
909 - | {
|
910 - | None
|
911 - | }
|
912 - | }
|
913 - | };
|
914 - |
|
915 897 | let profiles = conf.profile().await;
|
916 898 | let service_config = EnvServiceConfig {
|
917 899 | env: conf.env(),
|
918 900 | env_config_sections: profiles.cloned().unwrap_or_default(),
|
919 901 | };
|
920 902 | let mut builder = SdkConfig::builder()
|
921 - | .region(region)
|
903 + | .region(region.clone())
|
922 904 | .retry_config(retry_config)
|
923 905 | .timeout_config(timeout_config)
|
924 906 | .time_source(time_source)
|
925 907 | .service_config(service_config);
|
926 908 |
|
927 909 | // If an endpoint URL is set programmatically, then our work is done.
|
928 910 | let endpoint_url = if self.endpoint_url.is_some() {
|
929 911 | builder.insert_origin("endpoint_url", Origin::shared_config());
|
930 912 | self.endpoint_url
|
931 913 | } else {
|
932 914 | // Otherwise, check to see if we should ignore EP URLs set in the environment.
|
933 915 | let ignore_configured_endpoint_urls =
|
934 916 | ignore_ep::ignore_configured_endpoint_urls_provider(&conf)
|
935 917 | .await
|
936 918 | .unwrap_or_default();
|
937 919 |
|
938 920 | if ignore_configured_endpoint_urls {
|
939 921 | // If yes, log a trace and return `None`.
|
940 922 | tracing::trace!(
|
941 923 | "`ignore_configured_endpoint_urls` is set, any endpoint URLs configured in the environment will be ignored. \
|
942 924 | NOTE: Endpoint URLs set programmatically WILL still be respected"
|
943 925 | );
|
944 926 | None
|
945 927 | } else {
|
946 928 | // Otherwise, attempt to resolve one.
|
947 929 | let (v, origin) = endpoint_url::endpoint_url_provider_with_origin(&conf).await;
|
948 930 | builder.insert_origin("endpoint_url", origin);
|
949 931 | v
|
950 932 | }
|
951 933 | };
|
952 934 |
|
935 + | let token_provider = match self.token_provider {
|
936 + | Some(provider) => {
|
937 + | builder.insert_origin("token_provider", Origin::shared_config());
|
938 + | Some(provider)
|
939 + | }
|
940 + | None => {
|
941 + | #[cfg(feature = "sso")]
|
942 + | {
|
943 + | let mut builder =
|
944 + | crate::default_provider::token::DefaultTokenChain::builder()
|
945 + | .configure(conf.clone());
|
946 + | builder.set_region(region);
|
947 + | Some(SharedTokenProvider::new(builder.build().await))
|
948 + | }
|
949 + | #[cfg(not(feature = "sso"))]
|
950 + | {
|
951 + | None
|
952 + | }
|
953 + | // Not setting `Origin` in this arm, and that's good for now as long as we know
|
954 + | // it's not programmatically set in the shared config.
|
955 + | // We can consider adding `Origin::Default` if needed.
|
956 + | }
|
957 + | };
|
958 + |
|
953 959 | builder.set_endpoint_url(endpoint_url);
|
954 960 | builder.set_behavior_version(self.behavior_version);
|
955 961 | builder.set_http_client(self.http_client);
|
956 962 | builder.set_app_name(app_name);
|
957 963 |
|
958 964 | let identity_cache = match self.identity_cache {
|
959 965 | None => match self.behavior_version {
|
960 966 | #[allow(deprecated)]
|
961 967 | Some(bv) if bv.is_at_least(BehaviorVersion::v2024_03_28()) => {
|
962 968 | Some(IdentityCache::lazy().build())
|
963 969 | }
|
964 970 | _ => None,
|
965 971 | },
|
966 972 | Some(user_cache) => Some(user_cache),
|
967 973 | };
|
968 974 |
|
969 975 | let request_checksum_calculation =
|
970 976 | if let Some(request_checksum_calculation) = self.request_checksum_calculation {
|
971 977 | Some(request_checksum_calculation)
|
972 978 | } else {
|
973 979 | checksums::request_checksum_calculation_provider(&conf).await
|
974 980 | };
|
975 981 |
|
976 982 | let response_checksum_validation =
|
977 983 | if let Some(response_checksum_validation) = self.response_checksum_validation {
|
978 984 | Some(response_checksum_validation)
|
979 985 | } else {
|
980 986 | checksums::response_checksum_validation_provider(&conf).await
|
981 987 | };
|
982 988 |
|
983 989 | let account_id_endpoint_mode =
|
984 990 | if let Some(acccount_id_endpoint_mode) = self.account_id_endpoint_mode {
|
985 991 | Some(acccount_id_endpoint_mode)
|
986 992 | } else {
|
987 993 | account_id_endpoint_mode::account_id_endpoint_mode_provider(&conf).await
|
988 994 | };
|
989 995 |
|
990 996 | let auth_scheme_preference =
|
991 997 | if let Some(auth_scheme_preference) = self.auth_scheme_preference {
|
998 + | builder.insert_origin("auth_scheme_preference", Origin::shared_config());
|
992 999 | Some(auth_scheme_preference)
|
993 1000 | } else {
|
994 1001 | auth_scheme_preference::auth_scheme_preference_provider(&conf).await
|
1002 + | // Not setting `Origin` in this arm, and that's good for now as long as we know
|
1003 + | // it's not programmatically set in the shared config.
|
995 1004 | };
|
996 1005 |
|
997 1006 | builder.set_request_checksum_calculation(request_checksum_calculation);
|
998 1007 | builder.set_response_checksum_validation(response_checksum_validation);
|
999 1008 | builder.set_identity_cache(identity_cache);
|
1000 1009 | builder.set_credentials_provider(credentials_provider);
|
1001 1010 | builder.set_token_provider(token_provider);
|
1002 1011 | builder.set_sleep_impl(sleep_impl);
|
1003 1012 | builder.set_use_fips(use_fips);
|
1004 1013 | builder.set_use_dual_stack(use_dual_stack);
|