diff --git a/packages/amplify_core/jnigen.yaml b/packages/amplify_core/jnigen.yaml index bcc9b86cfb..d36f10134d 100644 --- a/packages/amplify_core/jnigen.yaml +++ b/packages/amplify_core/jnigen.yaml @@ -4,8 +4,6 @@ preamble: | maven_downloads: source_deps: - software.amazon.smithy:smithy-model:1.34.0 - - software.amazon.smithy:smithy-aws-traits:1.34.0 - - software.amazon.smithy:smithy-validation-model:1.34.0 classes: - software.amazon.smithy.model.Model - software.amazon.smithy.model.loader.ModelAssembler diff --git a/packages/amplify_core/lib/amplify_config.dart b/packages/amplify_core/lib/amplify_config.dart index 0613f96134..3c1a879774 100644 --- a/packages/amplify_core/lib/amplify_config.dart +++ b/packages/amplify_core/lib/amplify_config.dart @@ -19,7 +19,6 @@ export 'src/generated/src/amplify_configuration_service/model/aws_api_gateway_en export 'src/generated/src/amplify_configuration_service/model/aws_app_sync_endpoint_config.dart'; export 'src/generated/src/amplify_configuration_service/model/aws_auth_cognito_config.dart'; export 'src/generated/src/amplify_configuration_service/model/aws_auth_config.dart'; -export 'src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart'; export 'src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart'; export 'src/generated/src/amplify_configuration_service/model/aws_auth_identity_pool_config.dart'; export 'src/generated/src/amplify_configuration_service/model/aws_auth_mfa_configuration.dart'; diff --git a/packages/amplify_core/lib/src/amplify_class.dart b/packages/amplify_core/lib/src/amplify_class.dart index e1f25eedd7..92e4a69d58 100644 --- a/packages/amplify_core/lib/src/amplify_class.dart +++ b/packages/amplify_core/lib/src/amplify_class.dart @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import 'dart:async'; -import 'dart:convert'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_core/src/amplify_class_impl.dart'; import 'package:amplify_core/src/version.dart'; @@ -111,22 +111,22 @@ abstract class AmplifyClass { ); } - late AmplifyConfig amplifyConfig; + late AWSAmplifyConfig amplifyConfig; try { try { - final json = jsonDecode(configuration) as Map; - amplifyConfig = AmplifyConfig.fromJson(json.cast()); - } on Object { + amplifyConfig = AWSAmplifyConfig.parse(configuration); + } on Object catch (e) { throw ConfigurationError( 'The provided configuration is not a valid json. ' 'Check underlyingException.', recoverySuggestion: 'Inspect your amplifyconfiguration.dart and ensure that ' 'the string is proper json', + underlyingException: e, ); } await _configurePlugins(amplifyConfig); - _configCompleter.complete(amplifyConfig); + _configCompleter.complete(amplifyConfig.toCli()); } on ConfigurationError catch (e, st) { // Complete with the configuration error and reset the completer so // that 1) `configure` can be called again and 2) listeners registered @@ -144,14 +144,14 @@ abstract class AmplifyClass { // handled by the developer, but since they are unrelated to // configuration, listeners to `Amplify.asyncConfig` should be allowed to // proceed with the validated configuration. - _configCompleter.complete(amplifyConfig); + _configCompleter.complete(amplifyConfig.toCli()); _configCompleter = Completer(); rethrow; } } /// Configures all plugins in topologically-sorted order. - Future _configurePlugins(AmplifyConfig config) async { + Future _configurePlugins(AWSAmplifyConfig config) async { await Future.wait(_addPluginFutures); _addPluginFutures.clear(); final categories = { diff --git a/packages/amplify_core/lib/src/config/aws_amplify_config.dart b/packages/amplify_core/lib/src/config/aws_amplify_config.dart index aee71868da..a7ce042502 100644 --- a/packages/amplify_core/lib/src/config/aws_amplify_config.dart +++ b/packages/amplify_core/lib/src/config/aws_amplify_config.dart @@ -87,21 +87,7 @@ abstract class AWSAmplifyConfig if (authConfig.auth?.default$ case final cliAuthConfig?) { b.userPool - ..authFlowType = - switch (cliAuthConfig.authenticationFlowType) { - AuthenticationFlowType.userSrpAuth => - AWSAuthFlowType.userSrpAuth, - AuthenticationFlowType.userPasswordAuth => - AWSAuthFlowType.userPasswordAuth, - AuthenticationFlowType.customAuthWithSrp => - AWSAuthFlowType.customAuthWithSrp, - AuthenticationFlowType.customAuthWithoutSrp => - AWSAuthFlowType.customAuthWithoutSrp, - // ignore: deprecated_member_use_from_same_package - AuthenticationFlowType.customAuth => - AWSAuthFlowType.customAuth, - null => null, - } + ..authFlowType = cliAuthConfig.authenticationFlowType ..mfaConfiguration = switch (( cliAuthConfig.mfaConfiguration, cliAuthConfig.mfaTypes @@ -159,6 +145,8 @@ abstract class AWSAmplifyConfig if (userPoolConfig.hostedUI case final hostedUiConfig?) { b.userPool.hostedUi + ..clientId = hostedUiConfig.appClientId + ..clientSecret = hostedUiConfig.appClientSecret ..domainName = hostedUiConfig.webDomain ..signInRedirectUris.addAll(hostedUiConfig.signInRedirectUris) ..signOutRedirectUris @@ -288,7 +276,7 @@ abstract class AWSAmplifyConfig required String clientId, String? clientSecret, Uri? endpoint, - AWSAuthFlowType? authFlowType, + AuthenticationFlowType? authFlowType, Iterable? socialProviders, Iterable? usernameAttributes, Iterable? signUpAttributes, @@ -708,8 +696,8 @@ abstract class AWSAmplifyConfig case AWSAuthCognitoConfig(:final userPool, :final identityPool)) { final oAuthConfig = userPool?.hostedUi?.let( (hostedUi) => CognitoOAuthConfig( - appClientId: userPool.clientId, - appClientSecret: userPool.clientSecret, + appClientId: hostedUi.clientId ?? userPool.clientId, + appClientSecret: hostedUi.clientSecret ?? userPool.clientSecret, webDomain: hostedUi.domainName, scopes: hostedUi.scopes.toList(), signInRedirectUri: hostedUi.signInRedirectUris.join(','), @@ -902,7 +890,7 @@ abstract class AWSAmplifyConfig S3PluginConfig.pluginKey: S3PluginConfig( bucket: bucketName, region: region, - defaultAccessLevel: defaultAccessLevel ?? StorageAccessLevel.guest, + defaultAccessLevel: defaultAccessLevel, ), }, ); @@ -925,6 +913,10 @@ abstract class AWSAmplifyConfig // We need a built_value serializer for each overridden type _StandardEnumSerializer('LogLevel', LogLevel.values), _StandardEnumSerializer('Category', Category.values), + _StandardEnumSerializer( + 'AuthenticationFlowType', + AuthenticationFlowType.values, + ), _StandardEnumSerializer('MfaType', MfaType.values), _StandardEnumSerializer( 'MfaConfiguration', diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/common/serializers.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/common/serializers.dart index d06c1f3ad5..7745e47845 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/common/serializers.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/common/serializers.dart @@ -3,11 +3,11 @@ library amplify_core.amplify_configuration_service.common.serializers; // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:amplify_core/amplify_core.dart' as _i38; +import 'package:amplify_core/amplify_core.dart' as _i35; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/amplify_logging_constraints.dart' - as _i25; + as _i24; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/amplify_sub_category.dart' - as _i34; + as _i33; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_analytics_config.dart' as _i3; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_analytics_pinpoint_config.dart' @@ -23,58 +23,52 @@ import 'package:amplify_core/src/generated/src/amplify_configuration_service/mod import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_app_sync_endpoint_config.dart' as _i5; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_cognito_config.dart' - as _i21; + as _i20; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_config.dart' - as _i22; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart' - as _i10; + as _i21; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart' - as _i18; + as _i17; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_identity_pool_config.dart' - as _i20; + as _i19; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_mfa_configuration.dart' - as _i17; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_password_protection_settings.dart' as _i16; +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_password_protection_settings.dart' + as _i15; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider.dart' - as _i14; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider_custom.dart' as _i13; +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider_custom.dart' + as _i12; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider_oidc.dart' - as _i11; + as _i10; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider_saml.dart' - as _i12; + as _i11; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.dart' - as _i19; + as _i18; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_username_attribute.dart' - as _i15; + as _i14; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_logging_cloud_watch_config.dart' - as _i26; + as _i25; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_logging_config.dart' - as _i27; + as _i26; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_notifications_config.dart' - as _i30; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_push_notifications_config.dart' as _i29; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_push_notifications_pinpoint_config.dart' +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_push_notifications_config.dart' as _i28; +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_push_notifications_pinpoint_config.dart' + as _i27; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_rest_endpoint_config.dart' as _i7; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_storage_config.dart' - as _i33; + as _i32; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.dart' - as _i31; + as _i30; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_storage_s3_config.dart' - as _i32; + as _i31; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/logging_remote_configuration.dart' - as _i23; + as _i22; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/user_log_level.dart' - as _i24; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/validation_exception.dart' - as _i36; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/validation_exception_field.dart' - as _i35; -import 'package:built_collection/built_collection.dart' as _i37; + as _i23; +import 'package:built_collection/built_collection.dart' as _i34; import 'package:built_value/serializer.dart'; import 'package:smithy/smithy.dart' as _i1; @@ -87,97 +81,90 @@ const List<_i1.SmithySerializer> serializers = [ ..._i7.AWSRestEndpointConfig.serializers, ..._i8.AWSApiEndpointConfig.serializers, ..._i9.AWSApiConfig.serializers, - ..._i10.AWSAuthFlowType.serializers, - ..._i11.AWSAuthProviderOidc.serializers, - ..._i12.AWSAuthProviderSaml.serializers, - ..._i13.AWSAuthProviderCustom.serializers, - ..._i14.AWSAuthProvider.serializers, - ..._i15.AWSAuthUsernameAttribute.serializers, - ..._i16.AWSAuthPasswordProtectionSettings.serializers, - ..._i17.AWSAuthMfaConfiguration.serializers, - ..._i18.AWSAuthHostedUiConfig.serializers, - ..._i19.AWSAuthUserPoolConfig.serializers, - ..._i20.AWSAuthIdentityPoolConfig.serializers, - ..._i21.AWSAuthCognitoConfig.serializers, - ..._i22.AWSAuthConfig.serializers, - ..._i23.LoggingRemoteConfiguration.serializers, - ..._i24.UserLogLevel.serializers, - ..._i25.AmplifyLoggingConstraints.serializers, - ..._i26.AWSLoggingCloudWatchConfig.serializers, - ..._i27.AWSLoggingConfig.serializers, - ..._i28.AWSPushNotificationsPinpointConfig.serializers, - ..._i29.AWSPushNotificationsConfig.serializers, - ..._i30.AWSNotificationsConfig.serializers, - ..._i31.AWSStorageS3Bucket.serializers, - ..._i32.AWSStorageS3Config.serializers, - ..._i33.AWSStorageConfig.serializers, - ..._i34.AmplifySubCategory.serializers, - ..._i35.ValidationExceptionField.serializers, - ..._i36.ValidationException.serializers, + ..._i10.AWSAuthProviderOidc.serializers, + ..._i11.AWSAuthProviderSaml.serializers, + ..._i12.AWSAuthProviderCustom.serializers, + ..._i13.AWSAuthProvider.serializers, + ..._i14.AWSAuthUsernameAttribute.serializers, + ..._i15.AWSAuthPasswordProtectionSettings.serializers, + ..._i16.AWSAuthMfaConfiguration.serializers, + ..._i17.AWSAuthHostedUiConfig.serializers, + ..._i18.AWSAuthUserPoolConfig.serializers, + ..._i19.AWSAuthIdentityPoolConfig.serializers, + ..._i20.AWSAuthCognitoConfig.serializers, + ..._i21.AWSAuthConfig.serializers, + ..._i22.LoggingRemoteConfiguration.serializers, + ..._i23.UserLogLevel.serializers, + ..._i24.AmplifyLoggingConstraints.serializers, + ..._i25.AWSLoggingCloudWatchConfig.serializers, + ..._i26.AWSLoggingConfig.serializers, + ..._i27.AWSPushNotificationsPinpointConfig.serializers, + ..._i28.AWSPushNotificationsConfig.serializers, + ..._i29.AWSNotificationsConfig.serializers, + ..._i30.AWSStorageS3Bucket.serializers, + ..._i31.AWSStorageS3Config.serializers, + ..._i32.AWSStorageConfig.serializers, + ..._i33.AmplifySubCategory.serializers, ]; final Map builderFactories = { const FullType( - _i37.BuiltList, + _i34.BuiltList, [FullType(_i4.AWSApiAuthorizationMode)], - ): _i37.ListBuilder<_i4.AWSApiAuthorizationMode>.new, + ): _i34.ListBuilder<_i4.AWSApiAuthorizationMode>.new, const FullType( - _i37.BuiltMap, + _i34.BuiltMap, [ FullType(String), FullType(_i8.AWSApiEndpointConfig), ], - ): _i37.MapBuilder.new, + ): _i34.MapBuilder.new, const FullType( - _i37.BuiltList, - [FullType(_i38.PasswordPolicyCharacters)], - ): _i37.ListBuilder<_i38.PasswordPolicyCharacters>.new, + _i34.BuiltList, + [FullType(_i35.PasswordPolicyCharacters)], + ): _i34.ListBuilder<_i35.PasswordPolicyCharacters>.new, const FullType( - _i37.BuiltSet, - [FullType(_i38.MfaType)], - ): _i37.SetBuilder<_i38.MfaType>.new, + _i34.BuiltSet, + [FullType(_i35.MfaType)], + ): _i34.SetBuilder<_i35.MfaType>.new, const FullType( - _i37.BuiltList, + _i34.BuiltList, [FullType(Uri)], - ): _i37.ListBuilder.new, + ): _i34.ListBuilder.new, const FullType( - _i37.BuiltList, + _i34.BuiltList, [FullType(String)], - ): _i37.ListBuilder.new, + ): _i34.ListBuilder.new, const FullType( - _i37.BuiltList, - [FullType(_i14.AWSAuthProvider)], - ): _i37.ListBuilder<_i14.AWSAuthProvider>.new, + _i34.BuiltList, + [FullType(_i13.AWSAuthProvider)], + ): _i34.ListBuilder<_i13.AWSAuthProvider>.new, const FullType( - _i37.BuiltSet, - [FullType(_i15.AWSAuthUsernameAttribute)], - ): _i37.SetBuilder<_i15.AWSAuthUsernameAttribute>.new, + _i34.BuiltSet, + [FullType(_i14.AWSAuthUsernameAttribute)], + ): _i34.SetBuilder<_i14.AWSAuthUsernameAttribute>.new, const FullType( - _i37.BuiltSet, - [FullType(_i38.CognitoUserAttributeKey)], - ): _i37.SetBuilder<_i38.CognitoUserAttributeKey>.new, + _i34.BuiltSet, + [FullType(_i35.CognitoUserAttributeKey)], + ): _i34.SetBuilder<_i35.CognitoUserAttributeKey>.new, const FullType( - _i37.BuiltMap, + _i34.BuiltMap, [ - FullType(_i38.Category), - FullType(_i38.LogLevel), + FullType(_i35.Category), + FullType(_i35.LogLevel), ], - ): _i37.MapBuilder<_i38.Category, _i38.LogLevel>.new, + ): _i34.MapBuilder<_i35.Category, _i35.LogLevel>.new, const FullType( - _i37.BuiltMap, + _i34.BuiltMap, [ FullType(String), - FullType(_i24.UserLogLevel), + FullType(_i23.UserLogLevel), ], - ): _i37.MapBuilder.new, + ): _i34.MapBuilder.new, const FullType( - _i37.BuiltMap, + _i34.BuiltMap, [ FullType(String), - FullType(_i31.AWSStorageS3Bucket), + FullType(_i30.AWSStorageS3Bucket), ], - ): _i37.MapBuilder.new, - const FullType( - _i37.BuiltList, - [FullType(_i35.ValidationExceptionField)], - ): _i37.ListBuilder<_i35.ValidationExceptionField>.new, + ): _i34.MapBuilder.new, }; diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart deleted file mode 100644 index 2d016ad8a3..0000000000 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart +++ /dev/null @@ -1,80 +0,0 @@ -// Generated with smithy-dart 0.3.1. DO NOT MODIFY. -// ignore_for_file: avoid_unused_constructor_parameters,deprecated_member_use_from_same_package,non_constant_identifier_names - -library amplify_core.amplify_configuration_service.model.aws_auth_flow_type; // ignore_for_file: no_leading_underscores_for_library_prefixes - -import 'package:smithy/smithy.dart' as _i1; - -class AWSAuthFlowType extends _i1.SmithyEnum { - const AWSAuthFlowType._( - int index, - String name, - String value, - ) : super( - index, - name, - value, - ); - - const AWSAuthFlowType._sdkUnknown(String value) : super.sdkUnknown(value); - - static const customAuth = AWSAuthFlowType._( - 0, - 'CUSTOM_AUTH', - 'CUSTOM_AUTH', - ); - - static const customAuthWithSrp = AWSAuthFlowType._( - 1, - 'CUSTOM_AUTH_WITH_SRP', - 'CUSTOM_AUTH_WITH_SRP', - ); - - static const customAuthWithoutSrp = AWSAuthFlowType._( - 2, - 'CUSTOM_AUTH_WITHOUT_SRP', - 'CUSTOM_AUTH_WITHOUT_SRP', - ); - - static const userPasswordAuth = AWSAuthFlowType._( - 3, - 'USER_PASSWORD_AUTH', - 'USER_PASSWORD_AUTH', - ); - - static const userSrpAuth = AWSAuthFlowType._( - 4, - 'USER_SRP_AUTH', - 'USER_SRP_AUTH', - ); - - /// All values of [AWSAuthFlowType]. - static const values = [ - AWSAuthFlowType.customAuth, - AWSAuthFlowType.customAuthWithSrp, - AWSAuthFlowType.customAuthWithoutSrp, - AWSAuthFlowType.userPasswordAuth, - AWSAuthFlowType.userSrpAuth, - ]; - - static const List<_i1.SmithySerializer> serializers = [ - _i1.SmithyEnumSerializer( - 'AWSAuthFlowType', - values: values, - sdkUnknown: AWSAuthFlowType._sdkUnknown, - supportedProtocols: [], - ) - ]; -} - -extension AWSAuthFlowTypeHelpers on List { - /// Returns the value of [AWSAuthFlowType] whose name matches [name]. - /// - /// Throws a `StateError` if no matching value is found. - AWSAuthFlowType byName(String name) => - firstWhere((el) => el.name.toLowerCase() == name.toLowerCase()); - - /// Returns the value of [AWSAuthFlowType] whose value matches [value]. - AWSAuthFlowType byValue(String value) => - firstWhere((el) => el.value == value); -} diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart index b350304881..7044ab2a40 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart @@ -15,6 +15,8 @@ abstract class AWSAuthHostedUiConfig with _i1.AWSEquatable implements Built { factory AWSAuthHostedUiConfig({ + String? clientId, + String? clientSecret, required String domainName, required List signInRedirectUris, required List signOutRedirectUris, @@ -24,6 +26,8 @@ abstract class AWSAuthHostedUiConfig Uri? tokenUri, }) { return _$AWSAuthHostedUiConfig._( + clientId: clientId, + clientSecret: clientSecret, domainName: domainName, signInRedirectUris: _i2.BuiltList(signInRedirectUris), signOutRedirectUris: _i2.BuiltList(signOutRedirectUris), @@ -46,6 +50,8 @@ abstract class AWSAuthHostedUiConfig @BuiltValueHook(initializeBuilder: true) static void _init(AWSAuthHostedUiConfigBuilder b) {} + String? get clientId; + String? get clientSecret; /// The host component of a URI String get domainName; @@ -63,6 +69,8 @@ abstract class AWSAuthHostedUiConfig Uri? get tokenUri; @override List get props => [ + clientId, + clientSecret, domainName, signInRedirectUris, signOutRedirectUris, @@ -74,6 +82,14 @@ abstract class AWSAuthHostedUiConfig @override String toString() { final helper = newBuiltValueToStringHelper('AWSAuthHostedUiConfig') + ..add( + 'clientId', + clientId, + ) + ..add( + 'clientSecret', + clientSecret, + ) ..add( 'domainName', domainName, @@ -138,6 +154,16 @@ class AWSAuthHostedUiConfigSerializer continue; } switch (key) { + case 'clientId': + result.clientId = (serializers.deserialize( + value, + specifiedType: const FullType(String), + ) as String); + case 'clientSecret': + result.clientSecret = (serializers.deserialize( + value, + specifiedType: const FullType(String), + ) as String); case 'domainName': result.domainName = (serializers.deserialize( value, @@ -196,6 +222,8 @@ class AWSAuthHostedUiConfigSerializer }) { final result$ = []; final AWSAuthHostedUiConfig( + :clientId, + :clientSecret, :domainName, :scopes, :signInRedirectUris, @@ -235,6 +263,22 @@ class AWSAuthHostedUiConfigSerializer ), ), ]); + if (clientId != null) { + result$ + ..add('clientId') + ..add(serializers.serialize( + clientId, + specifiedType: const FullType(String), + )); + } + if (clientSecret != null) { + result$ + ..add('clientSecret') + ..add(serializers.serialize( + clientSecret, + specifiedType: const FullType(String), + )); + } if (signInUri != null) { result$ ..add('signInUri') diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.g.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.g.dart index 83d34e7b34..ab75849622 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.g.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.g.dart @@ -7,6 +7,10 @@ part of 'aws_auth_hosted_ui_config.dart'; // ************************************************************************** class _$AWSAuthHostedUiConfig extends AWSAuthHostedUiConfig { + @override + final String? clientId; + @override + final String? clientSecret; @override final String domainName; @override @@ -27,7 +31,9 @@ class _$AWSAuthHostedUiConfig extends AWSAuthHostedUiConfig { (new AWSAuthHostedUiConfigBuilder()..update(updates))._build(); _$AWSAuthHostedUiConfig._( - {required this.domainName, + {this.clientId, + this.clientSecret, + required this.domainName, required this.signInRedirectUris, required this.signOutRedirectUris, required this.scopes, @@ -58,6 +64,8 @@ class _$AWSAuthHostedUiConfig extends AWSAuthHostedUiConfig { bool operator ==(Object other) { if (identical(other, this)) return true; return other is AWSAuthHostedUiConfig && + clientId == other.clientId && + clientSecret == other.clientSecret && domainName == other.domainName && signInRedirectUris == other.signInRedirectUris && signOutRedirectUris == other.signOutRedirectUris && @@ -70,6 +78,8 @@ class _$AWSAuthHostedUiConfig extends AWSAuthHostedUiConfig { @override int get hashCode { var _$hash = 0; + _$hash = $jc(_$hash, clientId.hashCode); + _$hash = $jc(_$hash, clientSecret.hashCode); _$hash = $jc(_$hash, domainName.hashCode); _$hash = $jc(_$hash, signInRedirectUris.hashCode); _$hash = $jc(_$hash, signOutRedirectUris.hashCode); @@ -86,6 +96,14 @@ class AWSAuthHostedUiConfigBuilder implements Builder { _$AWSAuthHostedUiConfig? _$v; + String? _clientId; + String? get clientId => _$this._clientId; + set clientId(String? clientId) => _$this._clientId = clientId; + + String? _clientSecret; + String? get clientSecret => _$this._clientSecret; + set clientSecret(String? clientSecret) => _$this._clientSecret = clientSecret; + String? _domainName; String? get domainName => _$this._domainName; set domainName(String? domainName) => _$this._domainName = domainName; @@ -126,6 +144,8 @@ class AWSAuthHostedUiConfigBuilder AWSAuthHostedUiConfigBuilder get _$this { final $v = _$v; if ($v != null) { + _clientId = $v.clientId; + _clientSecret = $v.clientSecret; _domainName = $v.domainName; _signInRedirectUris = $v.signInRedirectUris.toBuilder(); _signOutRedirectUris = $v.signOutRedirectUris.toBuilder(); @@ -157,6 +177,8 @@ class AWSAuthHostedUiConfigBuilder try { _$result = _$v ?? new _$AWSAuthHostedUiConfig._( + clientId: clientId, + clientSecret: clientSecret, domainName: BuiltValueNullFieldError.checkNotNull( domainName, r'AWSAuthHostedUiConfig', 'domainName'), signInRedirectUris: signInRedirectUris.build(), diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.dart index e0404c71cf..e893352b37 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.dart @@ -3,26 +3,24 @@ library amplify_core.amplify_configuration_service.model.aws_auth_user_pool_config; // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'package:amplify_core/amplify_core.dart' as _i5; +import 'package:amplify_core/amplify_core.dart' as _i2; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_analytics_pinpoint_config.dart' - as _i6; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_flow_type.dart' - as _i2; + as _i5; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_hosted_ui_config.dart' - as _i9; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_mfa_configuration.dart' as _i8; -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_password_protection_settings.dart' +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_mfa_configuration.dart' as _i7; +import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_password_protection_settings.dart' + as _i6; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_provider.dart' as _i3; import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/aws_auth_username_attribute.dart' as _i4; import 'package:aws_common/aws_common.dart' as _i1; -import 'package:built_collection/built_collection.dart' as _i10; +import 'package:built_collection/built_collection.dart' as _i9; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; -import 'package:smithy/smithy.dart' as _i11; +import 'package:smithy/smithy.dart' as _i10; part 'aws_auth_user_pool_config.g.dart'; @@ -35,15 +33,15 @@ abstract class AWSAuthUserPoolConfig required String clientId, String? clientSecret, Uri? endpoint, - _i2.AWSAuthFlowType? authFlowType, + _i2.AuthenticationFlowType? authFlowType, List<_i3.AWSAuthProvider>? socialProviders, Set<_i4.AWSAuthUsernameAttribute>? usernameAttributes, - Set<_i5.CognitoUserAttributeKey>? signUpAttributes, - Set<_i5.CognitoUserAttributeKey>? verificationMechanisms, - _i6.AWSAnalyticsPinpointConfig? pinpointConfig, - _i7.AWSAuthPasswordProtectionSettings? passwordProtectionSettings, - _i8.AWSAuthMfaConfiguration? mfaConfiguration, - _i9.AWSAuthHostedUiConfig? hostedUi, + Set<_i2.CognitoUserAttributeKey>? signUpAttributes, + Set<_i2.CognitoUserAttributeKey>? verificationMechanisms, + _i5.AWSAnalyticsPinpointConfig? pinpointConfig, + _i6.AWSAuthPasswordProtectionSettings? passwordProtectionSettings, + _i7.AWSAuthMfaConfiguration? mfaConfiguration, + _i8.AWSAuthHostedUiConfig? hostedUi, }) { return _$AWSAuthUserPoolConfig._( poolId: poolId, @@ -53,14 +51,14 @@ abstract class AWSAuthUserPoolConfig endpoint: endpoint, authFlowType: authFlowType, socialProviders: - socialProviders == null ? null : _i10.BuiltList(socialProviders), + socialProviders == null ? null : _i9.BuiltList(socialProviders), usernameAttributes: - usernameAttributes == null ? null : _i10.BuiltSet(usernameAttributes), + usernameAttributes == null ? null : _i9.BuiltSet(usernameAttributes), signUpAttributes: - signUpAttributes == null ? null : _i10.BuiltSet(signUpAttributes), + signUpAttributes == null ? null : _i9.BuiltSet(signUpAttributes), verificationMechanisms: verificationMechanisms == null ? null - : _i10.BuiltSet(verificationMechanisms), + : _i9.BuiltSet(verificationMechanisms), pinpointConfig: pinpointConfig, passwordProtectionSettings: passwordProtectionSettings, mfaConfiguration: mfaConfiguration, @@ -74,7 +72,7 @@ abstract class AWSAuthUserPoolConfig const AWSAuthUserPoolConfig._(); - static const List<_i11.SmithySerializer> serializers = + static const List<_i10.SmithySerializer> serializers = [AWSAuthUserPoolConfigSerializer()]; @BuiltValueHook(initializeBuilder: true) @@ -86,15 +84,15 @@ abstract class AWSAuthUserPoolConfig /// A valid RFC 3986 URI Uri? get endpoint; - _i2.AWSAuthFlowType? get authFlowType; - _i10.BuiltList<_i3.AWSAuthProvider>? get socialProviders; - _i10.BuiltSet<_i4.AWSAuthUsernameAttribute>? get usernameAttributes; - _i10.BuiltSet<_i5.CognitoUserAttributeKey>? get signUpAttributes; - _i10.BuiltSet<_i5.CognitoUserAttributeKey>? get verificationMechanisms; - _i6.AWSAnalyticsPinpointConfig? get pinpointConfig; - _i7.AWSAuthPasswordProtectionSettings? get passwordProtectionSettings; - _i8.AWSAuthMfaConfiguration? get mfaConfiguration; - _i9.AWSAuthHostedUiConfig? get hostedUi; + _i2.AuthenticationFlowType? get authFlowType; + _i9.BuiltList<_i3.AWSAuthProvider>? get socialProviders; + _i9.BuiltSet<_i4.AWSAuthUsernameAttribute>? get usernameAttributes; + _i9.BuiltSet<_i2.CognitoUserAttributeKey>? get signUpAttributes; + _i9.BuiltSet<_i2.CognitoUserAttributeKey>? get verificationMechanisms; + _i5.AWSAnalyticsPinpointConfig? get pinpointConfig; + _i6.AWSAuthPasswordProtectionSettings? get passwordProtectionSettings; + _i7.AWSAuthMfaConfiguration? get mfaConfiguration; + _i8.AWSAuthHostedUiConfig? get hostedUi; @override List get props => [ poolId, @@ -176,7 +174,7 @@ abstract class AWSAuthUserPoolConfig } class AWSAuthUserPoolConfigSerializer - extends _i11.StructuredSmithySerializer { + extends _i10.StructuredSmithySerializer { const AWSAuthUserPoolConfigSerializer() : super('AWSAuthUserPoolConfig'); @override @@ -185,8 +183,8 @@ class AWSAuthUserPoolConfigSerializer _$AWSAuthUserPoolConfig, ]; @override - Iterable<_i11.ShapeId> get supportedProtocols => const [ - _i11.ShapeId( + Iterable<_i10.ShapeId> get supportedProtocols => const [ + _i10.ShapeId( namespace: 'smithy.dart', shape: 'genericProtocol', ) @@ -210,8 +208,8 @@ class AWSAuthUserPoolConfigSerializer case 'authFlowType': result.authFlowType = (serializers.deserialize( value, - specifiedType: const FullType(_i2.AWSAuthFlowType), - ) as _i2.AWSAuthFlowType); + specifiedType: const FullType(_i2.AuthenticationFlowType), + ) as _i2.AuthenticationFlowType); case 'clientId': result.clientId = (serializers.deserialize( value, @@ -230,24 +228,24 @@ class AWSAuthUserPoolConfigSerializer case 'hostedUi': result.hostedUi.replace((serializers.deserialize( value, - specifiedType: const FullType(_i9.AWSAuthHostedUiConfig), - ) as _i9.AWSAuthHostedUiConfig)); + specifiedType: const FullType(_i8.AWSAuthHostedUiConfig), + ) as _i8.AWSAuthHostedUiConfig)); case 'mfaConfiguration': result.mfaConfiguration.replace((serializers.deserialize( value, - specifiedType: const FullType(_i8.AWSAuthMfaConfiguration), - ) as _i8.AWSAuthMfaConfiguration)); + specifiedType: const FullType(_i7.AWSAuthMfaConfiguration), + ) as _i7.AWSAuthMfaConfiguration)); case 'passwordProtectionSettings': result.passwordProtectionSettings.replace((serializers.deserialize( value, specifiedType: - const FullType(_i7.AWSAuthPasswordProtectionSettings), - ) as _i7.AWSAuthPasswordProtectionSettings)); + const FullType(_i6.AWSAuthPasswordProtectionSettings), + ) as _i6.AWSAuthPasswordProtectionSettings)); case 'pinpointConfig': result.pinpointConfig.replace((serializers.deserialize( value, - specifiedType: const FullType(_i6.AWSAnalyticsPinpointConfig), - ) as _i6.AWSAnalyticsPinpointConfig)); + specifiedType: const FullType(_i5.AWSAnalyticsPinpointConfig), + ) as _i5.AWSAnalyticsPinpointConfig)); case 'poolId': result.poolId = (serializers.deserialize( value, @@ -262,34 +260,34 @@ class AWSAuthUserPoolConfigSerializer result.signUpAttributes.replace((serializers.deserialize( value, specifiedType: const FullType( - _i10.BuiltSet, - [FullType(_i5.CognitoUserAttributeKey)], + _i9.BuiltSet, + [FullType(_i2.CognitoUserAttributeKey)], ), - ) as _i10.BuiltSet<_i5.CognitoUserAttributeKey>)); + ) as _i9.BuiltSet<_i2.CognitoUserAttributeKey>)); case 'socialProviders': result.socialProviders.replace((serializers.deserialize( value, specifiedType: const FullType( - _i10.BuiltList, + _i9.BuiltList, [FullType(_i3.AWSAuthProvider)], ), - ) as _i10.BuiltList<_i3.AWSAuthProvider>)); + ) as _i9.BuiltList<_i3.AWSAuthProvider>)); case 'usernameAttributes': result.usernameAttributes.replace((serializers.deserialize( value, specifiedType: const FullType( - _i10.BuiltSet, + _i9.BuiltSet, [FullType(_i4.AWSAuthUsernameAttribute)], ), - ) as _i10.BuiltSet<_i4.AWSAuthUsernameAttribute>)); + ) as _i9.BuiltSet<_i4.AWSAuthUsernameAttribute>)); case 'verificationMechanisms': result.verificationMechanisms.replace((serializers.deserialize( value, specifiedType: const FullType( - _i10.BuiltSet, - [FullType(_i5.CognitoUserAttributeKey)], + _i9.BuiltSet, + [FullType(_i2.CognitoUserAttributeKey)], ), - ) as _i10.BuiltSet<_i5.CognitoUserAttributeKey>)); + ) as _i9.BuiltSet<_i2.CognitoUserAttributeKey>)); } } @@ -341,7 +339,7 @@ class AWSAuthUserPoolConfigSerializer ..add('authFlowType') ..add(serializers.serialize( authFlowType, - specifiedType: const FullType(_i2.AWSAuthFlowType), + specifiedType: const FullType(_i2.AuthenticationFlowType), )); } if (clientSecret != null) { @@ -365,7 +363,7 @@ class AWSAuthUserPoolConfigSerializer ..add('hostedUi') ..add(serializers.serialize( hostedUi, - specifiedType: const FullType(_i9.AWSAuthHostedUiConfig), + specifiedType: const FullType(_i8.AWSAuthHostedUiConfig), )); } if (mfaConfiguration != null) { @@ -373,7 +371,7 @@ class AWSAuthUserPoolConfigSerializer ..add('mfaConfiguration') ..add(serializers.serialize( mfaConfiguration, - specifiedType: const FullType(_i8.AWSAuthMfaConfiguration), + specifiedType: const FullType(_i7.AWSAuthMfaConfiguration), )); } if (passwordProtectionSettings != null) { @@ -381,7 +379,7 @@ class AWSAuthUserPoolConfigSerializer ..add('passwordProtectionSettings') ..add(serializers.serialize( passwordProtectionSettings, - specifiedType: const FullType(_i7.AWSAuthPasswordProtectionSettings), + specifiedType: const FullType(_i6.AWSAuthPasswordProtectionSettings), )); } if (pinpointConfig != null) { @@ -389,7 +387,7 @@ class AWSAuthUserPoolConfigSerializer ..add('pinpointConfig') ..add(serializers.serialize( pinpointConfig, - specifiedType: const FullType(_i6.AWSAnalyticsPinpointConfig), + specifiedType: const FullType(_i5.AWSAnalyticsPinpointConfig), )); } if (signUpAttributes != null) { @@ -398,8 +396,8 @@ class AWSAuthUserPoolConfigSerializer ..add(serializers.serialize( signUpAttributes, specifiedType: const FullType( - _i10.BuiltSet, - [FullType(_i5.CognitoUserAttributeKey)], + _i9.BuiltSet, + [FullType(_i2.CognitoUserAttributeKey)], ), )); } @@ -409,7 +407,7 @@ class AWSAuthUserPoolConfigSerializer ..add(serializers.serialize( socialProviders, specifiedType: const FullType( - _i10.BuiltList, + _i9.BuiltList, [FullType(_i3.AWSAuthProvider)], ), )); @@ -420,7 +418,7 @@ class AWSAuthUserPoolConfigSerializer ..add(serializers.serialize( usernameAttributes, specifiedType: const FullType( - _i10.BuiltSet, + _i9.BuiltSet, [FullType(_i4.AWSAuthUsernameAttribute)], ), )); @@ -431,8 +429,8 @@ class AWSAuthUserPoolConfigSerializer ..add(serializers.serialize( verificationMechanisms, specifiedType: const FullType( - _i10.BuiltSet, - [FullType(_i5.CognitoUserAttributeKey)], + _i9.BuiltSet, + [FullType(_i2.CognitoUserAttributeKey)], ), )); } diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.g.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.g.dart index 2e2d19f852..319f808024 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.g.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_auth_user_pool_config.g.dart @@ -18,23 +18,23 @@ class _$AWSAuthUserPoolConfig extends AWSAuthUserPoolConfig { @override final Uri? endpoint; @override - final _i2.AWSAuthFlowType? authFlowType; + final _i2.AuthenticationFlowType? authFlowType; @override - final _i10.BuiltList<_i3.AWSAuthProvider>? socialProviders; + final _i9.BuiltList<_i3.AWSAuthProvider>? socialProviders; @override - final _i10.BuiltSet<_i4.AWSAuthUsernameAttribute>? usernameAttributes; + final _i9.BuiltSet<_i4.AWSAuthUsernameAttribute>? usernameAttributes; @override - final _i10.BuiltSet<_i5.CognitoUserAttributeKey>? signUpAttributes; + final _i9.BuiltSet<_i2.CognitoUserAttributeKey>? signUpAttributes; @override - final _i10.BuiltSet<_i5.CognitoUserAttributeKey>? verificationMechanisms; + final _i9.BuiltSet<_i2.CognitoUserAttributeKey>? verificationMechanisms; @override - final _i6.AWSAnalyticsPinpointConfig? pinpointConfig; + final _i5.AWSAnalyticsPinpointConfig? pinpointConfig; @override - final _i7.AWSAuthPasswordProtectionSettings? passwordProtectionSettings; + final _i6.AWSAuthPasswordProtectionSettings? passwordProtectionSettings; @override - final _i8.AWSAuthMfaConfiguration? mfaConfiguration; + final _i7.AWSAuthMfaConfiguration? mfaConfiguration; @override - final _i9.AWSAuthHostedUiConfig? hostedUi; + final _i8.AWSAuthHostedUiConfig? hostedUi; factory _$AWSAuthUserPoolConfig( [void Function(AWSAuthUserPoolConfigBuilder)? updates]) => @@ -139,67 +139,67 @@ class AWSAuthUserPoolConfigBuilder Uri? get endpoint => _$this._endpoint; set endpoint(Uri? endpoint) => _$this._endpoint = endpoint; - _i2.AWSAuthFlowType? _authFlowType; - _i2.AWSAuthFlowType? get authFlowType => _$this._authFlowType; - set authFlowType(_i2.AWSAuthFlowType? authFlowType) => + _i2.AuthenticationFlowType? _authFlowType; + _i2.AuthenticationFlowType? get authFlowType => _$this._authFlowType; + set authFlowType(_i2.AuthenticationFlowType? authFlowType) => _$this._authFlowType = authFlowType; - _i10.ListBuilder<_i3.AWSAuthProvider>? _socialProviders; - _i10.ListBuilder<_i3.AWSAuthProvider> get socialProviders => - _$this._socialProviders ??= new _i10.ListBuilder<_i3.AWSAuthProvider>(); - set socialProviders(_i10.ListBuilder<_i3.AWSAuthProvider>? socialProviders) => + _i9.ListBuilder<_i3.AWSAuthProvider>? _socialProviders; + _i9.ListBuilder<_i3.AWSAuthProvider> get socialProviders => + _$this._socialProviders ??= new _i9.ListBuilder<_i3.AWSAuthProvider>(); + set socialProviders(_i9.ListBuilder<_i3.AWSAuthProvider>? socialProviders) => _$this._socialProviders = socialProviders; - _i10.SetBuilder<_i4.AWSAuthUsernameAttribute>? _usernameAttributes; - _i10.SetBuilder<_i4.AWSAuthUsernameAttribute> get usernameAttributes => + _i9.SetBuilder<_i4.AWSAuthUsernameAttribute>? _usernameAttributes; + _i9.SetBuilder<_i4.AWSAuthUsernameAttribute> get usernameAttributes => _$this._usernameAttributes ??= - new _i10.SetBuilder<_i4.AWSAuthUsernameAttribute>(); + new _i9.SetBuilder<_i4.AWSAuthUsernameAttribute>(); set usernameAttributes( - _i10.SetBuilder<_i4.AWSAuthUsernameAttribute>? usernameAttributes) => + _i9.SetBuilder<_i4.AWSAuthUsernameAttribute>? usernameAttributes) => _$this._usernameAttributes = usernameAttributes; - _i10.SetBuilder<_i5.CognitoUserAttributeKey>? _signUpAttributes; - _i10.SetBuilder<_i5.CognitoUserAttributeKey> get signUpAttributes => + _i9.SetBuilder<_i2.CognitoUserAttributeKey>? _signUpAttributes; + _i9.SetBuilder<_i2.CognitoUserAttributeKey> get signUpAttributes => _$this._signUpAttributes ??= - new _i10.SetBuilder<_i5.CognitoUserAttributeKey>(); + new _i9.SetBuilder<_i2.CognitoUserAttributeKey>(); set signUpAttributes( - _i10.SetBuilder<_i5.CognitoUserAttributeKey>? signUpAttributes) => + _i9.SetBuilder<_i2.CognitoUserAttributeKey>? signUpAttributes) => _$this._signUpAttributes = signUpAttributes; - _i10.SetBuilder<_i5.CognitoUserAttributeKey>? _verificationMechanisms; - _i10.SetBuilder<_i5.CognitoUserAttributeKey> get verificationMechanisms => + _i9.SetBuilder<_i2.CognitoUserAttributeKey>? _verificationMechanisms; + _i9.SetBuilder<_i2.CognitoUserAttributeKey> get verificationMechanisms => _$this._verificationMechanisms ??= - new _i10.SetBuilder<_i5.CognitoUserAttributeKey>(); + new _i9.SetBuilder<_i2.CognitoUserAttributeKey>(); set verificationMechanisms( - _i10.SetBuilder<_i5.CognitoUserAttributeKey>? + _i9.SetBuilder<_i2.CognitoUserAttributeKey>? verificationMechanisms) => _$this._verificationMechanisms = verificationMechanisms; - _i6.AWSAnalyticsPinpointConfigBuilder? _pinpointConfig; - _i6.AWSAnalyticsPinpointConfigBuilder get pinpointConfig => - _$this._pinpointConfig ??= new _i6.AWSAnalyticsPinpointConfigBuilder(); - set pinpointConfig(_i6.AWSAnalyticsPinpointConfigBuilder? pinpointConfig) => + _i5.AWSAnalyticsPinpointConfigBuilder? _pinpointConfig; + _i5.AWSAnalyticsPinpointConfigBuilder get pinpointConfig => + _$this._pinpointConfig ??= new _i5.AWSAnalyticsPinpointConfigBuilder(); + set pinpointConfig(_i5.AWSAnalyticsPinpointConfigBuilder? pinpointConfig) => _$this._pinpointConfig = pinpointConfig; - _i7.AWSAuthPasswordProtectionSettingsBuilder? _passwordProtectionSettings; - _i7.AWSAuthPasswordProtectionSettingsBuilder get passwordProtectionSettings => + _i6.AWSAuthPasswordProtectionSettingsBuilder? _passwordProtectionSettings; + _i6.AWSAuthPasswordProtectionSettingsBuilder get passwordProtectionSettings => _$this._passwordProtectionSettings ??= - new _i7.AWSAuthPasswordProtectionSettingsBuilder(); + new _i6.AWSAuthPasswordProtectionSettingsBuilder(); set passwordProtectionSettings( - _i7.AWSAuthPasswordProtectionSettingsBuilder? + _i6.AWSAuthPasswordProtectionSettingsBuilder? passwordProtectionSettings) => _$this._passwordProtectionSettings = passwordProtectionSettings; - _i8.AWSAuthMfaConfigurationBuilder? _mfaConfiguration; - _i8.AWSAuthMfaConfigurationBuilder get mfaConfiguration => - _$this._mfaConfiguration ??= new _i8.AWSAuthMfaConfigurationBuilder(); - set mfaConfiguration(_i8.AWSAuthMfaConfigurationBuilder? mfaConfiguration) => + _i7.AWSAuthMfaConfigurationBuilder? _mfaConfiguration; + _i7.AWSAuthMfaConfigurationBuilder get mfaConfiguration => + _$this._mfaConfiguration ??= new _i7.AWSAuthMfaConfigurationBuilder(); + set mfaConfiguration(_i7.AWSAuthMfaConfigurationBuilder? mfaConfiguration) => _$this._mfaConfiguration = mfaConfiguration; - _i9.AWSAuthHostedUiConfigBuilder? _hostedUi; - _i9.AWSAuthHostedUiConfigBuilder get hostedUi => - _$this._hostedUi ??= new _i9.AWSAuthHostedUiConfigBuilder(); - set hostedUi(_i9.AWSAuthHostedUiConfigBuilder? hostedUi) => + _i8.AWSAuthHostedUiConfigBuilder? _hostedUi; + _i8.AWSAuthHostedUiConfigBuilder get hostedUi => + _$this._hostedUi ??= new _i8.AWSAuthHostedUiConfigBuilder(); + set hostedUi(_i8.AWSAuthHostedUiConfigBuilder? hostedUi) => _$this._hostedUi = hostedUi; AWSAuthUserPoolConfigBuilder() { diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.dart index 6b02e5c4fd..3211152dd2 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.dart @@ -44,7 +44,7 @@ abstract class AWSStorageS3Bucket String get bucketName; String get region; - _i2.StorageAccessLevel? get defaultAccessLevel; + _i2.StorageAccessLevel get defaultAccessLevel; @override List get props => [ bucketName, @@ -138,20 +138,17 @@ class AWSStorageS3BucketSerializer bucketName, specifiedType: const FullType(String), ), + 'defaultAccessLevel', + serializers.serialize( + defaultAccessLevel, + specifiedType: const FullType(_i2.StorageAccessLevel), + ), 'region', serializers.serialize( region, specifiedType: const FullType(String), ), ]); - if (defaultAccessLevel != null) { - result$ - ..add('defaultAccessLevel') - ..add(serializers.serialize( - defaultAccessLevel, - specifiedType: const FullType(_i2.StorageAccessLevel), - )); - } return result$; } } diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.g.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.g.dart index 1a44ffb961..89096b4bde 100644 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.g.dart +++ b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/aws_storage_s3_bucket.g.dart @@ -12,19 +12,23 @@ class _$AWSStorageS3Bucket extends AWSStorageS3Bucket { @override final String region; @override - final _i2.StorageAccessLevel? defaultAccessLevel; + final _i2.StorageAccessLevel defaultAccessLevel; factory _$AWSStorageS3Bucket( [void Function(AWSStorageS3BucketBuilder)? updates]) => (new AWSStorageS3BucketBuilder()..update(updates))._build(); _$AWSStorageS3Bucket._( - {required this.bucketName, required this.region, this.defaultAccessLevel}) + {required this.bucketName, + required this.region, + required this.defaultAccessLevel}) : super._() { BuiltValueNullFieldError.checkNotNull( bucketName, r'AWSStorageS3Bucket', 'bucketName'); BuiltValueNullFieldError.checkNotNull( region, r'AWSStorageS3Bucket', 'region'); + BuiltValueNullFieldError.checkNotNull( + defaultAccessLevel, r'AWSStorageS3Bucket', 'defaultAccessLevel'); } @override @@ -109,7 +113,10 @@ class AWSStorageS3BucketBuilder bucketName, r'AWSStorageS3Bucket', 'bucketName'), region: BuiltValueNullFieldError.checkNotNull( region, r'AWSStorageS3Bucket', 'region'), - defaultAccessLevel: defaultAccessLevel); + defaultAccessLevel: BuiltValueNullFieldError.checkNotNull( + defaultAccessLevel, + r'AWSStorageS3Bucket', + 'defaultAccessLevel')); replace(_$result); return _$result; } diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.dart deleted file mode 100644 index e506b3d18c..0000000000 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.dart +++ /dev/null @@ -1,177 +0,0 @@ -// Generated with smithy-dart 0.3.1. DO NOT MODIFY. -// ignore_for_file: avoid_unused_constructor_parameters,deprecated_member_use_from_same_package,non_constant_identifier_names - -library amplify_core.amplify_configuration_service.model.validation_exception; // ignore_for_file: no_leading_underscores_for_library_prefixes - -import 'package:amplify_core/src/generated/src/amplify_configuration_service/model/validation_exception_field.dart' - as _i3; -import 'package:aws_common/aws_common.dart' as _i1; -import 'package:built_collection/built_collection.dart' as _i4; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:smithy/smithy.dart' as _i2; - -part 'validation_exception.g.dart'; - -/// A standard error for input validation failures. This should be thrown by services when a member of the input structure falls outside of the modeled or documented constraints. -abstract class ValidationException - with _i1.AWSEquatable - implements - Built, - _i2.SmithyHttpException { - /// A standard error for input validation failures. This should be thrown by services when a member of the input structure falls outside of the modeled or documented constraints. - factory ValidationException({ - required String message, - List<_i3.ValidationExceptionField>? fieldList, - }) { - return _$ValidationException._( - message: message, - fieldList: fieldList == null ? null : _i4.BuiltList(fieldList), - ); - } - - /// A standard error for input validation failures. This should be thrown by services when a member of the input structure falls outside of the modeled or documented constraints. - factory ValidationException.build( - [void Function(ValidationExceptionBuilder) updates]) = - _$ValidationException; - - const ValidationException._(); - - /// Constructs a [ValidationException] from a [payload] and [response]. - factory ValidationException.fromResponse( - ValidationException payload, - _i1.AWSBaseHttpResponse response, - ) => - payload.rebuild((b) { - b.statusCode = response.statusCode; - b.headers = response.headers; - }); - - static const List<_i2.SmithySerializer> serializers = [ - ValidationExceptionSerializer() - ]; - - @BuiltValueHook(initializeBuilder: true) - static void _init(ValidationExceptionBuilder b) {} - - /// A summary of the validation failure. - @override - String get message; - - /// A list of specific failures encountered while validating the input. A member can appear in this list more than once if it failed to satisfy multiple constraints. - _i4.BuiltList<_i3.ValidationExceptionField>? get fieldList; - @override - _i2.ShapeId get shapeId => const _i2.ShapeId( - namespace: 'smithy.framework', - shape: 'ValidationException', - ); - @override - _i2.RetryConfig? get retryConfig => null; - @override - @BuiltValueField(compare: false) - int? get statusCode; - @override - @BuiltValueField(compare: false) - Map? get headers; - @override - Exception? get underlyingException => null; - @override - List get props => [ - message, - fieldList, - ]; - @override - String toString() { - final helper = newBuiltValueToStringHelper('ValidationException') - ..add( - 'message', - message, - ) - ..add( - 'fieldList', - fieldList, - ); - return helper.toString(); - } -} - -class ValidationExceptionSerializer - extends _i2.StructuredSmithySerializer { - const ValidationExceptionSerializer() : super('ValidationException'); - - @override - Iterable get types => const [ - ValidationException, - _$ValidationException, - ]; - @override - Iterable<_i2.ShapeId> get supportedProtocols => const [ - _i2.ShapeId( - namespace: 'smithy.dart', - shape: 'genericProtocol', - ) - ]; - @override - ValidationException deserialize( - Serializers serializers, - Iterable serialized, { - FullType specifiedType = FullType.unspecified, - }) { - final result = ValidationExceptionBuilder(); - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current as String; - iterator.moveNext(); - final value = iterator.current; - if (value == null) { - continue; - } - switch (key) { - case 'fieldList': - result.fieldList.replace((serializers.deserialize( - value, - specifiedType: const FullType( - _i4.BuiltList, - [FullType(_i3.ValidationExceptionField)], - ), - ) as _i4.BuiltList<_i3.ValidationExceptionField>)); - case 'message': - result.message = (serializers.deserialize( - value, - specifiedType: const FullType(String), - ) as String); - } - } - - return result.build(); - } - - @override - Iterable serialize( - Serializers serializers, - ValidationException object, { - FullType specifiedType = FullType.unspecified, - }) { - final result$ = []; - final ValidationException(:fieldList, :message) = object; - result$.addAll([ - 'message', - serializers.serialize( - message, - specifiedType: const FullType(String), - ), - ]); - if (fieldList != null) { - result$ - ..add('fieldList') - ..add(serializers.serialize( - fieldList, - specifiedType: const FullType( - _i4.BuiltList, - [FullType(_i3.ValidationExceptionField)], - ), - )); - } - return result$; - } -} diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.g.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.g.dart deleted file mode 100644 index 79ade4de0f..0000000000 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception.g.dart +++ /dev/null @@ -1,135 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'validation_exception.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -class _$ValidationException extends ValidationException { - @override - final String message; - @override - final _i4.BuiltList<_i3.ValidationExceptionField>? fieldList; - @override - final int? statusCode; - @override - final Map? headers; - - factory _$ValidationException( - [void Function(ValidationExceptionBuilder)? updates]) => - (new ValidationExceptionBuilder()..update(updates))._build(); - - _$ValidationException._( - {required this.message, this.fieldList, this.statusCode, this.headers}) - : super._() { - BuiltValueNullFieldError.checkNotNull( - message, r'ValidationException', 'message'); - } - - @override - ValidationException rebuild( - void Function(ValidationExceptionBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - ValidationExceptionBuilder toBuilder() => - new ValidationExceptionBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is ValidationException && - message == other.message && - fieldList == other.fieldList; - } - - @override - int get hashCode { - var _$hash = 0; - _$hash = $jc(_$hash, message.hashCode); - _$hash = $jc(_$hash, fieldList.hashCode); - _$hash = $jf(_$hash); - return _$hash; - } -} - -class ValidationExceptionBuilder - implements Builder { - _$ValidationException? _$v; - - String? _message; - String? get message => _$this._message; - set message(String? message) => _$this._message = message; - - _i4.ListBuilder<_i3.ValidationExceptionField>? _fieldList; - _i4.ListBuilder<_i3.ValidationExceptionField> get fieldList => - _$this._fieldList ??= new _i4.ListBuilder<_i3.ValidationExceptionField>(); - set fieldList(_i4.ListBuilder<_i3.ValidationExceptionField>? fieldList) => - _$this._fieldList = fieldList; - - int? _statusCode; - int? get statusCode => _$this._statusCode; - set statusCode(int? statusCode) => _$this._statusCode = statusCode; - - Map? _headers; - Map? get headers => _$this._headers; - set headers(Map? headers) => _$this._headers = headers; - - ValidationExceptionBuilder() { - ValidationException._init(this); - } - - ValidationExceptionBuilder get _$this { - final $v = _$v; - if ($v != null) { - _message = $v.message; - _fieldList = $v.fieldList?.toBuilder(); - _statusCode = $v.statusCode; - _headers = $v.headers; - _$v = null; - } - return this; - } - - @override - void replace(ValidationException other) { - ArgumentError.checkNotNull(other, 'other'); - _$v = other as _$ValidationException; - } - - @override - void update(void Function(ValidationExceptionBuilder)? updates) { - if (updates != null) updates(this); - } - - @override - ValidationException build() => _build(); - - _$ValidationException _build() { - _$ValidationException _$result; - try { - _$result = _$v ?? - new _$ValidationException._( - message: BuiltValueNullFieldError.checkNotNull( - message, r'ValidationException', 'message'), - fieldList: _fieldList?.build(), - statusCode: statusCode, - headers: headers); - } catch (_) { - late String _$failedField; - try { - _$failedField = 'fieldList'; - _fieldList?.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - r'ValidationException', _$failedField, e.toString()); - } - rethrow; - } - replace(_$result); - return _$result; - } -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.dart deleted file mode 100644 index 8d56d3890c..0000000000 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.dart +++ /dev/null @@ -1,138 +0,0 @@ -// Generated with smithy-dart 0.3.1. DO NOT MODIFY. -// ignore_for_file: avoid_unused_constructor_parameters,deprecated_member_use_from_same_package,non_constant_identifier_names - -library amplify_core.amplify_configuration_service.model.validation_exception_field; // ignore_for_file: no_leading_underscores_for_library_prefixes - -import 'package:aws_common/aws_common.dart' as _i1; -import 'package:built_value/built_value.dart'; -import 'package:built_value/serializer.dart'; -import 'package:smithy/smithy.dart' as _i2; - -part 'validation_exception_field.g.dart'; - -/// Describes one specific validation failure for an input member. -abstract class ValidationExceptionField - with _i1.AWSEquatable - implements - Built { - /// Describes one specific validation failure for an input member. - factory ValidationExceptionField({ - required String path, - required String message, - }) { - return _$ValidationExceptionField._( - path: path, - message: message, - ); - } - - /// Describes one specific validation failure for an input member. - factory ValidationExceptionField.build( - [void Function(ValidationExceptionFieldBuilder) updates]) = - _$ValidationExceptionField; - - const ValidationExceptionField._(); - - static const List<_i2.SmithySerializer> - serializers = [ValidationExceptionFieldSerializer()]; - - @BuiltValueHook(initializeBuilder: true) - static void _init(ValidationExceptionFieldBuilder b) {} - - /// A JSONPointer expression to the structure member whose value failed to satisfy the modeled constraints. - String get path; - - /// A detailed description of the validation failure. - String get message; - @override - List get props => [ - path, - message, - ]; - @override - String toString() { - final helper = newBuiltValueToStringHelper('ValidationExceptionField') - ..add( - 'path', - path, - ) - ..add( - 'message', - message, - ); - return helper.toString(); - } -} - -class ValidationExceptionFieldSerializer - extends _i2.StructuredSmithySerializer { - const ValidationExceptionFieldSerializer() - : super('ValidationExceptionField'); - - @override - Iterable get types => const [ - ValidationExceptionField, - _$ValidationExceptionField, - ]; - @override - Iterable<_i2.ShapeId> get supportedProtocols => const [ - _i2.ShapeId( - namespace: 'smithy.dart', - shape: 'genericProtocol', - ) - ]; - @override - ValidationExceptionField deserialize( - Serializers serializers, - Iterable serialized, { - FullType specifiedType = FullType.unspecified, - }) { - final result = ValidationExceptionFieldBuilder(); - final iterator = serialized.iterator; - while (iterator.moveNext()) { - final key = iterator.current as String; - iterator.moveNext(); - final value = iterator.current; - if (value == null) { - continue; - } - switch (key) { - case 'message': - result.message = (serializers.deserialize( - value, - specifiedType: const FullType(String), - ) as String); - case 'path': - result.path = (serializers.deserialize( - value, - specifiedType: const FullType(String), - ) as String); - } - } - - return result.build(); - } - - @override - Iterable serialize( - Serializers serializers, - ValidationExceptionField object, { - FullType specifiedType = FullType.unspecified, - }) { - final result$ = []; - final ValidationExceptionField(:message, :path) = object; - result$.addAll([ - 'message', - serializers.serialize( - message, - specifiedType: const FullType(String), - ), - 'path', - serializers.serialize( - path, - specifiedType: const FullType(String), - ), - ]); - return result$; - } -} diff --git a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.g.dart b/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.g.dart deleted file mode 100644 index fde279c8c1..0000000000 --- a/packages/amplify_core/lib/src/generated/src/amplify_configuration_service/model/validation_exception_field.g.dart +++ /dev/null @@ -1,107 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'validation_exception_field.dart'; - -// ************************************************************************** -// BuiltValueGenerator -// ************************************************************************** - -class _$ValidationExceptionField extends ValidationExceptionField { - @override - final String path; - @override - final String message; - - factory _$ValidationExceptionField( - [void Function(ValidationExceptionFieldBuilder)? updates]) => - (new ValidationExceptionFieldBuilder()..update(updates))._build(); - - _$ValidationExceptionField._({required this.path, required this.message}) - : super._() { - BuiltValueNullFieldError.checkNotNull( - path, r'ValidationExceptionField', 'path'); - BuiltValueNullFieldError.checkNotNull( - message, r'ValidationExceptionField', 'message'); - } - - @override - ValidationExceptionField rebuild( - void Function(ValidationExceptionFieldBuilder) updates) => - (toBuilder()..update(updates)).build(); - - @override - ValidationExceptionFieldBuilder toBuilder() => - new ValidationExceptionFieldBuilder()..replace(this); - - @override - bool operator ==(Object other) { - if (identical(other, this)) return true; - return other is ValidationExceptionField && - path == other.path && - message == other.message; - } - - @override - int get hashCode { - var _$hash = 0; - _$hash = $jc(_$hash, path.hashCode); - _$hash = $jc(_$hash, message.hashCode); - _$hash = $jf(_$hash); - return _$hash; - } -} - -class ValidationExceptionFieldBuilder - implements - Builder { - _$ValidationExceptionField? _$v; - - String? _path; - String? get path => _$this._path; - set path(String? path) => _$this._path = path; - - String? _message; - String? get message => _$this._message; - set message(String? message) => _$this._message = message; - - ValidationExceptionFieldBuilder() { - ValidationExceptionField._init(this); - } - - ValidationExceptionFieldBuilder get _$this { - final $v = _$v; - if ($v != null) { - _path = $v.path; - _message = $v.message; - _$v = null; - } - return this; - } - - @override - void replace(ValidationExceptionField other) { - ArgumentError.checkNotNull(other, 'other'); - _$v = other as _$ValidationExceptionField; - } - - @override - void update(void Function(ValidationExceptionFieldBuilder)? updates) { - if (updates != null) updates(this); - } - - @override - ValidationExceptionField build() => _build(); - - _$ValidationExceptionField _build() { - final _$result = _$v ?? - new _$ValidationExceptionField._( - path: BuiltValueNullFieldError.checkNotNull( - path, r'ValidationExceptionField', 'path'), - message: BuiltValueNullFieldError.checkNotNull( - message, r'ValidationExceptionField', 'message')); - replace(_$result); - return _$result; - } -} - -// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/packages/amplify_core/lib/src/plugin/amplify_plugin_interface.dart b/packages/amplify_core/lib/src/plugin/amplify_plugin_interface.dart index c5c8d7addb..951a1e0b51 100644 --- a/packages/amplify_core/lib/src/plugin/amplify_plugin_interface.dart +++ b/packages/amplify_core/lib/src/plugin/amplify_plugin_interface.dart @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:meta/meta.dart'; @@ -27,7 +28,7 @@ abstract /* base */ class AmplifyPluginInterface { /// Configures the plugin using the registered [config]. Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async {} diff --git a/packages/amplify_core/lib/src/types/notifications/push/service_provider_client.dart b/packages/amplify_core/lib/src/types/notifications/push/service_provider_client.dart index 4231739d93..70d91a8f40 100644 --- a/packages/amplify_core/lib/src/types/notifications/push/service_provider_client.dart +++ b/packages/amplify_core/lib/src/types/notifications/push/service_provider_client.dart @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; /// {@template amplify_core.push.service_provider_client} @@ -11,7 +12,7 @@ import 'package:amplify_core/amplify_core.dart'; abstract class ServiceProviderClient { /// Initialize this client, used by the plugin during configuration. Future init({ - required NotificationsPinpointPluginConfig config, + required AWSPushNotificationsConfig config, required AmplifyAuthProviderRepository authProviderRepo, }); diff --git a/packages/amplify_core/model/api.smithy b/packages/amplify_core/model/api.smithy index d4d091d86b..53b37fc0b4 100644 --- a/packages/amplify_core/model/api.smithy +++ b/packages/amplify_core/model/api.smithy @@ -49,6 +49,15 @@ structure AWSAppSyncEndpointConfig with [AWSBaseEndpointConfig] { structure AWSApiGatewayEndpointConfig with [AWSBaseEndpointConfig] {} +// enum AWSApiAuthorizationMode { +// NONE +// API_KEY +// IAM +// USER_POOLS +// OIDC +// FUNCTION +// } + union AWSApiAuthorizationMode { none: Unit apiKey: ApiKey diff --git a/packages/amplify_core/model/auth.smithy b/packages/amplify_core/model/auth.smithy index 847f17c94d..ca58b692b9 100644 --- a/packages/amplify_core/model/auth.smithy +++ b/packages/amplify_core/model/auth.smithy @@ -141,6 +141,14 @@ list AWSAuthMfaTypes { } structure AWSAuthHostedUiConfig { + // Defaults to the value in AWSAuthUserPoolConfig + @clientOptional + clientId: String + + // Defaults to the value in AWSAuthUserPoolConfig + @clientOptional + clientSecret: String + @required domainName: DomainName diff --git a/packages/amplify_core/model/storage.smithy b/packages/amplify_core/model/storage.smithy index cd3d4a0485..6a5d39db61 100644 --- a/packages/amplify_core/model/storage.smithy +++ b/packages/amplify_core/model/storage.smithy @@ -18,6 +18,7 @@ structure AWSStorageS3Bucket { @required region: AWSRegion + @required defaultAccessLevel: AWSStorageAccessLevel = "guest" } diff --git a/packages/amplify_core/test/amplify_class_test.dart b/packages/amplify_core/test/amplify_class_test.dart index de24500a06..35cb1e7a56 100644 --- a/packages/amplify_core/test/amplify_class_test.dart +++ b/packages/amplify_core/test/amplify_class_test.dart @@ -3,6 +3,7 @@ import 'dart:async'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:test/test.dart'; @@ -72,7 +73,7 @@ void main() { class ConfigErrorPlugin extends AnalyticsPluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) { throw ConfigurationError('Could not configure'); @@ -82,7 +83,7 @@ class ConfigErrorPlugin extends AnalyticsPluginInterface { class NonConfigErrorPlugin extends AnalyticsPluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) { throw const UnknownException('Could not configure'); @@ -92,7 +93,7 @@ class NonConfigErrorPlugin extends AnalyticsPluginInterface { class SuccessPlugin extends AnalyticsPluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { return; @@ -107,7 +108,7 @@ class AsyncAddPlugin extends AnalyticsPluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { _configureCompleter.complete(); diff --git a/packages/amplify_core/tool/generate_config.dart b/packages/amplify_core/tool/generate_config.dart index e885179aea..6ef39e76a8 100644 --- a/packages/amplify_core/tool/generate_config.dart +++ b/packages/amplify_core/tool/generate_config.dart @@ -122,6 +122,11 @@ Future _generateFor({ const Reference('LogLevel', 'package:amplify_core/amplify_core.dart'), ShapeId.parse('com.amazonaws.amplify.core#AmplifyCategory'): const Reference('Category', 'package:amplify_core/amplify_core.dart'), + ShapeId.parse('com.amazonaws.amplify.core#AWSAuthFlowType'): + const Reference( + 'AuthenticationFlowType', + 'package:amplify_core/amplify_core.dart', + ), ShapeId.parse('com.amazonaws.amplify.core#AWSAuthMfaType'): const Reference('MfaType', 'package:amplify_core/amplify_core.dart'), ShapeId.parse('com.amazonaws.amplify.core#AWSAuthMfaStatus'): diff --git a/packages/amplify_datastore/lib/amplify_datastore.dart b/packages/amplify_datastore/lib/amplify_datastore.dart index dc35b8400f..9fbff3dfd9 100644 --- a/packages/amplify_datastore/lib/amplify_datastore.dart +++ b/packages/amplify_datastore/lib/amplify_datastore.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:convert'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_datastore/src/amplify_datastore_stream_controller.dart'; import 'package:amplify_datastore/src/method_channel_datastore.dart'; @@ -59,7 +60,7 @@ class AmplifyDataStore extends DataStorePluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { if (config == null) { @@ -112,9 +113,8 @@ class AmplifyDataStore extends DataStorePluginInterface { } final apiPlugin = Amplify.API.plugins.firstOrNull; - final gqlConfig = config.api?.awsPlugin?.all.values.firstWhereOrNull( - (config) => config.endpointType == EndpointType.graphQL, - ); + final gqlConfig = + config.api?.apis.values.map((v) => v.appSync).nonNulls.firstOrNull; if (apiPlugin != null && gqlConfig != null) { // ignore: invalid_use_of_protected_member final authProviders = apiPlugin.authProviders; diff --git a/packages/analytics/amplify_analytics_pinpoint_dart/lib/src/analytics_plugin_impl.dart b/packages/analytics/amplify_analytics_pinpoint_dart/lib/src/analytics_plugin_impl.dart index 2c19fc092a..780ac348c8 100644 --- a/packages/analytics/amplify_analytics_pinpoint_dart/lib/src/analytics_plugin_impl.dart +++ b/packages/analytics/amplify_analytics_pinpoint_dart/lib/src/analytics_plugin_impl.dart @@ -13,6 +13,7 @@ import 'package:amplify_analytics_pinpoint_dart/src/impl/flutter_provider_interf import 'package:amplify_analytics_pinpoint_dart/src/impl/flutter_provider_interfaces/cached_events_path_provider.dart'; import 'package:amplify_analytics_pinpoint_dart/src/impl/flutter_provider_interfaces/device_context_info_provider.dart'; import 'package:amplify_analytics_pinpoint_dart/src/impl/flutter_provider_interfaces/legacy_native_data_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:meta/meta.dart'; @@ -78,19 +79,17 @@ class AmplifyAnalyticsPinpointDart extends AnalyticsPluginInterface { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { // Parse config values from amplifyconfiguration.json - if (config == null || - config.analytics == null || - config.analytics?.awsPlugin == null) { + final pinpointConfig = config?.analytics?.pinpoint; + if (pinpointConfig == null) { throw ConfigurationError('No Pinpoint plugin config available.'); } - final pinpointConfig = config.analytics!.awsPlugin!; - final pinpointAppId = pinpointConfig.pinpointAnalytics.appId; - final region = pinpointConfig.pinpointAnalytics.region; + final pinpointAppId = pinpointConfig.appId; + final region = pinpointConfig.region; // Prepare PinpointClient final authProvider = authProviderRepo @@ -153,7 +152,9 @@ class AmplifyAnalyticsPinpointDart extends AnalyticsPluginInterface { }, ); - final autoFlushEventsInterval = pinpointConfig.autoFlushEventsInterval; + final autoFlushEventsInterval = Duration( + seconds: pinpointConfig.autoFlushEventsInterval, + ); if (autoFlushEventsInterval.isNegative) { throw ConfigurationError( diff --git a/packages/analytics/amplify_analytics_pinpoint_dart/test/analytics_plugin_config_test.dart b/packages/analytics/amplify_analytics_pinpoint_dart/test/analytics_plugin_config_test.dart index 98b5d2369e..cd89a99b92 100644 --- a/packages/analytics/amplify_analytics_pinpoint_dart/test/analytics_plugin_config_test.dart +++ b/packages/analytics/amplify_analytics_pinpoint_dart/test/analytics_plugin_config_test.dart @@ -5,6 +5,7 @@ import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/event_ import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/event_client/queued_item_store/queued_item_store.dart'; import 'package:amplify_analytics_pinpoint_dart/src/impl/flutter_provider_interfaces/cached_events_path_provider.dart'; import 'package:amplify_analytics_pinpoint_dart/src/sdk/src/pinpoint/model/session.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:mocktail/mocktail.dart'; import 'package:test/test.dart'; @@ -89,20 +90,11 @@ void main() { await expectLater( plugin.configure( - config: const AmplifyConfig( - analytics: AnalyticsConfig( - plugins: { - PinpointPluginConfig.pluginKey: PinpointPluginConfig( - pinpointAnalytics: PinpointAnalytics( - appId: appId, - region: region, - ), - pinpointTargeting: PinpointTargeting( - region: region, - ), - autoFlushEventsInterval: autoFlushInterval, - ), - }, + config: AWSAmplifyConfig( + analytics: AWSAnalyticsConfig.pinpoint( + appId: appId, + region: region, + autoFlushEventsInterval: autoFlushInterval, ), ), authProviderRepo: AmplifyAuthProviderRepository() @@ -124,20 +116,11 @@ void main() { ); await plugin.configure( - config: const AmplifyConfig( - analytics: AnalyticsConfig( - plugins: { - PinpointPluginConfig.pluginKey: PinpointPluginConfig( - pinpointAnalytics: PinpointAnalytics( - appId: appId, - region: region, - ), - pinpointTargeting: PinpointTargeting( - region: region, - ), - autoFlushEventsInterval: autoFlushInterval, - ), - }, + config: AWSAmplifyConfig( + analytics: AWSAnalyticsConfig.pinpoint( + appId: appId, + region: region, + autoFlushEventsInterval: autoFlushInterval, ), ), authProviderRepo: AmplifyAuthProviderRepository() @@ -159,20 +142,11 @@ void main() { ); await plugin.configure( - config: const AmplifyConfig( - analytics: AnalyticsConfig( - plugins: { - PinpointPluginConfig.pluginKey: PinpointPluginConfig( - pinpointAnalytics: PinpointAnalytics( - appId: appId, - region: region, - ), - pinpointTargeting: PinpointTargeting( - region: region, - ), - autoFlushEventsInterval: autoFlushInterval, - ), - }, + config: AWSAmplifyConfig( + analytics: AWSAnalyticsConfig.pinpoint( + appId: appId, + region: region, + autoFlushEventsInterval: autoFlushInterval, ), ), authProviderRepo: AmplifyAuthProviderRepository() diff --git a/packages/api/amplify_api_dart/lib/src/api_plugin_impl.dart b/packages/api/amplify_api_dart/lib/src/api_plugin_impl.dart index 0bd78213ce..531388ec95 100644 --- a/packages/api/amplify_api_dart/lib/src/api_plugin_impl.dart +++ b/packages/api/amplify_api_dart/lib/src/api_plugin_impl.dart @@ -12,7 +12,8 @@ import 'package:amplify_api_dart/src/graphql/web_socket/state/web_socket_state.d import 'package:amplify_api_dart/src/graphql/web_socket/types/connectivity_platform.dart'; import 'package:amplify_api_dart/src/util/amplify_api_config.dart'; import 'package:amplify_api_dart/src/util/amplify_authorization_rest_client.dart'; -import 'package:amplify_core/amplify_core.dart'; +import 'package:amplify_core/amplify_config.dart'; +import 'package:amplify_core/amplify_core.dart' hide AWSApiConfig; import 'package:meta/meta.dart'; /// {@template amplify_api_dart.amplify_api_dart} @@ -31,7 +32,7 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { authProviders.forEach(registerAuthProvider); } - late final AWSApiPluginConfig _apiConfig; + late final AWSApiConfig _apiConfig; final AWSHttpClient? _baseHttpClient; late final AmplifyAuthProviderRepository _authProviderRepo; @@ -68,10 +69,10 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { - final apiConfig = config?.api?.awsPlugin; + final apiConfig = config?.api; if (apiConfig == null) { throw ConfigurationError( 'No AWS API config found', @@ -79,13 +80,24 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { 'https://docs.amplify.aws/lib/graphqlapi/getting-started/q/platform/flutter/#configure-api', ); } - for (final entry in apiConfig.endpoints.entries) { - if (!entry.value.endpoint.startsWith('https')) { - throw ConfigurationError( - 'Non-HTTPS endpoint found for ${entry.key} which is not supported.', - recoverySuggestion: - 'Ensure the configured endpoint for ${entry.key} utilizes https.', - ); + for (final MapEntry(key: apiName, value: endpointConfig) + in apiConfig.apis.entries) { + switch (endpointConfig) { + case AWSApiEndpointConfigApiGateway$( + appSync: AWSApiGatewayEndpointConfig(:final endpoint) + ) || + AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig(:final endpoint) + ): + if (endpoint.scheme != 'https') { + throw ConfigurationError( + 'Non-HTTPS endpoint found for "$apiName" which is not supported.', + recoverySuggestion: + 'Ensure the configured endpoint for "$apiName" utilizes https.', + ); + } + case _: + break; } } _apiConfig = apiConfig; @@ -101,14 +113,32 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { /// /// Register OIDC/Lambda set to _authProviders in constructor. void _registerApiPluginAuthProviders() { - _apiConfig.endpoints.forEach((key, value) { - // Check the presence of apiKey (not auth type) because other modes might - // have a key if not the primary auth mode. - if (value.apiKey != null) { - _authProviderRepo.registerAuthProvider( - APIAuthorizationType.apiKey.authProviderToken, - AppSyncApiKeyAuthProvider(), - ); + _apiConfig.apis.forEach((apiName, endpointConfig) { + switch (endpointConfig) { + // Check the presence of apiKey (not auth type) because other modes might + // have a key if not the primary auth mode. + case AWSApiEndpointConfigApiGateway$( + apiGateway: AWSApiGatewayEndpointConfig( + authMode: AWSApiAuthorizationModeApiKey$ _ + ) + ) || + AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig( + authMode: AWSApiAuthorizationModeApiKey$ _ + ) + ): + case AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig(:final additionalAuthModes?) + ) + when additionalAuthModes + .whereType() + .isNotEmpty: + _authProviderRepo.registerAuthProvider( + APIAuthorizationType.apiKey.authProviderToken, + AppSyncApiKeyAuthProvider(), + ); + case _: + break; } }); @@ -150,7 +180,7 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { apiName: apiName, ); final authModeForClientKey = - authorizationMode ?? endpoint.config.authorizationType; + authorizationMode ?? endpoint.config.defaultAuthorizationType; final clientPoolKey = '${endpoint.name}.${authModeForClientKey.name}'; return _clientPool[clientPoolKey] ??= AmplifyHttpClient( dependencies, @@ -167,24 +197,25 @@ class AmplifyAPIDart extends APIPluginInterface with AWSDebuggable { final endpoint = _apiConfig.getEndpoint( type: EndpointType.graphQL, apiName: apiName, - ); - - return _webSocketBlocPool[endpoint.name] ??= createWebSocketBloc(endpoint) - ..stream.listen((event) { - _emitHubEvent(event); - if (event is PendingDisconnect) { - _webSocketBlocPool.remove(endpoint.name); - } - }); + ) as AWSApiEndpointConfigAppSync$; + + return _webSocketBlocPool[endpoint.name] ??= + createWebSocketBloc(endpoint.appSync) + ..stream.listen((event) { + _emitHubEvent(event); + if (event is PendingDisconnect) { + _webSocketBlocPool.remove(endpoint.name); + } + }); } /// Returns the websocket bloc to use for a given endpoint. /// /// Use [endpoint] if there are multiple endpoints. @visibleForTesting - WebSocketBloc createWebSocketBloc(EndpointConfig endpoint) { + WebSocketBloc createWebSocketBloc(AWSAppSyncEndpointConfig endpoint) { return WebSocketBloc( - config: endpoint.config, + config: endpoint, authProviderRepo: _authProviderRepo, wsService: AmplifyWebSocketService(), subscriptionOptions: diff --git a/packages/api/amplify_api_dart/lib/src/decorators/authorize_http_request.dart b/packages/api/amplify_api_dart/lib/src/decorators/authorize_http_request.dart index 4085676190..e86af9a7e9 100644 --- a/packages/api/amplify_api_dart/lib/src/decorators/authorize_http_request.dart +++ b/packages/api/amplify_api_dart/lib/src/decorators/authorize_http_request.dart @@ -4,6 +4,8 @@ import 'dart:async'; import 'package:amplify_api_dart/src/graphql/providers/app_sync_api_key_auth_provider.dart'; +import 'package:amplify_api_dart/src/util/amplify_api_config.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:meta/meta.dart'; @@ -12,11 +14,11 @@ import 'package:meta/meta.dart'; @internal Future authorizeHttpRequest( AWSBaseHttpRequest request, { - required AWSApiConfig endpointConfig, + required AWSApiEndpointConfig endpointConfig, required AmplifyAuthProviderRepository authProviderRepo, APIAuthorizationType? authorizationMode, }) async { - final authType = authorizationMode ?? endpointConfig.authorizationType; + final authType = authorizationMode ?? endpointConfig.defaultAuthorizationType; if (request.headers.containsKey(AWSHeaders.authorization) || (request.headers.containsKey(xApiKey) && authType == APIAuthorizationType.apiKey)) { @@ -31,7 +33,7 @@ Future authorizeHttpRequest( ), authType, ); - final apiKey = endpointConfig.apiKey; + final apiKey = endpointConfig.defaultAuthorizationMode?.apiKey; if (apiKey == null) { throw ConfigurationError( 'Auth mode is API Key, but no API Key was found in config.', @@ -60,7 +62,18 @@ Future authorizeHttpRequest( final authorizedRequest = await authProvider.authorizeRequest( request, options: IamAuthProviderOptions( - region: endpointConfig.region, + region: switch (endpointConfig) { + AWSApiEndpointConfigApiGateway$( + apiGateway: AWSApiGatewayEndpointConfig(:final region) + ) || + AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig(:final region) + ) => + region, + _ => throw ArgumentError( + 'IAM authorization is not supported for this endpoint', + ), + }, service: service, serviceConfiguration: serviceConfiguration, ), diff --git a/packages/api/amplify_api_dart/lib/src/decorators/web_socket_auth_utils.dart b/packages/api/amplify_api_dart/lib/src/decorators/web_socket_auth_utils.dart index f0ce2969fc..78f9ded16f 100644 --- a/packages/api/amplify_api_dart/lib/src/decorators/web_socket_auth_utils.dart +++ b/packages/api/amplify_api_dart/lib/src/decorators/web_socket_auth_utils.dart @@ -8,6 +8,7 @@ import 'dart:convert'; import 'package:amplify_api_dart/src/decorators/authorize_http_request.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/types/web_socket_types.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:meta/meta.dart'; @@ -31,7 +32,7 @@ const _emptyBody = {}; /// /// See https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#handshake-details-to-establish-the-websocket-connection= Future generateConnectionUri( - AWSApiConfig config, + AWSAppSyncEndpointConfig config, AmplifyAuthProviderRepository authRepo, ) async { // First, generate auth query parameters. @@ -48,7 +49,7 @@ Future generateConnectionUri( 'payload': base64.encode(utf8.encode(json.encode(_emptyBody))), }; // Conditionally format the URI for a) AppSync domain b) custom domain. - var endpointUriHost = Uri.parse(config.endpoint).host; + var endpointUriHost = config.endpoint.host; String path; if (endpointUriHost.contains(_appSyncHostPortion) && endpointUriHost.endsWith(_appSyncHostSuffix)) { @@ -78,7 +79,7 @@ Future generateConnectionUri( /// See https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#subscription-registration-message Future generateSubscriptionRegistrationMessage( - AWSApiConfig config, { + AWSAppSyncEndpointConfig config, { required String id, required AmplifyAuthProviderRepository authRepo, required GraphQLRequest request, @@ -113,14 +114,14 @@ Future /// the HTTP request are reformatted and returned. This logic applies for all auth /// modes as determined by [authRepo] parameter. Future> _generateAuthorizationHeaders( - AWSApiConfig config, { + AWSAppSyncEndpointConfig config, { required bool isConnectionInit, required AmplifyAuthProviderRepository authRepo, required Map body, APIAuthorizationType? authorizationMode, Map? customHeaders, }) async { - final endpointHost = Uri.parse(config.endpoint).host; + final endpointHost = config.endpoint.host; // Create canonical HTTP request to authorize but never send. // // The canonical request URL is a little different depending on if authorizing @@ -136,7 +137,7 @@ Future> _generateAuthorizationHeaders( ); final authorizedHttpRequest = await authorizeHttpRequest( canonicalHttpRequest, - endpointConfig: config, + endpointConfig: AWSApiEndpointConfigAppSync$(config), authProviderRepo: authRepo, authorizationMode: authorizationMode, ); diff --git a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/blocs/web_socket_bloc.dart b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/blocs/web_socket_bloc.dart index 3ea504efba..700dfba027 100644 --- a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/blocs/web_socket_bloc.dart +++ b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/blocs/web_socket_bloc.dart @@ -11,6 +11,7 @@ import 'package:amplify_api_dart/src/graphql/web_socket/state/ws_subscriptions_s import 'package:amplify_api_dart/src/graphql/web_socket/types/connectivity_platform.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/types/subscriptions_event.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/types/web_socket_types.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart' hide SubscriptionEvent; import 'package:async/async.dart'; import 'package:meta/meta.dart'; @@ -26,7 +27,7 @@ part '../types/web_socket_event.dart'; class WebSocketBloc with AWSDebuggable, AmplifyLoggerMixin { /// {@macro api.web_socket_bloc} WebSocketBloc({ - required AWSApiConfig config, + required AWSAppSyncEndpointConfig config, required AmplifyAuthProviderRepository authProviderRepo, required WebSocketService wsService, required GraphQLSubscriptionOptions subscriptionOptions, diff --git a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/state/web_socket_state.dart b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/state/web_socket_state.dart index 58fb10f51b..1ccf8076ea 100644 --- a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/state/web_socket_state.dart +++ b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/state/web_socket_state.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:amplify_api_dart/src/graphql/web_socket/blocs/subscriptions_bloc.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/services/web_socket_service.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:async/async.dart'; @@ -23,7 +24,7 @@ abstract class WebSocketState { ); /// AWS Config - final AWSApiConfig config; + final AWSAppSyncEndpointConfig config; /// Amplify Auth Provider final AmplifyAuthProviderRepository authProviderRepo; @@ -44,7 +45,7 @@ abstract class WebSocketState { final GraphQLSubscriptionOptions options; /// Poll URI - Uri get pollUri => Uri.parse(config.endpoint).replace(path: 'ping'); + Uri get pollUri => config.endpoint.replace(path: 'ping'); /// Move state to [ConnectingState] ConnectingState connecting({ diff --git a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart index 61b24c0b15..46e85290dd 100644 --- a/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart +++ b/packages/api/amplify_api_dart/lib/src/graphql/web_socket/types/web_socket_types.dart @@ -8,6 +8,7 @@ library amplify_api.graphql.ws.web_socket_types; import 'dart:convert'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:meta/meta.dart'; @@ -99,7 +100,7 @@ class SubscriptionRegistrationPayload extends WebSocketMessagePayload { required this.authorizationHeaders, }); final GraphQLRequest request; - final AWSApiConfig config; + final AWSAppSyncEndpointConfig config; final Map authorizationHeaders; @override diff --git a/packages/api/amplify_api_dart/lib/src/util/amplify_api_config.dart b/packages/api/amplify_api_dart/lib/src/util/amplify_api_config.dart index cc343dfb8f..4465066b7b 100644 --- a/packages/api/amplify_api_dart/lib/src/util/amplify_api_config.dart +++ b/packages/api/amplify_api_dart/lib/src/util/amplify_api_config.dart @@ -1,8 +1,8 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import 'package:amplify_core/amplify_core.dart'; -import 'package:collection/collection.dart'; +import 'package:amplify_core/amplify_config.dart'; +import 'package:amplify_core/amplify_core.dart' hide AWSApiConfig; import 'package:meta/meta.dart'; const _slash = '/'; @@ -17,7 +17,7 @@ class EndpointConfig with AWSEquatable { final String name; /// The value in the Amplify configuration file which as config details. - final AWSApiConfig config; + final AWSApiEndpointConfig config; @override List get props => [name, config]; @@ -26,7 +26,21 @@ class EndpointConfig with AWSEquatable { /// with [path] and [queryParameters] to return a full [Uri]. Uri getUri({String? path, Map? queryParameters}) { path = path ?? ''; - final parsed = Uri.parse(config.endpoint); + final parsed = switch (config) { + AWSApiEndpointConfigApiGateway$( + value: AWSApiGatewayEndpointConfig(:final endpoint) + ) => + endpoint, + AWSApiEndpointConfigAppSync$( + value: AWSAppSyncEndpointConfig(:final endpoint) + ) => + endpoint, + AWSApiEndpointConfigRest$( + value: AWSRestEndpointConfig(:final endpoint) + ) => + endpoint, + _ => throw ArgumentError('Invalid API endpoint: $config'), + }; // Remove leading slashes which are suggested in public documentation. // https://docs.amplify.aws/lib/restapi/getting-started/q/platform/flutter/#make-a-post-request if (path.startsWith(_slash)) { @@ -46,23 +60,24 @@ class EndpointConfig with AWSEquatable { /// Allows getting desired endpoint more easily. @internal -extension AWSApiPluginConfigHelpers on AWSApiPluginConfig { +extension AWSApiPluginConfigHelpers on AWSApiConfig { /// Finds the first endpoint matching the type and apiName. EndpointConfig getEndpoint({ required EndpointType type, String? apiName, }) { - final typeConfigs = - entries.where((config) => config.value.endpointType == type); if (apiName != null) { - final config = typeConfigs.firstWhere( - (config) => config.key == apiName, - orElse: () => throw ConfigurationError( + final config = apis[apiName]; + if (config == null || config.endpointType != type) { + throw ConfigurationError( 'No API endpoint found matching apiName $apiName.', - ), - ); - return EndpointConfig(config.key, config.value); + ); + } + return EndpointConfig(apiName, config); } + + final typeConfigs = + apis.entries.where((entry) => entry.value.endpointType == type); final onlyConfig = typeConfigs.singleOrNull; if (onlyConfig == null) { throw ConfigurationError( @@ -73,3 +88,54 @@ extension AWSApiPluginConfigHelpers on AWSApiPluginConfig { return EndpointConfig(onlyConfig.key, onlyConfig.value); } } + +/// Helpers for working with [AWSApiEndpointConfig]. +@internal +extension AWSApiEndpointConfigHelpers on AWSApiEndpointConfig { + /// The endpoint type of this. + EndpointType get endpointType => switch (this) { + AWSApiEndpointConfigAppSync$ _ => EndpointType.graphQL, + AWSApiEndpointConfigApiGateway$ _ || + AWSApiEndpointConfigRest$ _ => + EndpointType.graphQL, + _ => throw ArgumentError('Invalid API: $this'), + }; + + /// The default API authorization mode. + AWSApiAuthorizationMode? get defaultAuthorizationMode => switch (this) { + AWSApiEndpointConfigRest$ _ => null, + AWSApiEndpointConfigApiGateway$( + apiGateway: AWSApiGatewayEndpointConfig(:final authMode) + ) || + AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig(:final authMode) + ) => + authMode, + _ => throw ArgumentError('Invalid endpoint config: $this'), + }; + + /// The default API authorization type. + APIAuthorizationType get defaultAuthorizationType => + switch (defaultAuthorizationMode) { + null => APIAuthorizationType.none, + final authMode => authMode.authorizationType, + }; + + /// The API key for the endpoint. + String? get apiKey => switch (defaultAuthorizationMode) { + AWSApiAuthorizationModeApiKey$(:final apiKey) => apiKey, + _ => null, + }; +} + +extension on AWSApiAuthorizationMode { + APIAuthorizationType get authorizationType => switch (this) { + AWSApiAuthorizationModeNone$ _ => APIAuthorizationType.none, + AWSApiAuthorizationModeApiKey$ _ => APIAuthorizationType.apiKey, + AWSApiAuthorizationModeIam$ _ => APIAuthorizationType.iam, + AWSApiAuthorizationModeUserPools$ _ => APIAuthorizationType.userPools, + AWSApiAuthorizationModeOidc$ _ => APIAuthorizationType.oidc, + AWSApiAuthorizationModeFunction$ _ => APIAuthorizationType.function, + _ => throw ArgumentError('Invalid authorization type: $this'), + }; +} diff --git a/packages/api/amplify_api_dart/lib/src/util/amplify_authorization_rest_client.dart b/packages/api/amplify_api_dart/lib/src/util/amplify_authorization_rest_client.dart index 3b1478d1dd..3da176005a 100644 --- a/packages/api/amplify_api_dart/lib/src/util/amplify_authorization_rest_client.dart +++ b/packages/api/amplify_api_dart/lib/src/util/amplify_authorization_rest_client.dart @@ -4,6 +4,8 @@ import 'dart:async'; import 'package:amplify_api_dart/src/decorators/authorize_http_request.dart'; +import 'package:amplify_api_dart/src/util/amplify_api_config.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:meta/meta.dart'; @@ -11,7 +13,7 @@ import 'package:meta/meta.dart'; /// Amplify. @internal class AmplifyAuthorizationRestClient extends AWSBaseHttpClient { - /// Provide an [AWSApiConfig] which will determine how requests from this + /// Provide an [AWSApiEndpointConfig] which will determine how requests from this /// client are authorized. AmplifyAuthorizationRestClient({ required this.endpointConfig, @@ -24,7 +26,7 @@ class AmplifyAuthorizationRestClient extends AWSBaseHttpClient { final AmplifyAuthProviderRepository authProviderRepo; /// Determines how requests with this client are authorized. - final AWSApiConfig endpointConfig; + final AWSApiEndpointConfig endpointConfig; /// The authorization mode to use for requests with this client. /// diff --git a/packages/api/amplify_api_dart/test/amplify_api_config_test.dart b/packages/api/amplify_api_dart/test/amplify_api_config_test.dart index ee39018e9c..737236f8b5 100644 --- a/packages/api/amplify_api_dart/test/amplify_api_config_test.dart +++ b/packages/api/amplify_api_dart/test/amplify_api_config_test.dart @@ -2,30 +2,26 @@ // SPDX-License-Identifier: Apache-2.0 import 'package:amplify_api_dart/src/util/amplify_api_config.dart'; -import 'package:amplify_core/amplify_core.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:test/test.dart'; void main() { late EndpointConfig endpointConfig; group('GraphQL Config', () { - const endpointType = EndpointType.graphQL; - const endpoint = - 'https://abc123.appsync-api.us-east-1.amazonaws.com/graphql'; + final endpoint = + Uri.parse('https://abc123.appsync-api.us-east-1.amazonaws.com/graphql'); const region = 'us-east-1'; - const authorizationType = APIAuthorizationType.apiKey; const apiKey = 'abc-123'; setUpAll(() async { - const config = AWSApiConfig( - endpointType: endpointType, + final config = AWSApiEndpointConfig.appSync( endpoint: endpoint, region: region, - authorizationType: authorizationType, - apiKey: apiKey, + authMode: const AWSApiAuthorizationMode.apiKey(apiKey), ); - endpointConfig = const EndpointConfig('GraphQL', config); + endpointConfig = EndpointConfig('GraphQL', config); }); test('should return valid URI with null params', () async { @@ -37,20 +33,18 @@ void main() { }); group('REST Config', () { - const endpointType = EndpointType.rest; - const endpoint = 'https://abc123.appsync-api.us-east-1.amazonaws.com/test'; + final endpoint = + Uri.parse('https://abc123.appsync-api.us-east-1.amazonaws.com/test'); const region = 'us-east-1'; - const authorizationType = APIAuthorizationType.iam; setUpAll(() async { - const config = AWSApiConfig( - endpointType: endpointType, + final config = AWSApiEndpointConfig.apiGateway( endpoint: endpoint, region: region, - authorizationType: authorizationType, + authMode: const AWSApiAuthorizationMode.iam(), ); - endpointConfig = const EndpointConfig('REST', config); + endpointConfig = EndpointConfig('REST', config); }); test('should return valid URI with params', () async { diff --git a/packages/api/amplify_api_dart/test/authorize_http_request_test.dart b/packages/api/amplify_api_dart/test/authorize_http_request_test.dart index a39dc8b62c..3eed1f7476 100644 --- a/packages/api/amplify_api_dart/test/authorize_http_request_test.dart +++ b/packages/api/amplify_api_dart/test/authorize_http_request_test.dart @@ -6,20 +6,22 @@ import 'dart:convert'; import 'package:amplify_api_dart/src/decorators/authorize_http_request.dart'; import 'package:amplify_api_dart/src/graphql/providers/app_sync_api_key_auth_provider.dart'; import 'package:amplify_api_dart/src/graphql/providers/oidc_function_api_auth_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:test/test.dart'; import 'util.dart'; const _region = 'us-east-1'; -const _gqlEndpoint = - 'https://abc123.appsync-api.$_region.amazonaws.com/graphql'; -const _restEndpoint = 'https://xyz456.execute-api.$_region.amazonaws.com/test'; +final _gqlEndpoint = + Uri.parse('https://abc123.appsync-api.$_region.amazonaws.com/graphql'); +final _restEndpoint = + Uri.parse('https://xyz456.execute-api.$_region.amazonaws.com/test'); -AWSHttpRequest _generateTestRequest(String url) { +AWSHttpRequest _generateTestRequest(Uri uri) { return AWSHttpRequest( method: AWSHttpMethod.get, - uri: Uri.parse(url), + uri: uri, ); } @@ -52,11 +54,10 @@ void main() { group('authorizeHttpRequest', () { test('no-op for auth mode NONE', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.none, + final endpointConfig = AWSApiEndpointConfig.apiGateway( endpoint: _restEndpoint, - endpointType: EndpointType.rest, region: _region, + authMode: const AWSApiAuthorizationMode.none(), ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -73,10 +74,9 @@ void main() { }); test('no-op for request with Authorization header already set', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.userPools, + final endpointConfig = AWSApiEndpointConfig.apiGateway( + authMode: const AWSApiAuthorizationMode.userPools(), endpoint: _restEndpoint, - endpointType: EndpointType.rest, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -97,10 +97,9 @@ void main() { }); test('authorizes request with IAM auth provider', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.iam, + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.iam(), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -113,10 +112,9 @@ void main() { }); test('does not sign body of POST request with IAM REST API', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.iam, + final endpointConfig = AWSApiEndpointConfig.apiGateway( + authMode: const AWSApiAuthorizationMode.iam(), endpoint: _restEndpoint, - endpointType: EndpointType.rest, region: _region, ); final inputRequest = AWSHttpRequest( @@ -124,7 +122,7 @@ void main() { body: json.encode({ 'foo': 'bar', }).codeUnits, - uri: Uri.parse(endpointConfig.endpoint), + uri: endpointConfig.endpoint, ); final authorizedRequest = await authorizeHttpRequest( inputRequest, @@ -139,11 +137,9 @@ void main() { test('authorizes request with API key', () async { const testApiKey = 'abc-123-fake-key'; - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.apiKey, - apiKey: testApiKey, + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.apiKey(testApiKey), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -158,30 +154,10 @@ void main() { ); }); - test('throws when API key not in config', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.apiKey, - // no apiKey value provided - endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, - region: _region, - ); - final inputRequest = _generateTestRequest(endpointConfig.endpoint); - await expectLater( - authorizeHttpRequest( - inputRequest, - endpointConfig: endpointConfig, - authProviderRepo: authProviderRepo, - ), - throwsA(isA()), - ); - }); - test('authorizes with Cognito User Pools auth mode', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.userPools, + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.userPools(), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -197,10 +173,9 @@ void main() { }); test('authorizes with OIDC auth mode', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.oidc, + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.oidc(), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -216,10 +191,9 @@ void main() { }); test('authorizes with lambda (function) auth mode', () async { - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.function, + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.function(), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -234,40 +208,11 @@ void main() { ); }); - test('authorizes with authorizationMode parameter that overrides config', - () async { - const testApiKey = 'abc-123-fake-key'; - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.userPools, - apiKey: testApiKey, - endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, - region: _region, - ); - final inputRequest = _generateTestRequest(endpointConfig.endpoint); - final authorizedRequest = await authorizeHttpRequest( - inputRequest, - endpointConfig: endpointConfig, - authProviderRepo: authProviderRepo, - authorizationMode: APIAuthorizationType.apiKey, - ); - expect( - authorizedRequest.headers[xApiKey], - testApiKey, - ); - expect( - authorizedRequest.headers[AWSHeaders.authorization], - isNull, - ); - }); - test('throws when no auth provider found', () async { final emptyAuthRepo = AmplifyAuthProviderRepository(); - const endpointConfig = AWSApiConfig( - authorizationType: APIAuthorizationType.apiKey, - apiKey: 'abc-123-fake-key', + final endpointConfig = AWSApiEndpointConfig.appSync( + authMode: const AWSApiAuthorizationMode.apiKey('abc-123-fake-key'), endpoint: _gqlEndpoint, - endpointType: EndpointType.graphQL, region: _region, ); final inputRequest = _generateTestRequest(endpointConfig.endpoint); @@ -282,3 +227,21 @@ void main() { }); }); } + +extension on AWSApiEndpointConfig { + Uri get endpoint => switch (this) { + AWSApiEndpointConfigApiGateway$( + apiGateway: AWSApiGatewayEndpointConfig(:final endpoint) + ) => + endpoint, + AWSApiEndpointConfigAppSync$( + appSync: AWSAppSyncEndpointConfig(:final endpoint) + ) => + endpoint, + AWSApiEndpointConfigRest$( + rest: AWSRestEndpointConfig(:final endpoint) + ) => + endpoint, + _ => throw ArgumentError('Invalid endpoint config: $this'), + }; +} diff --git a/packages/api/amplify_api_dart/test/graphql_test.dart b/packages/api/amplify_api_dart/test/graphql_test.dart index aa3e567536..04bbf51f5f 100644 --- a/packages/api/amplify_api_dart/test/graphql_test.dart +++ b/packages/api/amplify_api_dart/test/graphql_test.dart @@ -8,7 +8,7 @@ import 'package:amplify_api_dart/amplify_api_dart.dart'; import 'package:amplify_api_dart/src/graphql/providers/app_sync_api_key_auth_provider.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/blocs/web_socket_bloc.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/state/web_socket_state.dart'; -import 'package:amplify_api_dart/src/util/amplify_api_config.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:aws_common/testing.dart'; import 'package:collection/collection.dart'; @@ -144,7 +144,7 @@ class MockAmplifyAPI extends AmplifyAPIDart { }); @override - WebSocketBloc createWebSocketBloc(EndpointConfig endpoint) { + WebSocketBloc createWebSocketBloc(AWSAppSyncEndpointConfig endpoint) { return mockWebSocketBloc!; } } diff --git a/packages/api/amplify_api_dart/test/plugin_configuration_test.dart b/packages/api/amplify_api_dart/test/plugin_configuration_test.dart index 1acbfc8d32..5d501906be 100644 --- a/packages/api/amplify_api_dart/test/plugin_configuration_test.dart +++ b/packages/api/amplify_api_dart/test/plugin_configuration_test.dart @@ -5,6 +5,7 @@ import 'dart:convert'; import 'package:amplify_api_dart/src/api_plugin_impl.dart'; import 'package:amplify_api_dart/src/graphql/providers/app_sync_api_key_auth_provider.dart'; import 'package:amplify_api_dart/src/graphql/providers/oidc_function_api_auth_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:aws_common/testing.dart'; import 'package:test/test.dart'; @@ -61,12 +62,8 @@ void main() { APIAuthorizationType.iam.authProviderToken, TestIamAuthProvider(), ); - final config = AmplifyConfig.fromJson( - jsonDecode(amplifyconfig) as Map, - ); - final configIamWithApiKey = AmplifyConfig.fromJson( - jsonDecode(amplifyconfigwithapikey) as Map, - ); + final config = AWSAmplifyConfig.parse(amplifyconfig); + final configIamWithApiKey = AWSAmplifyConfig.parse(amplifyconfigwithapikey); group('AmplifyAPI plugin configuration', () { test( diff --git a/packages/api/amplify_api_dart/test/rest_methods_test.dart b/packages/api/amplify_api_dart/test/rest_methods_test.dart index d5dae87041..bc3469d329 100644 --- a/packages/api/amplify_api_dart/test/rest_methods_test.dart +++ b/packages/api/amplify_api_dart/test/rest_methods_test.dart @@ -3,6 +3,7 @@ import 'dart:convert'; import 'package:amplify_api_dart/amplify_api_dart.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:aws_common/testing.dart'; import 'package:test/test.dart'; @@ -38,9 +39,7 @@ void main() { APIAuthorizationType.iam.authProviderToken, TestIamAuthProvider(), ); - final config = AmplifyConfig.fromJson( - jsonDecode(amplifyconfig) as Map, - ); + final config = AWSAmplifyConfig.parse(amplifyconfig); await apiPlugin.configure( config: config, authProviderRepo: authProviderRepo, diff --git a/packages/api/amplify_api_dart/test/util.dart b/packages/api/amplify_api_dart/test/util.dart index ada83fec74..00fdf439c3 100644 --- a/packages/api/amplify_api_dart/test/util.dart +++ b/packages/api/amplify_api_dart/test/util.dart @@ -11,6 +11,7 @@ import 'package:amplify_api_dart/src/graphql/web_socket/services/web_socket_serv import 'package:amplify_api_dart/src/graphql/web_socket/state/web_socket_state.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/types/connectivity_platform.dart'; import 'package:amplify_api_dart/src/graphql/web_socket/types/web_socket_types.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:async/async.dart'; import 'package:aws_common/testing.dart'; @@ -68,19 +69,16 @@ void validateSignedRequest(AWSBaseHttpRequest request) { ); } -const testApiKeyConfig = AWSApiConfig( - endpointType: EndpointType.graphQL, - endpoint: 'https://abc123.appsync-api.us-east-1.amazonaws.com/graphql', +final testApiKeyConfig = AWSAppSyncEndpointConfig( + endpoint: + Uri.parse('https://abc123.appsync-api.us-east-1.amazonaws.com/graphql'), region: 'us-east-1', - authorizationType: APIAuthorizationType.apiKey, - apiKey: 'abc-123', + authMode: const AWSApiAuthorizationMode.apiKey('abc-123'), ); -const testApiKeyConfigCustomDomain = AWSApiConfig( - endpointType: EndpointType.graphQL, - endpoint: 'https://foo.bar.aws.dev/graphql ', +final testApiKeyConfigCustomDomain = AWSAppSyncEndpointConfig( + endpoint: Uri.parse('https://foo.bar.aws.dev/graphql'), region: 'us-east-1', - authorizationType: APIAuthorizationType.apiKey, - apiKey: 'abc-123', + authMode: const AWSApiAuthorizationMode.apiKey('abc-123'), ); const expectedApiKeyWebSocketConnectionUrl = diff --git a/packages/api/amplify_api_dart/test/web_socket/web_socket_auth_utils_test.dart b/packages/api/amplify_api_dart/test/web_socket/web_socket_auth_utils_test.dart index ed9d410082..8b5643873e 100644 --- a/packages/api/amplify_api_dart/test/web_socket/web_socket_auth_utils_test.dart +++ b/packages/api/amplify_api_dart/test/web_socket/web_socket_auth_utils_test.dart @@ -83,7 +83,7 @@ void main() { assertBasicSubscriptionPayloadHeaders(payload); expect( payload.authorizationHeaders[xApiKey], - testApiKeyConfig.apiKey, + testApiKeyConfig.authMode.apiKey, ); }); diff --git a/packages/auth/amplify_auth_cognito/example/integration_test/federated_sign_in_test.dart b/packages/auth/amplify_auth_cognito/example/integration_test/federated_sign_in_test.dart index 327628f60e..43971f960e 100644 --- a/packages/auth/amplify_auth_cognito/example/integration_test/federated_sign_in_test.dart +++ b/packages/auth/amplify_auth_cognito/example/integration_test/federated_sign_in_test.dart @@ -1,8 +1,6 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import 'dart:convert'; - import 'package:amplify_auth_cognito/amplify_auth_cognito.dart'; // ignore: invalid_use_of_internal_member import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; @@ -12,6 +10,7 @@ import 'package:amplify_auth_cognito_dart/src/model/sign_in_parameters.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_example/amplifyconfiguration.dart'; import 'package:amplify_auth_integration_test/amplify_auth_integration_test.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:amplify_integration_test/amplify_integration_test.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -30,9 +29,8 @@ void main() { // `federateWithIdentityPool` with `AuthProvider.custom` allows testing // the critical code paths related to federated sign-in, even though on // the surface it resembles an ordinary call to fetchAuthSession. - final userPoolConfig = AmplifyConfig.fromJson( - jsonDecode(amplifyconfig) as Map, - ).auth!.awsPlugin!.cognitoUserPool!.default$!; + final userPoolConfig = + AWSAmplifyConfig.parse(amplifyconfig).auth!.cognito!.userPool!; final provider = AuthProvider.custom( 'cognito-idp.${userPoolConfig.region}.amazonaws.com/${userPoolConfig.poolId}', ); diff --git a/packages/auth/amplify_auth_cognito/example/integration_test/native_auth_bridge_test.dart b/packages/auth/amplify_auth_cognito/example/integration_test/native_auth_bridge_test.dart index 9945f6b207..4189099a73 100644 --- a/packages/auth/amplify_auth_cognito/example/integration_test/native_auth_bridge_test.dart +++ b/packages/auth/amplify_auth_cognito/example/integration_test/native_auth_bridge_test.dart @@ -11,6 +11,7 @@ import 'package:amplify_auth_cognito/src/native_auth_plugin.g.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_test/amplify_auth_cognito_test.dart'; import 'package:amplify_auth_integration_test/amplify_auth_integration_test.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:http/http.dart' as http; @@ -32,7 +33,7 @@ void main() { setUp(() async { dependencyManager = DependencyManager() - ..addInstance(hostedUiConfig) + ..addInstance(hostedUiConfig) ..addInstance(MockSecureStorage()) ..addInstance( MockClient((request) { @@ -56,7 +57,7 @@ void main() { argPreferprivatesession, argBrowserpackagename, ) async { - expect(argUrl, contains(hostedUiConfig.webDomain)); + expect(argUrl, contains(hostedUiConfig.domainName)); expect(argCallbackurlscheme, testUrlScheme); expect(argPreferprivatesession, isFalse); expect(argBrowserpackagename, browserPackage); @@ -84,7 +85,7 @@ void main() { argPreferprivatesession, argBrowserpackagename, ) async { - expect(argUrl, contains(hostedUiConfig.webDomain)); + expect(argUrl, contains(hostedUiConfig.domainName)); expect(argCallbackurlscheme, testUrlScheme); expect(argPreferprivatesession, isFalse); expect(argBrowserpackagename, browserPackage); diff --git a/packages/auth/amplify_auth_cognito/lib/src/auth_plugin_impl.dart b/packages/auth/amplify_auth_cognito/lib/src/auth_plugin_impl.dart index c303fe10cb..d59c0814ed 100644 --- a/packages/auth/amplify_auth_cognito/lib/src/auth_plugin_impl.dart +++ b/packages/auth/amplify_auth_cognito/lib/src/auth_plugin_impl.dart @@ -23,6 +23,7 @@ import 'package:amplify_auth_cognito_dart/src/model/hosted_ui/oauth_parameters.d import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; // ignore: implementation_imports, invalid_use_of_internal_member import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage/amplify_secure_storage.dart'; @@ -77,7 +78,7 @@ class AmplifyAuthCognito extends AmplifyAuthCognitoDart with AWSDebuggable { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { // Dependencies for AnalyticsMetadataType diff --git a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_android.dart b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_android.dart index 101164b5b4..a51e3aa03c 100644 --- a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_android.dart +++ b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_android.dart @@ -8,9 +8,7 @@ import 'package:amplify_auth_cognito/src/native_auth_plugin.g.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/legacy_credential_provider.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; -import 'package:amplify_core/src/config/auth/cognito/credentials_provider.dart'; -import 'package:amplify_core/src/config/auth/cognito/oauth.dart'; -import 'package:amplify_core/src/config/auth/cognito/user_pool.dart'; +import 'package:amplify_core/amplify_config.dart'; /// {@template amplify_auth_cognito.legacy_android_credential_provider} /// The implementation of [LegacyCredentialProvider] for migrating @@ -24,23 +22,23 @@ class LegacyCredentialProviderAndroid implements LegacyCredentialProvider { @override Future fetchLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { final bridge = _stateMachine.expect(); final legacyCredentials = await bridge.getLegacyCredentials( identityPoolConfig?.poolId, - userPoolConfig?.appClientId, + userPoolConfig?.clientId, ); return legacyCredentials.toCredentialStoreData(); } @override Future deleteLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) { final bridge = _stateMachine.expect(); return bridge.clearLegacyCredentials(); diff --git a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_impl.dart b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_impl.dart index 3421989ce2..9662c7acf9 100644 --- a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_impl.dart +++ b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_impl.dart @@ -11,6 +11,7 @@ import 'package:amplify_auth_cognito_dart/src/credentials/legacy_credential_prov import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; // ignore: implementation_imports, invalid_use_of_internal_member import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; /// {@template amplify_auth_cognito.legacy_credential_provider_impl} @@ -36,9 +37,9 @@ class LegacyCredentialProviderImpl implements LegacyCredentialProvider { @override Future fetchLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { if (_instance == null) return null; return _instance!.fetchLegacyCredentials( @@ -50,9 +51,9 @@ class LegacyCredentialProviderImpl implements LegacyCredentialProvider { @override Future deleteLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { if (_instance == null) return; return _instance!.deleteLegacyCredentials( diff --git a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_ios.dart b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_ios.dart index df9497d9a0..066d7956dd 100644 --- a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_ios.dart +++ b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_credential_provider_ios.dart @@ -13,6 +13,7 @@ import 'package:amplify_auth_cognito_dart/src/credentials/legacy_credential_prov import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; // ignore: implementation_imports, invalid_use_of_internal_member import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:async/async.dart'; @@ -28,9 +29,9 @@ class LegacyCredentialProviderIOS implements LegacyCredentialProvider { @override Future fetchLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { CognitoUserPoolTokens? userPoolTokens; if (userPoolConfig != null) { @@ -122,9 +123,9 @@ class LegacyCredentialProviderIOS implements LegacyCredentialProvider { @override Future deleteLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { if (userPoolConfig != null) { final userPoolStorage = await _getUserPoolStorage(); diff --git a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_ios_cognito_keys.dart b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_ios_cognito_keys.dart index ab69acba81..366cd07cc6 100644 --- a/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_ios_cognito_keys.dart +++ b/packages/auth/amplify_auth_cognito/lib/src/credentials/legacy_ios_cognito_keys.dart @@ -11,7 +11,7 @@ library amplify_auth_cognito.credentials.legacy_ios_cognito_keys; import 'dart:collection'; -import 'package:amplify_core/amplify_core.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:meta/meta.dart'; /// Discrete keys stored for Legacy Cognito operations on iOS. @@ -63,13 +63,13 @@ class LegacyCognitoUserKeys extends LegacyIOSCognitoKeys { /// The Cognito identity pool configuration, used to determine the key /// prefixes. - final CognitoUserPoolConfig config; + final AWSAuthUserPoolConfig config; @override List get _values => LegacyCognitoKey.values; @override - String? get prefix => config.appClientId; + String? get prefix => config.clientId; } /// {@template amplify_auth_cognito.legacy_cognito_identity_pool_keys} @@ -100,7 +100,7 @@ class LegacyCognitoUserPoolKeys /// The Cognito identity pool configuration, used to determine the key /// prefixes. - final CognitoUserPoolConfig config; + final AWSAuthUserPoolConfig config; /// The current user ID, used to determine the key prefixes. final String currentUserId; @@ -109,7 +109,7 @@ class LegacyCognitoUserPoolKeys List get _values => LegacyCognitoUserPoolKey.values; @override - String get prefix => '${config.appClientId}.$currentUserId'; + String get prefix => '${config.clientId}.$currentUserId'; } /// {@template amplify_auth_cognito.cognito_keys} diff --git a/packages/auth/amplify_auth_cognito_dart/example/integration_test/common.dart b/packages/auth/amplify_auth_cognito_dart/example/integration_test/common.dart index ceee993ff1..57d47e95c8 100644 --- a/packages/auth/amplify_auth_cognito_dart/example/integration_test/common.dart +++ b/packages/auth/amplify_auth_cognito_dart/example/integration_test/common.dart @@ -1,13 +1,12 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import 'dart:convert'; - +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:cognito_example/amplifyconfiguration.dart'; -final AmplifyConfig config = AmplifyConfig.fromJson( - jsonDecode(amplifyEnvironments['hosted-ui']!) as Map, +final AWSAmplifyConfig config = AWSAmplifyConfig.parse( + amplifyEnvironments['hosted-ui']!, ); final AWSLogger logger = AWSLogger().createChild('HostedUI'); diff --git a/packages/auth/amplify_auth_cognito_dart/example/integration_test/hosted_ui_web_test.dart b/packages/auth/amplify_auth_cognito_dart/example/integration_test/hosted_ui_web_test.dart index bd7fc2a58e..7381b73bfa 100644 --- a/packages/auth/amplify_auth_cognito_dart/example/integration_test/hosted_ui_web_test.dart +++ b/packages/auth/amplify_auth_cognito_dart/example/integration_test/hosted_ui_web_test.dart @@ -375,7 +375,7 @@ callback(JSON.stringify(items)); final data = (jsonDecode(json) as Map).cast(); final keys = HostedUiKeys( - config.auth!.awsPlugin!.auth!.default$!.oAuth!, + config.auth!.cognito!.userPool!.hostedUi!, ); CognitoUserPoolTokens? userPoolTokens; final accessToken = data[keys[HostedUiKey.accessToken]]; @@ -390,7 +390,7 @@ callback(JSON.stringify(items)); } final awsKeys = CognitoIdentityPoolKeys( - config.auth!.awsPlugin!.credentialsProvider!.default$!, + config.auth!.cognito!.identityPool!, ); AWSCredentials? awsCredentials; final identityId = data[awsKeys[CognitoIdentityPoolKey.identityId]]; diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/asf/asf_context_data_provider.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/asf/asf_context_data_provider.dart index 9436b85030..0eeb2faf0a 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/asf/asf_context_data_provider.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/asf/asf_context_data_provider.dart @@ -5,6 +5,7 @@ import 'package:amplify_auth_cognito_dart/src/asf/asf_device_info_collector.dart import 'package:amplify_auth_cognito_dart/src/asf/asf_worker.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:async/async.dart'; @@ -23,7 +24,7 @@ final class ASFContextDataProvider with AWSDebuggable, AWSLoggerMixin { ASFDeviceInfoCollector get _platform => _dependencyManager.getOrCreate(); /// The Cognito user pool configuration. - CognitoUserPoolConfig? get _userPoolConfig => _dependencyManager.get(); + AWSAuthUserPoolConfig? get _userPoolConfig => _dependencyManager.get(); SecureStorageInterface get _secureStorage => _dependencyManager.expect(); @@ -81,7 +82,7 @@ final class ASFContextDataProvider with AWSDebuggable, AWSLoggerMixin { logger.verbose('Got native context data: $nativeContextData'); final deviceId = await _deviceId; final userPoolId = userPoolConfig.poolId; - final clientId = userPoolConfig.appClientId; + final clientId = userPoolConfig.clientId; final request = ASFWorkerRequest( userPoolId: userPoolId, diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/auth_plugin_impl.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/auth_plugin_impl.dart index d7b8fecb1d..bf53cff1d9 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/auth_plugin_impl.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/auth_plugin_impl.dart @@ -44,6 +44,7 @@ import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_dart/src/util/cognito_iam_auth_provider.dart'; import 'package:amplify_auth_cognito_dart/src/util/cognito_user_pools_auth_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; // ignore: implementation_imports, invalid_use_of_internal_member import 'package:amplify_core/src/http/amplify_category_method.dart'; @@ -122,8 +123,8 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface } /// The Cognito user pool configuration. - CognitoUserPoolConfig get _userPoolConfig { - final userPoolConfig = _stateMachine.get(); + AWSAuthUserPoolConfig get _userPoolConfig { + final userPoolConfig = _stateMachine.get(); if (userPoolConfig == null) { throw const InvalidAccountTypeException.noUserPool(); } @@ -131,8 +132,7 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface } /// The Cognito identity pool configuration. - CognitoIdentityCredentialsProvider? get _identityPoolConfig => - _stateMachine.get(); + AWSAuthIdentityPoolConfig? get _identityPoolConfig => _stateMachine.get(); /// The device metadata repository, used for handling device operations. DeviceMetadataRepository get _deviceRepo => _stateMachine.getOrCreate(); @@ -213,7 +213,7 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { if (config == null) { @@ -471,15 +471,15 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface final result = await _cognitoIdp.resendConfirmationCode( cognito.ResendConfirmationCodeRequest.build((b) { b - ..clientId = _userPoolConfig.appClientId + ..clientId = _userPoolConfig.clientId ..username = username ..analyticsMetadata = _analyticsMetadata?.toBuilder(); - final clientSecret = _userPoolConfig.appClientSecret; + final clientSecret = _userPoolConfig.clientSecret; if (clientSecret != null) { b.secretHash = computeSecretHash( username, - _userPoolConfig.appClientId, + _userPoolConfig.clientId, clientSecret, ); } @@ -779,16 +779,16 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface final result = await _cognitoIdp.forgotPassword( cognito.ForgotPasswordRequest.build((b) { b - ..clientId = _userPoolConfig.appClientId + ..clientId = _userPoolConfig.clientId ..username = username ..analyticsMetadata = _analyticsMetadata?.toBuilder() ..clientMetadata.addAll(pluginOptions.clientMetadata); - final clientSecret = _userPoolConfig.appClientSecret; + final clientSecret = _userPoolConfig.clientSecret; if (clientSecret != null) { b.secretHash = computeSecretHash( username, - _userPoolConfig.appClientId, + _userPoolConfig.clientId, clientSecret, ); } @@ -833,15 +833,15 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface ..username = username ..password = newPassword ..confirmationCode = confirmationCode - ..clientId = _userPoolConfig.appClientId + ..clientId = _userPoolConfig.clientId ..clientMetadata.addAll(pluginOptions.clientMetadata) ..analyticsMetadata = _analyticsMetadata?.toBuilder(); - final clientSecret = _userPoolConfig.appClientSecret; + final clientSecret = _userPoolConfig.clientSecret; if (clientSecret != null) { b.secretHash = computeSecretHash( username, - _userPoolConfig.appClientId, + _userPoolConfig.clientId, clientSecret, ); } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/cognito_keys.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/cognito_keys.dart index 5779c8afb5..2bdd25d3a8 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/cognito_keys.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/cognito_keys.dart @@ -9,7 +9,7 @@ import 'dart:collection'; import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart' show AuthFlowType; -import 'package:amplify_core/amplify_core.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:meta/meta.dart'; /// {@template amplify_auth_cognito_dart.cognito_user_pool_key} @@ -117,7 +117,7 @@ final class CognitoIdentityPoolKeys /// The Cognito identity pool configuration, used to determine the key /// prefixes. - final CognitoIdentityCredentialsProvider config; + final AWSAuthIdentityPoolConfig config; @override List get _values => CognitoIdentityPoolKey.values; @@ -135,13 +135,13 @@ final class CognitoUserPoolKeys extends CognitoKeys { const CognitoUserPoolKeys(this.config); /// The Cognito user pool configuration, used to determine the key prefixes. - final CognitoUserPoolConfig config; + final AWSAuthUserPoolConfig config; @override List get _values => CognitoUserPoolKey.values; @override - String get prefix => config.appClientId; + String get prefix => config.clientId; } /// {@template amplify_auth_cognito.cognito_user_pool_keys} @@ -153,7 +153,7 @@ final class CognitoDeviceKeys extends CognitoKeys { const CognitoDeviceKeys(this.config, this.username); /// The Cognito user pool configuration, used to determine the key prefixes. - final CognitoUserPoolConfig config; + final AWSAuthUserPoolConfig config; /// Device keys are tracked by username. final String username; @@ -162,7 +162,7 @@ final class CognitoDeviceKeys extends CognitoKeys { List get _values => CognitoDeviceKey.values; @override - String get prefix => '${config.appClientId}.$username'; + String get prefix => '${config.clientId}.$username'; } /// {@template amplify_auth_cognito.hosted_ui_keys} @@ -174,13 +174,13 @@ final class HostedUiKeys extends CognitoKeys { const HostedUiKeys(this.config); /// The Cognito OAuth configuration, used to determine the key prefixes. - final CognitoOAuthConfig config; + final AWSAuthHostedUiConfig config; @override List get _values => HostedUiKey.values; @override - String get prefix => '${config.appClientId}.hostedUi'; + String get prefix => '${config.clientId}.hostedUi'; } /// {@template amplify_auth_cognito.cognito_keys} diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/device_metadata_repository.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/device_metadata_repository.dart index caedff2885..d925f180ec 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/device_metadata_repository.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/device_metadata_repository.dart @@ -4,6 +4,7 @@ import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; import 'package:amplify_auth_cognito_dart/src/model/cognito_device_secrets.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; @@ -26,7 +27,7 @@ class DeviceMetadataRepository { dependencies.getOrCreate(), ); - final CognitoUserPoolConfig _userPoolConfig; + final AWSAuthUserPoolConfig _userPoolConfig; final SecureStorageInterface _secureStorage; /// Retrieves the device secrets for [username]. diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/legacy_credential_provider.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/legacy_credential_provider.dart index b01e4bcbaa..b8de375947 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/legacy_credential_provider.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/credentials/legacy_credential_provider.dart @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import 'package:amplify_auth_cognito_dart/src/state/state/auth_state.dart'; -import 'package:amplify_core/amplify_core.dart'; +import 'package:amplify_core/amplify_config.dart'; /// {@template amplify_auth_cognito_dart.legacy_credential_provider} /// Provides methods to fetch and delete legacy credentials if they exist. @@ -13,15 +13,15 @@ abstract interface class LegacyCredentialProvider { /// Fetches legacy credentials if they are present. Future fetchLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }); /// Deletes legacy credentials if they are present. Future deleteLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }); } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_config.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_config.dart index ac010eb317..04882bbd9c 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_config.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_config.dart @@ -1,10 +1,11 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; -/// Configuration helpers for [CognitoUserPoolConfig]. -extension HostedUiJwks on CognitoUserPoolConfig { +/// Configuration helpers for [AWSAuthUserPoolConfig]. +extension HostedUiJwks on AWSAuthUserPoolConfig { /// The JSON Web Key (JWK) URI. /// /// References: @@ -17,17 +18,17 @@ extension HostedUiJwks on CognitoUserPoolConfig { /// Configuration helpers for [CognitoOAuthConfig]. /// /// [Reference](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html) -extension HostedUiConfig on CognitoOAuthConfig { - /// The parsed [webDomain] URI. +extension HostedUiConfig on AWSAuthHostedUiConfig { + /// The parsed [domainName] URI. /// - /// If [webDomain] specifies a scheme, it is honored in requests in the same + /// If [domainName] specifies a scheme, it is honored in requests in the same /// way that it is honored for [signInUri], [tokenUri], and [signOutUri]. If - /// no scheme is specified, it defaults to `https` and [webDomain] is + /// no scheme is specified, it defaults to `https` and [domainName] is /// interpreted as a host string. Uri get _webDomain { - final uri = Uri.parse(webDomain); + final uri = Uri.parse(domainName); if (uri.hasScheme) return uri; - return Uri(scheme: 'https', host: webDomain); + return Uri(scheme: 'https', host: domainName); } /// The sign in URI. @@ -37,15 +38,14 @@ extension HostedUiConfig on CognitoOAuthConfig { /// - https://docs.aws.amazon.com/cognito/latest/developerguide/login-endpoint.html Uri signInUri([AuthProvider? provider]) { Uri baseUri; - if (this.signInUri != null) { - baseUri = Uri.parse(this.signInUri!); + if (this.signInUri case final signInUri?) { + baseUri = signInUri; } else { baseUri = _webDomain.replace(path: '/oauth2/authorize'); } return baseUri.replace( queryParameters: { if (provider != null) 'identity_provider': provider.uriParameter, - ...?signInUriQueryParameters, }, ); } @@ -58,8 +58,7 @@ extension HostedUiConfig on CognitoOAuthConfig { return _webDomain.replace( path: '/logout', queryParameters: { - ...?signOutUriQueryParameters, - 'client_id': appClientId, + 'client_id': clientId!, }, ); } @@ -78,17 +77,10 @@ extension HostedUiConfig on CognitoOAuthConfig { /// /// References: /// - https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html - Uri get tokenUri { - Uri baseUri; - if (this.tokenUri != null) { - baseUri = Uri.parse(this.tokenUri!); - } else { - baseUri = _webDomain.replace(path: '/oauth2/token'); - } - return baseUri.replace( - queryParameters: tokenUriQueryParameters, - ); - } + Uri get tokenUri => switch (this.tokenUri) { + final tokenUri? => tokenUri, + _ => _webDomain.replace(path: '/oauth2/token'), + }; /// The `revoke` URI. /// diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform.dart index 33d4f56f20..aa9d4f1408 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform.dart @@ -12,6 +12,7 @@ import 'package:amplify_auth_cognito_dart/src/flows/hosted_ui/hosted_ui_platform if (dart.library.io) 'package:amplify_auth_cognito_dart/src/flows/hosted_ui/hosted_ui_platform_io.dart'; import 'package:amplify_auth_cognito_dart/src/model/hosted_ui/oauth_parameters.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:http/http.dart' as http; @@ -37,7 +38,7 @@ abstract class HostedUiPlatform implements Closeable { /// The Hosted UI configuration. @protected - CognitoOAuthConfig get config => dependencyManager.expect(); + AWSAuthHostedUiConfig get config => dependencyManager.expect(); /// The Hosted UI storage keys. late final HostedUiKeys _keys = HostedUiKeys(config); @@ -158,16 +159,16 @@ abstract class HostedUiPlatform implements Closeable { @visibleForTesting @nonVirtual oauth2.AuthorizationCodeGrant createGrant( - CognitoOAuthConfig config, { + AWSAuthHostedUiConfig config, { AuthProvider? provider, String? codeVerifier, http.Client? httpClient, }) { return oauth2.AuthorizationCodeGrant( - config.appClientId, + config.clientId!, HostedUiConfig(config).signInUri(provider), HostedUiConfig(config).tokenUri, - secret: config.appClientSecret, + secret: config.clientSecret, httpClient: httpClient, codeVerifier: codeVerifier, @@ -183,7 +184,7 @@ abstract class HostedUiPlatform implements Closeable { @visibleForTesting @nonVirtual oauth2.AuthorizationCodeGrant restoreGrant( - CognitoOAuthConfig config, { + AWSAuthHostedUiConfig config, { required String state, required String codeVerifier, http.Client? httpClient, diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform_html.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform_html.dart index f4bfaafa6e..ea9de3b5b5 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform_html.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/flows/hosted_ui/hosted_ui_platform_html.dart @@ -3,7 +3,6 @@ import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart'; import 'package:amplify_auth_cognito_dart/src/flows/hosted_ui/hosted_ui_platform.dart'; -import 'package:amplify_core/amplify_core.dart'; // ignore: implementation_imports import 'package:aws_common/src/js/common.dart'; import 'package:path/path.dart' show url; diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/model/auth_configuration.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/model/auth_configuration.dart deleted file mode 100644 index 74bdd1831a..0000000000 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/model/auth_configuration.dart +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -@internal -library amplify_auth_cognito.model.auth_configuration; - -import 'package:amplify_core/amplify_core.dart'; -import 'package:meta/meta.dart'; - -/// {@template amplify_auth_cognito.auth_configuration} -/// Union class for auth configurations of the different types. -/// {@endtemplate} -class AuthConfiguration with AWSEquatable { - const AuthConfiguration._({ - this.userPoolConfig, - this.identityPoolConfig, - this.hostedUiConfig, - this.pinpointConfig, - }); - - /// Parses [config] into the appropriate [AuthConfiguration] type. - /// - /// {@macro amplify_auth_cognito.auth_configuration} - factory AuthConfiguration.fromConfig(CognitoPluginConfig config) { - final userPoolConfig = config.cognitoUserPool?.default$; - final identityPoolConfig = config.credentialsProvider?.default$; - final hostedUiConfig = config.auth?.default$?.oAuth; - final pinpointConfig = config.pinpointAnalytics?.default$; - - if (userPoolConfig == null && - identityPoolConfig == null && - hostedUiConfig == null) { - throw ConfigurationError( - 'Invalid config: No user pool or identity pool found', - ); - } - - return AuthConfiguration._( - userPoolConfig: userPoolConfig, - identityPoolConfig: identityPoolConfig, - hostedUiConfig: hostedUiConfig, - pinpointConfig: pinpointConfig, - ); - } - - /// The user pool config, if available. - final CognitoUserPoolConfig? userPoolConfig; - - /// The identity pool config, if available. - final CognitoIdentityCredentialsProvider? identityPoolConfig; - - /// The Hosted UI config, if available. - final CognitoOAuthConfig? hostedUiConfig; - - /// The Pinpoint config, if available. - final CognitoPinpointAnalyticsConfig? pinpointConfig; - - @override - List get props => [ - userPoolConfig, - identityPoolConfig, - hostedUiConfig, - pinpointConfig, - ]; -} diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/auth_event.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/auth_event.dart index 4e98b5ed88..6b88ebee23 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/auth_event.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/auth_event.dart @@ -11,6 +11,7 @@ import 'package:amplify_auth_cognito_dart/src/model/sign_up_parameters.dart'; import 'package:amplify_auth_cognito_dart/src/model/signin/cognito_sign_in_with_web_ui_plugin_options.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; part 'configuration_event.dart'; diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/configuration_event.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/configuration_event.dart index a576c1f790..51faf5a611 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/configuration_event.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/event/configuration_event.dart @@ -22,11 +22,12 @@ sealed class ConfigurationEvent const ConfigurationEvent._(); /// {@macro amplify_auth_cognito.configuration_event.configure} - const factory ConfigurationEvent.configure(AmplifyConfig config) = Configure; + const factory ConfigurationEvent.configure(AWSAmplifyConfig config) = + Configure; /// {@macro amplify_auth_cognito.configuration_event.configure_succeeded} const factory ConfigurationEvent.configureSucceeded( - CognitoPluginConfig config, + AWSAuthCognitoConfig config, ) = ConfigureSucceeded; @override @@ -45,7 +46,7 @@ final class Configure extends ConfigurationEvent { const Configure(this.config) : super._(); /// The user's Amplify configuration. - final AmplifyConfig config; + final AWSAmplifyConfig config; @override ConfigurationEventType get type => ConfigurationEventType.configure; @@ -79,7 +80,7 @@ final class ConfigureSucceeded extends ConfigurationEvent { const ConfigureSucceeded(this.config) : super._(); /// The Cognito plugin configuration. - final CognitoPluginConfig config; + final AWSAuthCognitoConfig config; @override ConfigurationEventType get type => ConfigurationEventType.configureSucceeded; diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/configuration_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/configuration_state_machine.dart index 80632a62e9..45e97f5243 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/configuration_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/configuration_state_machine.dart @@ -6,12 +6,12 @@ import 'dart:async'; // ignore: implementation_imports import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/endpoint_client/endpoint_info_store_manager.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/auth_plugin_credentials_provider.dart'; -import 'package:amplify_auth_cognito_dart/src/model/auth_configuration.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/sdk_bridge.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; /// {@template amplify_auth_cognito.configuration_state_machine} @@ -64,16 +64,14 @@ final class ConfigurationStateMachine /// State machine callback for the [Configure] event. Future onConfigure(Configure event) async { - final cognitoConfig = event.config.auth?.awsPlugin; - if (cognitoConfig == null) { + final config = event.config.auth?.cognito; + if (config == null) { throw ConfigurationError('No Cognito plugin config available'); } - addInstance(cognitoConfig); - final config = AuthConfiguration.fromConfig(cognitoConfig); addInstance(config); final waiters = >[]; - final userPoolConfig = config.userPoolConfig; + final userPoolConfig = config.userPool; if (userPoolConfig != null) { addInstance(userPoolConfig); addInstance( @@ -81,19 +79,19 @@ final class ConfigurationStateMachine region: userPoolConfig.region, credentialsProvider: _credentialsProvider, dependencyManager: this, - endpoint: userPoolConfig.endpoint, + endpoint: userPoolConfig.endpoint?.toString(), ), ); } // Configure HostedUI, if available - final hostedUiConfig = config.hostedUiConfig; + final hostedUiConfig = config.userPool?.hostedUi; if (hostedUiConfig != null) { addInstance(hostedUiConfig); waiters.add(manager.configureHostedUI()); } - final identityPoolConfig = config.identityPoolConfig; + final identityPoolConfig = config.identityPool; if (identityPoolConfig != null) { addInstance(identityPoolConfig); addInstance( @@ -107,14 +105,14 @@ final class ConfigurationStateMachine waiters.add(manager.loadCredentials()); - await _waitForConfiguration(cognitoConfig, waiters); + await _waitForConfiguration(config, waiters); // Setup AnalyticsMetadataType await _registerAnalyticsMetadata(config); } Future _waitForConfiguration( - CognitoPluginConfig config, + AWSAuthCognitoConfig config, List> futures, ) async { await Future.wait(futures, eagerError: true); @@ -124,8 +122,8 @@ final class ConfigurationStateMachine /// State machine callback for the [ConfigureSucceeded] event. Future onConfigureSucceeded(ConfigureSucceeded event) async {} - Future _registerAnalyticsMetadata(AuthConfiguration config) async { - final analyticsConfig = config.pinpointConfig; + Future _registerAnalyticsMetadata(AWSAuthCognitoConfig config) async { + final analyticsConfig = config.userPool?.pinpointConfig; if (analyticsConfig == null) { return; } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart index 97384f583a..0db261a6c3 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart @@ -9,11 +9,11 @@ import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/credential_store_keys.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/legacy_credential_provider.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/secure_storage_extension.dart'; -import 'package:amplify_auth_cognito_dart/src/model/auth_configuration.dart'; import 'package:amplify_auth_cognito_dart/src/model/session/cognito_sign_in_details.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:meta/meta.dart'; @@ -91,11 +91,11 @@ final class CredentialStoreStateMachine /// Loads the credential store from storage and returns the data. Future _loadCredentialStore() async { - final authConfig = expect(); + final authConfig = expect(); CognitoSignInDetails? signInDetails; CognitoUserPoolTokens? userPoolTokens; - final userPoolConfig = authConfig.userPoolConfig; + final userPoolConfig = authConfig.userPool; if (userPoolConfig != null) { final keys = CognitoUserPoolKeys(userPoolConfig); final accessToken = await _secureStorage.read( @@ -130,7 +130,7 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; + final hostedUiConfig = userPoolConfig?.hostedUi; if (hostedUiConfig != null) { final keys = HostedUiKeys(hostedUiConfig); final accessToken = await _secureStorage.read( @@ -164,7 +164,7 @@ final class CredentialStoreStateMachine String? identityId; AWSCredentials? awsCredentials; - final identityPoolConfig = authConfig.identityPoolConfig; + final identityPoolConfig = authConfig.identityPool; if (identityPoolConfig != null) { final keys = CognitoIdentityPoolKeys(identityPoolConfig); identityId = await _secureStorage.read( @@ -224,12 +224,12 @@ final class CredentialStoreStateMachine final identityId = data.identityId; final awsCredentials = data.awsCredentials; final signInDetails = data.signInDetails; - final authConfig = expect(); + final authConfig = expect(); final items = {}; final deletions = []; - final userPoolConfig = authConfig.userPoolConfig; + final userPoolConfig = authConfig.userPool; if (userPoolConfig != null) { final keys = CognitoUserPoolKeys(userPoolConfig); if (userPoolTokens != null && @@ -248,7 +248,7 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; + final hostedUiConfig = userPoolConfig?.hostedUi; if (hostedUiConfig != null) { final keys = HostedUiKeys(hostedUiConfig); if (userPoolTokens != null && @@ -265,7 +265,7 @@ final class CredentialStoreStateMachine } } - final identityPoolConfig = authConfig.identityPoolConfig; + final identityPoolConfig = authConfig.identityPool; if (identityPoolConfig != null) { final keys = CognitoIdentityPoolKeys(identityPoolConfig); if (identityId != null) { @@ -315,13 +315,13 @@ final class CredentialStoreStateMachine emit(const CredentialStoreState.migratingLegacyStore()); final legacyCredentialProvider = get(); if (legacyCredentialProvider != null) { - final authConfig = expect(); + final authConfig = expect(); try { final legacyData = await legacyCredentialProvider.fetchLegacyCredentials( - userPoolConfig: authConfig.userPoolConfig, - identityPoolConfig: authConfig.identityPoolConfig, - hostedUiConfig: authConfig.hostedUiConfig, + userPoolConfig: authConfig.userPool, + identityPoolConfig: authConfig.identityPool, + hostedUiConfig: authConfig.userPool?.hostedUi, ); if (legacyData != null) { await _storeCredentials(legacyData); @@ -331,9 +331,9 @@ final class CredentialStoreStateMachine } finally { try { await legacyCredentialProvider.deleteLegacyCredentials( - userPoolConfig: authConfig.userPoolConfig, - identityPoolConfig: authConfig.identityPoolConfig, - hostedUiConfig: authConfig.hostedUiConfig, + userPoolConfig: authConfig.userPool, + identityPoolConfig: authConfig.identityPool, + hostedUiConfig: authConfig.userPool?.hostedUi, ); } on Object catch (e, s) { logger.error('Error clearing legacy credentials', e, s); @@ -366,14 +366,14 @@ final class CredentialStoreStateMachine Future onClearCredentials( CredentialStoreClearCredentials event, ) async { - final authConfig = expect(); + final authConfig = expect(); final clearKeys = event.keys; final deletions = []; bool shouldDelete(String key) => clearKeys.isEmpty || clearKeys.contains(key); - final userPoolConfig = authConfig.userPoolConfig; + final userPoolConfig = authConfig.userPool; if (userPoolConfig != null) { final userPoolKeys = CognitoUserPoolKeys(userPoolConfig); for (final key in userPoolKeys) { @@ -383,7 +383,7 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; + final hostedUiConfig = userPoolConfig?.hostedUi; if (hostedUiConfig != null) { final hostedUiKeys = HostedUiKeys(hostedUiConfig); for (final key in hostedUiKeys) { @@ -393,7 +393,7 @@ final class CredentialStoreStateMachine } } - final identityPoolConfig = authConfig.identityPoolConfig; + final identityPoolConfig = authConfig.identityPool; if (identityPoolConfig != null) { final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig); for (final key in identityPoolKeys) { diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/fetch_auth_session_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/fetch_auth_session_state_machine.dart index 1c4632039f..0f8ade672d 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/fetch_auth_session_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/fetch_auth_session_state_machine.dart @@ -17,6 +17,7 @@ import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart import 'package:amplify_auth_cognito_dart/src/sdk/src/cognito_identity_provider/model/analytics_metadata_type.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:meta/meta.dart'; @@ -52,10 +53,10 @@ final class FetchAuthSessionStateMachine CognitoIdentityClient get _cognitoIdentityClient => expect(); /// The registered user pool config. - CognitoUserPoolConfig? get _userPoolConfig => get(); + AWSAuthUserPoolConfig? get _userPoolConfig => get(); /// The registered identity pool config - CognitoIdentityCredentialsProvider? get _identityPoolConfig => get(); + AWSAuthIdentityPoolConfig? get _identityPoolConfig => get(); /// Invalidates the current session, forcing a refresh on the next retrieval /// of credentials. @@ -128,7 +129,7 @@ final class FetchAuthSessionStateMachine /// Gets the identity ID from the authorization state machine. Future _getIdentityId({ - required CognitoIdentityCredentialsProvider config, + required AWSAuthIdentityPoolConfig config, _FederatedIdentity? federatedIdentity, }) async { final resp = await _withZoneOverrides( @@ -517,18 +518,18 @@ final class FetchAuthSessionStateMachine final refreshRequest = cognito_idp.InitiateAuthRequest.build((b) { b ..authFlow = cognito_idp.AuthFlowType.refreshTokenAuth - ..clientId = config.appClientId + ..clientId = config.clientId ..authParameters.addAll({ CognitoConstants.refreshToken: userPoolTokens.refreshToken, }) ..analyticsMetadata = get()?.toBuilder(); - if (config.appClientSecret != null) { + if (config.clientSecret case final clientSecret?) { b.authParameters[CognitoConstants.challengeParamSecretHash] = computeSecretHash( userPoolTokens.username, - config.appClientId, - config.appClientSecret!, + config.clientId, + clientSecret, ); } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/hosted_ui_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/hosted_ui_state_machine.dart index 655ca454f6..92c48d95a0 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/hosted_ui_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/hosted_ui_state_machine.dart @@ -10,6 +10,7 @@ import 'package:amplify_auth_cognito_dart/src/flows/hosted_ui/hosted_ui_platform import 'package:amplify_auth_cognito_dart/src/model/auth_user_ext.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; @@ -31,7 +32,7 @@ final class HostedUiStateMachine @override String get runtimeTypeName => 'HostedUiStateMachine'; - CognitoOAuthConfig get _config => expect(); + AWSAuthHostedUiConfig get _config => expect(); HostedUiKeys get _keys => HostedUiKeys(_config); SecureStorageInterface get _secureStorage => getOrCreate(); @@ -39,7 +40,7 @@ final class HostedUiStateMachine late final HostedUiPlatform _platform = getOrCreate(); /// The configured identity pool. - CognitoIdentityCredentialsProvider? get _identityPoolConfig => get(); + AWSAuthIdentityPoolConfig? get _identityPoolConfig => get(); @override Future resolve(HostedUiEvent event) async { diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_in_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_in_state_machine.dart index 509e32fa36..8a641c9dc0 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_in_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_in_state_machine.dart @@ -23,6 +23,7 @@ import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart import 'package:amplify_auth_cognito_dart/src/sdk/sdk_bridge.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:async/async.dart'; import 'package:built_collection/built_collection.dart'; @@ -54,9 +55,8 @@ final class SignInStateMachine /// The default flow used to sign in. late final AuthFlowType defaultAuthFlowType = () { // Get the flow from the plugin config - final pluginFlowType = - expect().auth?.default$?.authenticationFlowType ?? - AuthenticationFlowType.userSrpAuth; + final pluginFlowType = expect().authFlowType ?? + AuthenticationFlowType.userSrpAuth; return pluginFlowType.sdkValue; }(); @@ -64,10 +64,10 @@ final class SignInStateMachine late SignInParameters parameters; /// The configured user pool. - late final CognitoUserPoolConfig config = expect(); + late final AWSAuthUserPoolConfig config = expect(); /// The configured identity pool. - CognitoIdentityCredentialsProvider? get identityPoolConfig => get(); + AWSAuthIdentityPoolConfig? get identityPoolConfig => get(); /// The Cognito Identity Provider service client. late final CognitoIdentityProviderClient cognitoIdentityProvider = expect(); @@ -211,7 +211,7 @@ final class SignInStateMachine CognitoConstants.challengeParamUsername: parameters.username, CognitoConstants.challengeParamAnswer: event.answer, }) - ..clientId = config.appClientId + ..clientId = config.clientId ..clientMetadata.addAll(event.clientMetadata) ..analyticsMetadata = get()?.toBuilder(), ); @@ -239,8 +239,8 @@ final class SignInStateMachine final workerMessage = SrpPasswordVerifierMessage((b) { b ..initResult = initResult - ..clientId = config.appClientId - ..clientSecret = config.appClientSecret + ..clientId = config.clientId + ..clientSecret = config.clientSecret ..poolId = config.poolId ..deviceKey = _user.deviceSecrets?.deviceKey ..challengeParameters = BuiltMap(_publicChallengeParameters) @@ -263,7 +263,7 @@ final class SignInStateMachine } return RespondToAuthChallengeRequest.build((b) { b - ..clientId = config.appClientId + ..clientId = config.clientId ..challengeName = ChallengeNameType.deviceSrpAuth ..challengeResponses.addAll({ CognitoConstants.challengeParamUsername: _user.username!, @@ -291,8 +291,8 @@ final class SignInStateMachine b ..deviceSecrets = _user.deviceSecrets!.build() ..initResult = _initResult - ..clientId = config.appClientId - ..clientSecret = config.appClientSecret + ..clientId = config.clientId + ..clientSecret = config.clientSecret ..challengeParameters = BuiltMap(_publicChallengeParameters) ..parameters = SignInParameters( (b) => b @@ -311,7 +311,7 @@ final class SignInStateMachine ) async { return RespondToAuthChallengeRequest.build((b) { b - ..clientId = config.appClientId + ..clientId = config.clientId ..challengeName = _challengeName ..challengeResponses.addAll({ CognitoConstants.challengeParamUsername: _user.username!, @@ -328,7 +328,7 @@ final class SignInStateMachine ) async { return RespondToAuthChallengeRequest.build((b) { b - ..clientId = config.appClientId + ..clientId = config.clientId ..challengeName = _challengeName ..challengeResponses.addAll({ CognitoConstants.challengeParamUsername: _user.username!, @@ -385,7 +385,7 @@ final class SignInStateMachine return InitiateAuthRequest.build((b) { b ..authFlow = AuthFlowType.userSrpAuth - ..clientId = config.appClientId + ..clientId = config.clientId ..authParameters.addAll({ CognitoConstants.challengeParamUsername: parameters.username, CognitoConstants.challengeParamSrpA: @@ -404,7 +404,7 @@ final class SignInStateMachine return InitiateAuthRequest.build((b) { b ..authFlow = AuthFlowType.userPasswordAuth - ..clientId = config.appClientId + ..clientId = config.clientId ..authParameters.addAll({ CognitoConstants.challengeParamUsername: parameters.username, CognitoConstants.challengeParamPassword: password, @@ -461,7 +461,7 @@ final class SignInStateMachine ..authParameters.addAll({ CognitoConstants.challengeParamUsername: parameters.username, }) - ..clientId = config.appClientId + ..clientId = config.clientId ..clientMetadata.addAll(event.clientMetadata); }); } @@ -587,12 +587,12 @@ final class SignInStateMachine initRequest = initRequest.rebuild((b) { b.analyticsMetadata = get()?.toBuilder(); - if (config.appClientSecret != null) { + if (config.clientSecret != null) { b.authParameters[CognitoConstants.challengeParamSecretHash] = computeSecretHash( parameters.username, - config.appClientId, - config.appClientSecret!, + config.clientId, + config.clientSecret!, ); } @@ -782,14 +782,14 @@ final class SignInStateMachine ..clientMetadata.replace(event?.clientMetadata ?? const {}) ..analyticsMetadata = get()?.toBuilder(); - if (config.appClientSecret != null && + if (config.clientSecret != null && b.challengeResponses[CognitoConstants.challengeParamSecretHash] == null) { b.challengeResponses[CognitoConstants.challengeParamSecretHash] = computeSecretHash( _user.username!, - config.appClientId, - config.appClientSecret!, + config.clientId, + config.clientSecret!, ); } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_out_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_out_state_machine.dart index 8becaeacaa..068226eb5b 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_out_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_out_state_machine.dart @@ -6,6 +6,7 @@ import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart hide UserNotFoundException; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; /// {@template amplify_auth_cognito.sign_out_state_machine} @@ -46,7 +47,7 @@ final class SignOutStateMachine CognitoIdentityProviderClient get _cognitoIdp => expect(); /// The Cognito user pool configuration. - CognitoUserPoolConfig get _userPoolConfig => expect(); + AWSAuthUserPoolConfig get _userPoolConfig => expect(); Future _onInitiate(SignOutInitiate event) async { final options = event.options; @@ -126,8 +127,8 @@ final class SignOutStateMachine await _cognitoIdp .revokeToken( RevokeTokenRequest( - clientId: _userPoolConfig.appClientId, - clientSecret: _userPoolConfig.appClientSecret, + clientId: _userPoolConfig.clientId, + clientSecret: _userPoolConfig.clientSecret, token: tokens.refreshToken, ), ) diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_up_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_up_state_machine.dart index 07865189a5..801e966fbe 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_up_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/sign_up_state_machine.dart @@ -6,6 +6,7 @@ import 'package:amplify_auth_cognito_dart/src/flows/helpers.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; /// {@template amplify_auth_cognito.sign_up_state_machine} @@ -34,8 +35,8 @@ final class SignUpStateMachine return cognitoIdp; } - CognitoUserPoolConfig get _userPoolConfig { - final userPoolConfig = get(); + AWSAuthUserPoolConfig get _userPoolConfig { + final userPoolConfig = get(); if (userPoolConfig == null) { throw const InvalidAccountTypeException.noUserPool(); } @@ -78,7 +79,7 @@ final class SignUpStateMachine SignUpRequest.build( (b) { b - ..clientId = _userPoolConfig.appClientId + ..clientId = _userPoolConfig.clientId ..username = event.parameters.username ..password = event.parameters.password ..clientMetadata.addAll(event.clientMetadata) @@ -100,11 +101,11 @@ final class SignUpStateMachine ) ..analyticsMetadata = get()?.toBuilder(); - final clientSecret = _userPoolConfig.appClientSecret; + final clientSecret = _userPoolConfig.clientSecret; if (clientSecret != null) { b.secretHash = computeSecretHash( event.parameters.username, - _userPoolConfig.appClientId, + _userPoolConfig.clientId, clientSecret, ); } @@ -138,17 +139,17 @@ final class SignUpStateMachine await _cognito.confirmSignUp( ConfirmSignUpRequest.build((b) { b - ..clientId = _userPoolConfig.appClientId + ..clientId = _userPoolConfig.clientId ..username = event.username ..confirmationCode = event.confirmationCode ..clientMetadata.addAll(event.clientMetadata) ..analyticsMetadata = get()?.toBuilder(); - final clientSecret = _userPoolConfig.appClientSecret; + final clientSecret = _userPoolConfig.clientSecret; if (clientSecret != null) { b.secretHash = computeSecretHash( event.username, - _userPoolConfig.appClientId, + _userPoolConfig.clientId, clientSecret, ); } diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/auth_state.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/auth_state.dart index a13f2b0e7e..d5837df9f3 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/auth_state.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/auth_state.dart @@ -8,6 +8,7 @@ import 'package:amplify_auth_cognito_dart/src/model/signout/cognito_sign_out_res import 'package:amplify_auth_cognito_dart/src/sdk/src/cognito_identity_provider/model/challenge_name_type.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/src/cognito_identity_provider/model/code_delivery_details_type.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; part 'auth_state.g.dart'; diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/configuration_state.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/configuration_state.dart index ade718ee38..db34a379b4 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/configuration_state.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/state/configuration_state.dart @@ -34,7 +34,7 @@ sealed class ConfigurationState extends AuthState { const factory ConfigurationState.configuring() = Configuring; /// {@macro amplify_auth_cognito.configuration_state.configured} - const factory ConfigurationState.configured(CognitoPluginConfig config) = + const factory ConfigurationState.configured(AWSAuthCognitoConfig config) = Configured; /// {@macro amplify_auth_cognito.configuration_state.configure_failure} @@ -83,7 +83,7 @@ final class Configured extends ConfigurationState with SuccessState { const Configured(this.config); /// The configured plugin config. - final CognitoPluginConfig config; + final AWSAuthCognitoConfig config; @override ConfigurationStateType get type => ConfigurationStateType.configured; diff --git a/packages/auth/amplify_auth_cognito_test/lib/common/mock_config.dart b/packages/auth/amplify_auth_cognito_test/lib/common/mock_config.dart index 41871af7f5..e316f08e07 100644 --- a/packages/auth/amplify_auth_cognito_test/lib/common/mock_config.dart +++ b/packages/auth/amplify_auth_cognito_test/lib/common/mock_config.dart @@ -4,7 +4,7 @@ import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; import 'package:amplify_auth_cognito_dart/src/jwt/jwt.dart'; -import 'package:amplify_auth_cognito_dart/src/model/auth_configuration.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; const testUserPoolId = 'us-east-1_userPoolId'; @@ -13,53 +13,56 @@ const testIdentityPoolId = 'identityPoolId'; const testRegion = 'region'; const scopes = ['profile']; const testUrlScheme = 'authtest'; -const redirectUri = '$testUrlScheme:/,http://localhost:9999/'; +final redirectUris = [ + Uri.parse('$testUrlScheme:/'), + Uri.parse('http://localhost:9999/'), +]; const webDomain = 'example.com'; const testPinpointAppId = 'pinpointAppId'; -const hostedUiConfig = CognitoOAuthConfig( - appClientId: testAppClientId, +final hostedUiConfig = AWSAuthHostedUiConfig( + clientId: testAppClientId, scopes: scopes, - signInRedirectUri: redirectUri, - signOutRedirectUri: redirectUri, - webDomain: webDomain, + signInRedirectUris: redirectUris, + signOutRedirectUris: redirectUris, + domainName: webDomain, ); -final userPoolOnlyConfig = AmplifyConfig( - auth: AuthConfig.cognito( - userPoolConfig: const CognitoUserPoolConfig( +final userPoolOnlyConfig = AWSAmplifyConfig( + auth: AWSAuthConfig.cognito( + userPool: AWSAuthUserPoolConfig( poolId: testUserPoolId, - appClientId: testAppClientId, + clientId: testAppClientId, region: testRegion, ), ), ); -final mockConfig = AmplifyConfig( - auth: AuthConfig.cognito( - userPoolConfig: const CognitoUserPoolConfig( +final mockConfig = AWSAmplifyConfig( + auth: AWSAuthConfig.cognito( + userPool: AWSAuthUserPoolConfig( poolId: testUserPoolId, - appClientId: testAppClientId, + clientId: testAppClientId, region: testRegion, + hostedUi: hostedUiConfig, ), - identityPoolConfig: const CognitoIdentityPoolConfig( + identityPool: AWSAuthIdentityPoolConfig( poolId: testIdentityPoolId, region: testRegion, ), - hostedUiConfig: hostedUiConfig, ), ); -final mockConfigWithPinpoint = AmplifyConfig( - auth: AuthConfig.cognito( - userPoolConfig: const CognitoUserPoolConfig( +final mockConfigWithPinpoint = AWSAmplifyConfig( + auth: AWSAuthConfig.cognito( + userPool: AWSAuthUserPoolConfig( poolId: testUserPoolId, - appClientId: testAppClientId, - region: testRegion, - ), - pinpointAnalyticsConfig: const CognitoPinpointAnalyticsConfig( - appId: testPinpointAppId, + clientId: testAppClientId, region: testRegion, + pinpointConfig: AWSAnalyticsPinpointConfig( + appId: testPinpointAppId, + region: testRegion, + ), ), ), ); @@ -98,9 +101,9 @@ const deviceKey = 'deviceKey'; const deviceGroupKey = 'deviceGroupKey'; const devicePassword = 'devicePassword'; -final authConfig = AuthConfiguration.fromConfig(mockConfig.auth!.awsPlugin!); -final userPoolConfig = authConfig.userPoolConfig!; -final identityPoolConfig = authConfig.identityPoolConfig!; +final authConfig = mockConfig.auth!.cognito!; +final userPoolConfig = authConfig.userPool!; +final identityPoolConfig = authConfig.identityPool!; final userPoolKeys = CognitoUserPoolKeys(userPoolConfig); final deviceKeys = CognitoDeviceKeys(userPoolConfig, userSub); final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig); diff --git a/packages/auth/amplify_auth_cognito_test/lib/common/mock_legacy_credential_provider.dart b/packages/auth/amplify_auth_cognito_test/lib/common/mock_legacy_credential_provider.dart index 65401e9f18..24749c47aa 100644 --- a/packages/auth/amplify_auth_cognito_test/lib/common/mock_legacy_credential_provider.dart +++ b/packages/auth/amplify_auth_cognito_test/lib/common/mock_legacy_credential_provider.dart @@ -3,9 +3,7 @@ import 'package:amplify_auth_cognito_dart/src/credentials/legacy_credential_provider.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; -import 'package:amplify_core/src/config/auth/cognito/credentials_provider.dart'; -import 'package:amplify_core/src/config/auth/cognito/oauth.dart'; -import 'package:amplify_core/src/config/auth/cognito/user_pool.dart'; +import 'package:amplify_core/amplify_config.dart'; class MockLegacyCredentialProvider implements LegacyCredentialProvider { MockLegacyCredentialProvider({CredentialStoreData? initialData}) @@ -15,18 +13,18 @@ class MockLegacyCredentialProvider implements LegacyCredentialProvider { @override Future deleteLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { data = null; } @override Future fetchLegacyCredentials({ - CognitoUserPoolConfig? userPoolConfig, - CognitoIdentityCredentialsProvider? identityPoolConfig, - CognitoOAuthConfig? hostedUiConfig, + AWSAuthUserPoolConfig? userPoolConfig, + AWSAuthIdentityPoolConfig? identityPoolConfig, + AWSAuthHostedUiConfig? hostedUiConfig, }) async { return data; } diff --git a/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_io_test.dart b/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_io_test.dart index 583b53571e..05207b6acb 100644 --- a/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_io_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_io_test.dart @@ -147,9 +147,8 @@ void main() { ..addInstance>(dispatcher); final hostedUiPlatform = MockHostedUiPlatform(dependencyManager); - final redirect = Uri.parse( - redirectUri.split(',').firstWhere((uri) => uri.contains('localhost')), - ); + final redirect = + redirectUris.firstWhere((uri) => uri.host == 'localhost'); expect(hostedUiPlatform.signInRedirectUri, redirect); expect(hostedUiPlatform.signOutRedirectUri, redirect); diff --git a/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_test.dart b/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_test.dart index c19f547a2b..02c2e06cd9 100644 --- a/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/flows/hostedui/hosted_ui_platform_test.dart @@ -21,7 +21,7 @@ void main() { late SecureStorageInterface secureStorage; late HostedUiPlatform platform; late DependencyManager dependencyManager; - const keys = HostedUiKeys(hostedUiConfig); + final keys = HostedUiKeys(hostedUiConfig); group('HostedUiPlatform', () { setUp(() { @@ -64,7 +64,7 @@ void main() { test('missing state throws', () async { final parameters = await server.authorize( await platform.getSignInUri( - redirectUri: Uri.parse(redirectUri), + redirectUri: redirectUris.first, ), ); @@ -81,7 +81,7 @@ void main() { test('mismatched state throws', () async { final parameters = await server.authorize( await platform.getSignInUri( - redirectUri: Uri.parse(redirectUri), + redirectUri: redirectUris.first, ), ); @@ -107,7 +107,7 @@ void main() { platform = HostedUiPlatform(dependencyManager); final parameters = await server.authorize( await platform.getSignInUri( - redirectUri: Uri.parse(redirectUri), + redirectUri: redirectUris.first, ), ); @@ -120,7 +120,7 @@ void main() { test('succeeds with nonce', () async { final parameters = await server.authorize( await platform.getSignInUri( - redirectUri: Uri.parse(redirectUri), + redirectUri: redirectUris.first, ), ); diff --git a/packages/auth/amplify_auth_cognito_test/test/plugin/delete_user_test.dart b/packages/auth/amplify_auth_cognito_test/test/plugin/delete_user_test.dart index 6cafea2ffc..78fe726cb4 100644 --- a/packages/auth/amplify_auth_cognito_test/test/plugin/delete_user_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/plugin/delete_user_test.dart @@ -8,7 +8,6 @@ import 'dart:async'; import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart' hide InternalErrorException; import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; -import 'package:amplify_auth_cognito_dart/src/model/auth_configuration.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_test/common/matchers.dart'; @@ -20,9 +19,6 @@ import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:test/test.dart'; void main() { - final authConfig = AuthConfiguration.fromConfig(mockConfig.auth!.awsPlugin!); - final userPoolConfig = authConfig.userPoolConfig!; - final identityPoolConfig = authConfig.identityPoolConfig!; final userPoolKeys = CognitoUserPoolKeys(userPoolConfig); final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig); diff --git a/packages/auth/amplify_auth_cognito_test/test/plugin/reset_password_test.dart b/packages/auth/amplify_auth_cognito_test/test/plugin/reset_password_test.dart index 48e543f073..3b2294cfc7 100644 --- a/packages/auth/amplify_auth_cognito_test/test/plugin/reset_password_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/plugin/reset_password_test.dart @@ -3,7 +3,6 @@ import 'package:amplify_auth_cognito_dart/amplify_auth_cognito_dart.dart'; import 'package:amplify_auth_cognito_dart/src/credentials/cognito_keys.dart'; -import 'package:amplify_auth_cognito_dart/src/model/auth_configuration.dart'; import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart' hide NotAuthorizedException; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; @@ -17,9 +16,6 @@ import 'package:test/test.dart'; // Follows resetPassword test cases: // https://github.com/aws-amplify/amplify-android/tree/main/aws-auth-cognito/src/test/resources/feature-test/testsuites/resetPassword void main() { - final authConfig = AuthConfiguration.fromConfig(mockConfig.auth!.awsPlugin!); - final userPoolConfig = authConfig.userPoolConfig!; - final identityPoolConfig = authConfig.identityPoolConfig!; final userPoolKeys = CognitoUserPoolKeys(userPoolConfig); final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig); diff --git a/packages/auth/amplify_auth_cognito_test/test/plugin/sign_out_test.dart b/packages/auth/amplify_auth_cognito_test/test/plugin/sign_out_test.dart index a1d8d7dd73..53e98dee1b 100644 --- a/packages/auth/amplify_auth_cognito_test/test/plugin/sign_out_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/plugin/sign_out_test.dart @@ -25,7 +25,7 @@ final throwsSignedOutException = throwsA(isA()); void main() { final userPoolKeys = CognitoUserPoolKeys(userPoolConfig); final identityPoolKeys = CognitoIdentityPoolKeys(identityPoolConfig); - const hostedUiKeys = HostedUiKeys(hostedUiConfig); + final hostedUiKeys = HostedUiKeys(hostedUiConfig); late AmplifyAuthCognitoDart plugin; late CognitoAuthStateMachine stateMachine; diff --git a/packages/auth/amplify_auth_cognito_test/test/state/configuration_state_machine_test.dart b/packages/auth/amplify_auth_cognito_test/test/state/configuration_state_machine_test.dart index f707d9a2dc..1f6bfa240a 100644 --- a/packages/auth/amplify_auth_cognito_test/test/state/configuration_state_machine_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/state/configuration_state_machine_test.dart @@ -8,12 +8,13 @@ import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_test/common/mock_config.dart'; import 'package:amplify_auth_cognito_test/common/mock_secure_storage.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:stream_transform/stream_transform.dart'; import 'package:test/test.dart'; -const badConfig = AmplifyConfig(); +final badConfig = AWSAmplifyConfig(); void main() { late CognitoAuthStateMachine stateMachine; @@ -50,7 +51,7 @@ void main() { expect( stateMachine - .dispatch(const ConfigurationEvent.configure(badConfig)) + .dispatch(ConfigurationEvent.configure(badConfig)) .completed, throwsA(isA()), ); diff --git a/packages/auth/amplify_auth_cognito_test/test/state/fetch_auth_session_state_machine_test.dart b/packages/auth/amplify_auth_cognito_test/test/state/fetch_auth_session_state_machine_test.dart index 896aa0c0e4..53148e8d8b 100644 --- a/packages/auth/amplify_auth_cognito_test/test/state/fetch_auth_session_state_machine_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/state/fetch_auth_session_state_machine_test.dart @@ -11,6 +11,7 @@ import 'package:amplify_auth_cognito_test/common/jwt.dart'; import 'package:amplify_auth_cognito_test/common/mock_clients.dart'; import 'package:amplify_auth_cognito_test/common/mock_config.dart'; import 'package:amplify_auth_cognito_test/common/mock_secure_storage.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -20,7 +21,7 @@ void main() { group('FetchAuthSessionStateMachine', () { late CognitoAuthStateMachine stateMachine; late SecureStorageInterface secureStorage; - late AmplifyConfig config; + late AWSAmplifyConfig config; late CognitoAuthSession session; final newAccessToken = createJwt( @@ -46,7 +47,7 @@ void main() { const newAccessKeyId = 'newAccessKeyId'; const newSecretAccessKey = 'newSecretAccessKey'; - Future configureAmplify(AmplifyConfig config) async { + Future configureAmplify(AWSAmplifyConfig config) async { stateMachine.dispatch(ConfigurationEvent.configure(config)).ignore(); await stateMachine.stream.whereType().first; } @@ -120,8 +121,7 @@ void main() { secureStorage = MockSecureStorage(); stateMachine = CognitoAuthStateMachine() ..addInstance(secureStorage) - ..addInstance(mockConfig) - ..addInstance(authConfig); + ..addInstance(mockConfig); }); group('User Pool + Identity Pool', () { diff --git a/packages/auth/amplify_auth_cognito_test/test/state/hosted_ui_state_machine_test.dart b/packages/auth/amplify_auth_cognito_test/test/state/hosted_ui_state_machine_test.dart index 81d8696bc0..1292110735 100644 --- a/packages/auth/amplify_auth_cognito_test/test/state/hosted_ui_state_machine_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/state/hosted_ui_state_machine_test.dart @@ -11,6 +11,7 @@ import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity.dart'; import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_test/amplify_auth_cognito_test.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:http/http.dart' as http; @@ -70,7 +71,7 @@ class FailingHostedUiPlatform extends HostedUiPlatform { void main() { AWSLogger().logLevel = LogLevel.verbose; - const keys = HostedUiKeys(hostedUiConfig); + final keys = HostedUiKeys(hostedUiConfig); group('HostedUiStateMachine', () { late MockOAuthServer server; @@ -93,7 +94,7 @@ void main() { ..addInstance>( const MockDispatcher(), ) - ..addInstance(hostedUiConfig); + ..addInstance(hostedUiConfig); final platform = stateMachine.create(); final authorizationUri = await platform.getSignInUri(); diff --git a/packages/auth/amplify_auth_cognito_test/test/state/sign_in_state_machine_test.dart b/packages/auth/amplify_auth_cognito_test/test/state/sign_in_state_machine_test.dart index 6ac4bfccb5..cd5af04499 100644 --- a/packages/auth/amplify_auth_cognito_test/test/state/sign_in_state_machine_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/state/sign_in_state_machine_test.dart @@ -13,6 +13,7 @@ import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_auth_cognito_test/common/mock_clients.dart'; import 'package:amplify_auth_cognito_test/common/mock_config.dart'; import 'package:amplify_auth_cognito_test/common/mock_secure_storage.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -34,35 +35,17 @@ void main() { }); test('can change flow at runtime', () async { - const config = AmplifyConfig( - auth: AuthConfig( - plugins: { - CognitoPluginConfig.pluginKey: CognitoPluginConfig( - auth: AWSConfigMap( - { - 'Default': CognitoAuthConfig( - authenticationFlowType: AuthenticationFlowType.userSrpAuth, - ), - }, - ), - cognitoUserPool: AWSConfigMap( - { - 'Default': CognitoUserPoolConfig( - poolId: testUserPoolId, - appClientId: testAppClientId, - region: testRegion, - ), - }, - ), - ), - }, + final config = AWSAmplifyConfig( + auth: AWSAuthConfig.cognito( + userPool: AWSAuthUserPoolConfig( + poolId: testUserPoolId, + clientId: testAppClientId, + region: testRegion, + authFlowType: AuthenticationFlowType.userSrpAuth, + ), ), ); - stateMachine - .dispatch( - const ConfigurationEvent.configure(config), - ) - .ignore(); + stateMachine.dispatch(ConfigurationEvent.configure(config)).ignore(); await expectLater( stateMachine.stream.whereType().firstWhere( (event) => event is Configured || event is ConfigureFailure, diff --git a/packages/notifications/push/amplify_push_notifications/lib/src/amplify_push_notifications_impl.dart b/packages/notifications/push/amplify_push_notifications/lib/src/amplify_push_notifications_impl.dart index 601e8d3e04..255aa9d01f 100644 --- a/packages/notifications/push/amplify_push_notifications/lib/src/amplify_push_notifications_impl.dart +++ b/packages/notifications/push/amplify_push_notifications/lib/src/amplify_push_notifications_impl.dart @@ -7,6 +7,7 @@ import 'dart:async'; import 'dart:convert'; import 'dart:ui'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; // ignore: implementation_imports, invalid_use_of_internal_member import 'package:amplify_core/src/http/amplify_category_method.dart'; @@ -203,10 +204,10 @@ abstract class AmplifyPushNotifications @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { - final notificationsConfig = config?.notifications?.awsPlugin; + final notificationsConfig = config?.notifications?.push; if (notificationsConfig == null) { throw const PushNotificationException( 'No Pinpoint plugin config available', diff --git a/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.dart b/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.dart index 81045425f5..6cb08ae3ef 100644 --- a/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.dart +++ b/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.dart @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 import 'dart:async'; -import 'dart:convert'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_push_notifications/amplify_push_notifications.dart'; import 'package:amplify_push_notifications/src/native_push_notifications_plugin.g.dart'; @@ -55,9 +55,7 @@ void main() { ..addInstance(mockPushNotificationsHostApi) ..addInstance(mockAmplifySecureStorage); - final config = AmplifyConfig.fromJson( - jsonDecode(amplifyconfig) as Map, - ); + final config = AWSAmplifyConfig.parse(amplifyconfig); setUp(() { plugin = TestAmplifyPushNotifications( @@ -203,9 +201,7 @@ void main() { group('Config failure cases', () { test('should throw exception when configuring if there is no appId present', () async { - final config = AmplifyConfig.fromJson( - jsonDecode(noPushAppIdAmplifyConfig) as Map, - ); + final config = AWSAmplifyConfig.parse(noPushAppIdAmplifyConfig); expect( () async => plugin.configure( authProviderRepo: authProviderRepo, diff --git a/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.mocks.dart b/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.mocks.dart index a65c332bc6..87cbbbb06b 100644 --- a/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.mocks.dart +++ b/packages/notifications/push/amplify_push_notifications/test/amplify_push_noitfications_impl_test.mocks.dart @@ -1,17 +1,18 @@ -// Mocks generated by Mockito 5.4.0 from annotations +// Mocks generated by Mockito 5.4.2 from annotations // in amplify_push_notifications/test/amplify_push_noitfications_impl_test.dart. // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes import 'dart:async' as _i5; +import 'package:amplify_core/amplify_config.dart' as _i6; import 'package:amplify_core/amplify_core.dart' as _i4; import 'package:amplify_push_notifications/src/native_push_notifications_plugin.g.dart' as _i2; import 'package:amplify_push_notifications/src/push_notifications_flutter_api.dart' - as _i7; + as _i8; import 'package:amplify_secure_storage/src/amplify_secure_storage.vm.dart' - as _i6; + as _i7; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart' as _i3; import 'package:mockito/mockito.dart' as _i1; @@ -153,7 +154,7 @@ class MockServiceProviderClient extends _i1.Mock @override _i5.Future init({ - required _i4.NotificationsPinpointPluginConfig? config, + required _i6.AWSPushNotificationsConfig? config, required _i4.AmplifyAuthProviderRepository? authProviderRepo, }) => (super.noSuchMethod( @@ -217,7 +218,7 @@ class MockServiceProviderClient extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockAmplifySecureStorage extends _i1.Mock - implements _i6.AmplifySecureStorage { + implements _i7.AmplifySecureStorage { MockAmplifySecureStorage() { _i1.throwOnMissingStub(this); } @@ -294,7 +295,7 @@ class MockAmplifySecureStorage extends _i1.Mock /// /// See the documentation for Mockito's code generation for more information. class MockAmplifyPushNotificationsFlutterApi extends _i1.Mock - implements _i7.AmplifyPushNotificationsFlutterApi { + implements _i8.AmplifyPushNotificationsFlutterApi { MockAmplifyPushNotificationsFlutterApi() { _i1.throwOnMissingStub(this); } diff --git a/packages/notifications/push/amplify_push_notifications_pinpoint/lib/src/pinpoint_provider.dart b/packages/notifications/push/amplify_push_notifications_pinpoint/lib/src/pinpoint_provider.dart index e4e0321281..b5c877fb3d 100644 --- a/packages/notifications/push/amplify_push_notifications_pinpoint/lib/src/pinpoint_provider.dart +++ b/packages/notifications/push/amplify_push_notifications_pinpoint/lib/src/pinpoint_provider.dart @@ -11,6 +11,7 @@ import 'package:amplify_analytics_pinpoint/src/device_context_info_provider/flut import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/analytics_client.dart'; // ignore: implementation_imports import 'package:amplify_analytics_pinpoint_dart/src/sdk/src/pinpoint/model/channel_type.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_push_notifications_pinpoint/src/event_info_type.dart'; import 'package:amplify_secure_storage/amplify_secure_storage.dart'; @@ -54,11 +55,17 @@ class PinpointProvider implements ServiceProviderClient { @override Future init({ - required NotificationsPinpointPluginConfig config, + required AWSPushNotificationsConfig config, required AmplifyAuthProviderRepository authProviderRepo, @visibleForTesting AnalyticsClient? analyticsClient, }) async { try { + final pinpointConfig = switch (config) { + AWSPushNotificationsConfigPinpoint$(:final pinpoint) => pinpoint, + _ => throw ArgumentError( + 'Invalid Pinpoint notifications config: $config', + ), + }; if (!_isInitialized) { final authProvider = authProviderRepo .getAuthProvider(APIAuthorizationType.iam.authProviderToken); @@ -68,8 +75,8 @@ class PinpointProvider implements ServiceProviderClient { 'No AWSIamAmplifyAuthProvider available. Is Auth category added and configured?', ); } - final region = config.region; - final appId = config.appId; + final region = pinpointConfig.region; + final appId = pinpointConfig.appId; final secureStorageFactory = AmplifySecureStorage.factoryFrom(); diff --git a/packages/notifications/push/amplify_push_notifications_pinpoint/test/pinpoint_provider_test.dart b/packages/notifications/push/amplify_push_notifications_pinpoint/test/pinpoint_provider_test.dart index 85af25b503..18fa3e313b 100644 --- a/packages/notifications/push/amplify_push_notifications_pinpoint/test/pinpoint_provider_test.dart +++ b/packages/notifications/push/amplify_push_notifications_pinpoint/test/pinpoint_provider_test.dart @@ -5,6 +5,7 @@ import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/analytics_client.dart'; import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/endpoint_client/endpoint_client.dart'; import 'package:amplify_analytics_pinpoint_dart/src/impl/analytics_client/event_client/event_client.dart'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:amplify_push_notifications_pinpoint/src/pinpoint_provider.dart'; import 'package:flutter_test/flutter_test.dart'; @@ -28,7 +29,7 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); final pinpointProvider = PinpointProvider(); final mockAmplifyAuthProviderRepository = MockAmplifyAuthProviderRepository(); - const notificationsPinpointConfig = NotificationsPinpointPluginConfig( + final notificationsPinpointConfig = AWSPushNotificationsConfig.pinpoint( appId: 'APP_ID', region: 'REGION', ); diff --git a/packages/storage/amplify_storage_s3/lib/src/amplify_storage_s3_impl.dart b/packages/storage/amplify_storage_s3/lib/src/amplify_storage_s3_impl.dart index 44a918c97f..799dc06760 100644 --- a/packages/storage/amplify_storage_s3/lib/src/amplify_storage_s3_impl.dart +++ b/packages/storage/amplify_storage_s3/lib/src/amplify_storage_s3_impl.dart @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import 'dart:async'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_db_common/amplify_db_common.dart' as db_common; import 'package:amplify_storage_s3/src/utils/app_path_provider/app_path_provider.dart'; @@ -24,7 +25,7 @@ class AmplifyStorageS3 extends AmplifyStorageS3Dart { @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { await super.configure(config: config, authProviderRepo: authProviderRepo); diff --git a/packages/storage/amplify_storage_s3/test/amplify_storage_s3_impl_test.dart b/packages/storage/amplify_storage_s3/test/amplify_storage_s3_impl_test.dart index 4612eb6b5a..309c86c3d3 100644 --- a/packages/storage/amplify_storage_s3/test/amplify_storage_s3_impl_test.dart +++ b/packages/storage/amplify_storage_s3/test/amplify_storage_s3_impl_test.dart @@ -3,6 +3,7 @@ import 'dart:async'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_storage_s3/amplify_storage_s3.dart'; import 'package:amplify_storage_s3/src/utils/app_path_provider/app_path_provider.dart'; @@ -12,11 +13,11 @@ import 'test_utils/test_token_provider.dart'; void main() { group('AmplifyStorageS3', () { - const testConfig = AmplifyConfig( - storage: StorageConfig( - plugins: { - S3PluginConfig.pluginKey: S3PluginConfig( - bucket: '123', + final testConfig = AWSAmplifyConfig( + storage: AWSStorageConfig.s3( + buckets: { + '123': AWSStorageS3Bucket( + bucketName: '123', region: 'west-2', ), }, diff --git a/packages/storage/amplify_storage_s3_dart/lib/src/amplify_storage_s3_dart_impl.dart b/packages/storage/amplify_storage_s3_dart/lib/src/amplify_storage_s3_dart_impl.dart index 9e63131c8e..b58b5ddf4a 100644 --- a/packages/storage/amplify_storage_s3_dart/lib/src/amplify_storage_s3_dart_impl.dart +++ b/packages/storage/amplify_storage_s3_dart/lib/src/amplify_storage_s3_dart_impl.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:typed_data'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_db_common_dart/amplify_db_common_dart.dart' as db_common; @@ -54,7 +55,7 @@ class AmplifyStorageS3Dart extends StoragePluginInterface /// The [S3PluginConfig] of the [AmplifyStorageS3Dart] plugin. @protected - late final S3PluginConfig s3pluginConfig; + late final AWSStorageS3Bucket s3pluginConfig; S3PrefixResolver? _prefixResolver; @@ -70,15 +71,18 @@ class AmplifyStorageS3Dart extends StoragePluginInterface @override Future configure({ - AmplifyConfig? config, + AWSAmplifyConfig? config, required AmplifyAuthProviderRepository authProviderRepo, }) async { - final s3PluginConfig = config?.storage?.awsPlugin; - + final s3PluginConfig = config?.storage?.s3; if (s3PluginConfig == null) { throw ConfigurationError('No Storage S3 plugin config detected.'); } - s3pluginConfig = s3PluginConfig; + final singleBucket = s3PluginConfig.buckets.values.singleOrNull; + if (singleBucket == null) { + throw ConfigurationError('Multiple buckets are not supported'); + } + s3pluginConfig = singleBucket; final identityProvider = authProviderRepo .getAuthProvider(APIAuthorizationType.userPools.authProviderToken); @@ -114,7 +118,7 @@ class AmplifyStorageS3Dart extends StoragePluginInterface ..addInstance( StorageS3Service( credentialsProvider: credentialsProvider, - s3PluginConfig: s3PluginConfig, + s3PluginConfig: singleBucket, delimiter: _delimiter, prefixResolver: _prefixResolver!, logger: logger, @@ -273,7 +277,6 @@ class AmplifyStorageS3Dart extends StoragePluginInterface key: key, localFile: localFile, options: options, - s3pluginConfig: s3pluginConfig, storageS3Service: storageS3Service, appPathProvider: _appPathProvider, onProgress: onProgress, diff --git a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_html.dart b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_html.dart index f6e64dd076..9e876ff0cd 100644 --- a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_html.dart +++ b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_html.dart @@ -11,7 +11,6 @@ S3DownloadFileOperation downloadFile({ required String key, required AWSFile localFile, required StorageDownloadFileOptions options, - required S3PluginConfig s3pluginConfig, required StorageS3Service storageS3Service, required AppPathProvider appPathProvider, void Function(S3TransferProgress)? onProgress, @@ -28,7 +27,6 @@ S3DownloadFileOperation downloadFile({ key: key, localFile: localFile, options: options, - s3pluginConfig: s3pluginConfig, storageS3Service: storageS3Service, ), // In Web the download process is managed by the browser so the operation @@ -43,7 +41,6 @@ Future _downloadFromUrl({ required String key, required AWSFile localFile, required StorageDownloadFileOptions options, - required S3PluginConfig s3pluginConfig, required StorageS3Service storageS3Service, }) async { final s3PluginOptions = options.pluginOptions as S3DownloadFilePluginOptions; diff --git a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_io.dart b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_io.dart index 52e9a1e501..8517c37b1f 100644 --- a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_io.dart +++ b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_io.dart @@ -15,7 +15,6 @@ S3DownloadFileOperation downloadFile({ required String key, required AWSFile localFile, required StorageDownloadFileOptions options, - required S3PluginConfig s3pluginConfig, required StorageS3Service storageS3Service, required AppPathProvider appPathProvider, void Function(S3TransferProgress)? onProgress, diff --git a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_stub.dart b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_stub.dart index 81fd034fd1..f320cf507b 100644 --- a/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_stub.dart +++ b/packages/storage/amplify_storage_s3_dart/lib/src/platform_impl/download_file/download_file_stub.dart @@ -10,7 +10,6 @@ S3DownloadFileOperation downloadFile({ required String key, required AWSFile localFile, required StorageDownloadFileOptions options, - required S3PluginConfig s3pluginConfig, required StorageS3Service storageS3Service, required AppPathProvider appPathProvider, void Function(S3TransferProgress)? onProgress, diff --git a/packages/storage/amplify_storage_s3_dart/lib/src/storage_s3_service/service/storage_s3_service_impl.dart b/packages/storage/amplify_storage_s3_dart/lib/src/storage_s3_service/service/storage_s3_service_impl.dart index 926d20d0e9..f4a17759bb 100644 --- a/packages/storage/amplify_storage_s3_dart/lib/src/storage_s3_service/service/storage_s3_service_impl.dart +++ b/packages/storage/amplify_storage_s3_dart/lib/src/storage_s3_service/service/storage_s3_service_impl.dart @@ -4,6 +4,7 @@ import 'dart:async'; import 'dart:math'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart' hide PaginatedResult; import 'package:amplify_storage_s3_dart/amplify_storage_s3_dart.dart'; import 'package:amplify_storage_s3_dart/src/exception/s3_storage_exception.dart' @@ -30,15 +31,14 @@ const testDateTimeNowOverride = #_testDateTimeNowOverride; class StorageS3Service { /// {@macro amplify_storage_s3.storage_s3_service} factory StorageS3Service({ - required S3PluginConfig s3PluginConfig, + required AWSStorageS3Bucket s3PluginConfig, required S3PrefixResolver prefixResolver, required AWSIamAmplifyAuthProvider credentialsProvider, required AWSLogger logger, required DependencyManager dependencyManager, String? delimiter, }) { - final usePathStyle = s3PluginConfig.bucket.contains('.'); - + final usePathStyle = s3PluginConfig.bucketName.contains('.'); if (usePathStyle) { logger.warn( 'Since your bucket name contains dots (`"."`), the StorageS3 plugin' @@ -65,7 +65,7 @@ class StorageS3Service { } StorageS3Service._({ - required S3PluginConfig s3PluginConfig, + required AWSStorageS3Bucket s3PluginConfig, required smithy_aws.S3ClientConfig s3ClientConfig, required S3PrefixResolver prefixResolver, required AWSIamAmplifyAuthProvider credentialsProvider, @@ -97,7 +97,7 @@ class StorageS3Service { static final _defaultS3SignerConfiguration = sigv4.S3ServiceConfiguration(signPayload: false); - final S3PluginConfig _s3PluginConfig; + final AWSStorageS3Bucket _s3PluginConfig; final String _delimiter; final smithy_aws.S3ClientConfig _defaultS3ClientConfig; final s3.S3Client _defaultS3Client; @@ -142,7 +142,7 @@ class StorageS3Service { if (!s3PluginOptions.listAll) { final request = s3.ListObjectsV2Request.build((builder) { builder - ..bucket = _s3PluginConfig.bucket + ..bucket = _s3PluginConfig.bucketName ..prefix = listTargetPrefix ..maxKeys = options.pageSize ..continuationToken = options.nextToken @@ -168,7 +168,7 @@ class StorageS3Service { try { final request = s3.ListObjectsV2Request.build((builder) { builder - ..bucket = _s3PluginConfig.bucket + ..bucket = _s3PluginConfig.bucketName ..prefix = listTargetPrefix ..delimiter = s3PluginOptions.excludeSubPaths ? _delimiter : null; }); @@ -225,7 +225,7 @@ class StorageS3Service { storageItem: S3Item.fromHeadObjectOutput( await headObject( s3client: _defaultS3Client, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, key: keyToGetProperties, ), key: key, @@ -282,11 +282,11 @@ class StorageS3Service { } var host = - '${_s3PluginConfig.bucket}.${_getS3EndpointHost(region: _s3PluginConfig.region)}'; + '${_s3PluginConfig.bucketName}.${_getS3EndpointHost(region: _s3PluginConfig.region)}'; if (_defaultS3ClientConfig.usePathStyle) { - host = host.replaceFirst('${_s3PluginConfig.bucket}.', ''); - keyToGetUrl = '/${_s3PluginConfig.bucket}$keyToGetUrl'; + host = host.replaceFirst('${_s3PluginConfig.bucketName}.', ''); + keyToGetUrl = '/${_s3PluginConfig.bucketName}$keyToGetUrl'; } else if (s3PluginOptions.useAccelerateEndpoint) { // https: //docs.aws.amazon.com/AmazonS3/latest/userguide/transfer-acceleration-getting-started.html host = host @@ -336,7 +336,7 @@ class StorageS3Service { final downloadDataTask = S3DownloadTask( s3Client: _defaultS3Client, defaultS3ClientConfig: _defaultS3ClientConfig, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, defaultAccessLevel: _s3PluginConfig.defaultAccessLevel, key: key, options: options, @@ -369,7 +369,7 @@ class StorageS3Service { dataPayload, s3Client: _defaultS3Client, defaultS3ClientConfig: _defaultS3ClientConfig, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, defaultAccessLevel: _s3PluginConfig.defaultAccessLevel, key: key, options: options, @@ -409,7 +409,7 @@ class StorageS3Service { localFile, s3Client: _defaultS3Client, defaultS3ClientConfig: _defaultS3ClientConfig, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, defaultAccessLevel: _s3PluginConfig.defaultAccessLevel, key: key, options: uploadDataOptions, @@ -464,8 +464,8 @@ class StorageS3Service { final copyRequest = s3.CopyObjectRequest.build((builder) { builder - ..bucket = _s3PluginConfig.bucket - ..copySource = '${_s3PluginConfig.bucket}/$sourceKey' + ..bucket = _s3PluginConfig.bucketName + ..copySource = '${_s3PluginConfig.bucketName}/$sourceKey' ..key = destinationKey ..metadataDirective = s3.MetadataDirective.copy; }); @@ -484,7 +484,7 @@ class StorageS3Service { ? S3Item.fromHeadObjectOutput( await headObject( s3client: _defaultS3Client, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, key: destinationKey, ), key: destination.storageItem.key, @@ -550,7 +550,7 @@ class StorageS3Service { try { await _deleteObject( s3client: _defaultS3Client, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, key: keyToRemove, ); } on StorageException catch (error) { @@ -585,7 +585,7 @@ class StorageS3Service { await _deleteObject( s3client: _defaultS3Client, - bucket: _s3PluginConfig.bucket, + bucket: _s3PluginConfig.bucketName, key: keyToRemove, ); @@ -629,7 +629,7 @@ class StorageS3Service { ); final request = s3.DeleteObjectsRequest.build((builder) { builder - ..bucket = _s3PluginConfig.bucket + ..bucket = _s3PluginConfig.bucketName // force to use sha256 instead of md5 ..checksumAlgorithm = s3.ChecksumAlgorithm.sha256 ..delete = s3.Delete.build((builder) { @@ -763,7 +763,7 @@ class StorageS3Service { for (final record in records) { final request = s3.AbortMultipartUploadRequest.build((builder) { builder - ..bucket = _s3PluginConfig.bucket + ..bucket = _s3PluginConfig.bucketName ..key = record.objectKey ..uploadId = record.uploadId; }); diff --git a/packages/storage/amplify_storage_s3_dart/test/amplify_storage_s3_dart_test.dart b/packages/storage/amplify_storage_s3_dart/test/amplify_storage_s3_dart_test.dart index af7c26e7a3..4034c5d92a 100644 --- a/packages/storage/amplify_storage_s3_dart/test/amplify_storage_s3_dart_test.dart +++ b/packages/storage/amplify_storage_s3_dart/test/amplify_storage_s3_dart_test.dart @@ -1,6 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_storage_s3_dart/amplify_storage_s3_dart.dart'; import 'package:amplify_storage_s3_dart/src/prefix_resolver/storage_access_level_aware_prefix_resolver.dart'; @@ -15,16 +16,10 @@ import 'test_utils/test_token_provider.dart'; void main() { const testDefaultStorageAccessLevel = StorageAccessLevel.guest; const testAccessLevelProtected = StorageAccessLevel.protected; - const testConfig = AmplifyConfig( - storage: StorageConfig( - plugins: { - S3PluginConfig.pluginKey: S3PluginConfig( - bucket: '123', - region: 'west-2', - defaultAccessLevel: testDefaultStorageAccessLevel, - ), - }, - ), + final testConfig = AWSAmplifyConfig().withStorageBucket( + bucketName: '123', + region: 'west-2', + defaultAccessLevel: testDefaultStorageAccessLevel, ); final testAuthProviderRepo = AmplifyAuthProviderRepository() diff --git a/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_html_test.dart b/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_html_test.dart index 6b65c851f4..d4539955be 100644 --- a/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_html_test.dart +++ b/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_html_test.dart @@ -97,7 +97,6 @@ void main() { pluginOptions: const S3DownloadFilePluginOptions.forIdentity(testTargetIdentity), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: const DummyPathProvider(), ); @@ -168,7 +167,6 @@ void main() { key: testKey, localFile: AWSFile.fromPath('download.jpg'), options: options, - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: const DummyPathProvider(), ).result; diff --git a/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_io_test.dart b/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_io_test.dart index 978ecc620b..832bc986ec 100644 --- a/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_io_test.dart +++ b/packages/storage/amplify_storage_s3_dart/test/platform_impl/download_file_io_test.dart @@ -77,7 +77,6 @@ void main() { key: testKey, localFile: AWSFile.fromPath(testDestinationPath), options: options, - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { @@ -165,7 +164,6 @@ void main() { accessLevel: testS3pluginConfig.defaultAccessLevel, pluginOptions: const S3DownloadFilePluginOptions(), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { @@ -211,7 +209,6 @@ void main() { testTargetIdentity, ), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { @@ -271,7 +268,6 @@ void main() { accessLevel: testS3pluginConfig.defaultAccessLevel, pluginOptions: const S3DownloadFilePluginOptions(), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { @@ -304,7 +300,6 @@ void main() { accessLevel: testS3pluginConfig.defaultAccessLevel, pluginOptions: const S3DownloadFilePluginOptions(), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { @@ -343,7 +338,6 @@ void main() { accessLevel: testS3pluginConfig.defaultAccessLevel, pluginOptions: const S3DownloadFilePluginOptions(), ), - s3pluginConfig: testS3pluginConfig, storageS3Service: storageS3Service, appPathProvider: appPathProvider, onProgress: (progress) { diff --git a/packages/storage/amplify_storage_s3_dart/test/storage_s3_service/storage_s3_service_test.dart b/packages/storage/amplify_storage_s3_dart/test/storage_s3_service/storage_s3_service_test.dart index e40236a7f4..c949107b5b 100644 --- a/packages/storage/amplify_storage_s3_dart/test/storage_s3_service/storage_s3_service_test.dart +++ b/packages/storage/amplify_storage_s3_dart/test/storage_s3_service/storage_s3_service_test.dart @@ -3,6 +3,7 @@ import 'dart:async'; +import 'package:amplify_core/amplify_config.dart'; import 'package:amplify_core/amplify_core.dart' hide PaginatedResult; import 'package:amplify_storage_s3_dart/amplify_storage_s3_dart.dart'; import 'package:amplify_storage_s3_dart/src/exception/s3_storage_exception.dart'; @@ -37,8 +38,10 @@ void main() { group('StorageS3Service', () { const testBucket = 'bucket1'; const testRegion = 'west-2'; - const s3PluginConfig = - S3PluginConfig(bucket: testBucket, region: testRegion); + final s3PluginConfig = AWSStorageS3Bucket( + bucketName: testBucket, + region: testRegion, + ); final testPrefixResolver = TestPrefixResolver(); late DependencyManager dependencyManager; @@ -65,8 +68,8 @@ void main() { test('log a warning when should use path style URLs', () { StorageS3Service( - s3PluginConfig: const S3PluginConfig( - bucket: 'bucket.name.has.dots.com', + s3PluginConfig: AWSStorageS3Bucket( + bucketName: 'bucket.name.has.dots.com', region: 'us-west-2', ), prefixResolver: testPrefixResolver, @@ -852,8 +855,10 @@ void main() { late StorageS3Service pathStyleStorageS3Service; const pathStyleBucket = 'bucket.name.has.dots.com'; const pathStyleRegion = 'west-2'; - const pathStyleS3PluginConfig = - S3PluginConfig(bucket: pathStyleBucket, region: pathStyleRegion); + final pathStyleS3PluginConfig = AWSStorageS3Bucket( + bucketName: pathStyleBucket, + region: pathStyleRegion, + ); final pathStyleURL = Uri( host: 's3.amazonaws.com', path: '/bucket.name.has.dots.com/album/1.jpg', diff --git a/smithy-build.json b/smithy-build.json new file mode 100644 index 0000000000..7cadf9d49f --- /dev/null +++ b/smithy-build.json @@ -0,0 +1,5 @@ +{ + "mavenDependencies": [ + "software.amazon.smithy:smithy-model:1.34.0" + ] +}