From 8fb9e66e50b48b85a97910c84ee6c1bbed89d17a Mon Sep 17 00:00:00 2001 From: NikaHsn Date: Wed, 22 May 2024 16:59:23 -0700 Subject: [PATCH] feat(core): add AmplifyOutputs types based on the CLI Gen2 client config schema (#4859) --- packages/amplify_core/lib/amplify_core.dart | 1 + .../amplify_outputs/amplify_outputs.dart | 74 ++++++++++++ .../amplify_outputs/amplify_outputs.g.dart | 53 +++++++++ .../analytics/amazon_pinpoint_outputs.dart | 36 ++++++ .../analytics/amazon_pinpoint_outputs.g.dart | 23 ++++ .../analytics/analytics_outputs.dart | 34 ++++++ .../analytics/analytics_outputs.g.dart | 30 +++++ .../amplify_outputs/auth/auth_outputs.dart | 94 +++++++++++++++ .../amplify_outputs/auth/auth_outputs.g.dart | 94 +++++++++++++++ .../auth/identity_provider.dart | 21 ++++ .../src/config/amplify_outputs/auth/mfa.dart | 33 ++++++ .../amplify_outputs/auth/oauth_outputs.dart | 64 +++++++++++ .../amplify_outputs/auth/oauth_outputs.g.dart | 50 ++++++++ .../auth/oauth_response_type.dart | 15 +++ .../amplify_outputs/auth/password_policy.dart | 57 ++++++++++ .../auth/password_policy.g.dart | 35 ++++++ .../amplify_outputs/data/data_outputs.dart | 57 ++++++++++ .../amplify_outputs/data/data_outputs.g.dart | 50 ++++++++ .../amazon_pinpoint_channel.dart | 24 ++++ .../notifications/notifications_outputs.dart | 44 +++++++ .../notifications_outputs.g.dart | 37 ++++++ .../storage/storage_outputs.dart | 36 ++++++ .../storage/storage_outputs.g.dart | 21 ++++ .../lib/src/config/auth/cognito/auth.dart | 2 +- .../lib/src/config/auth/cognito/auth.g.dart | 18 +-- .../cognito_user_attribute_key_converter.dart | 17 ++- .../lib/src/util/serializable.dart | 12 ++ .../amplify_outputs/amplify_outputs_test.dart | 20 ++++ .../config/amplify_outputs/test_data.dart | 107 ++++++++++++++++++ 29 files changed, 1148 insertions(+), 11 deletions(-) create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/identity_provider.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/mfa.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_response_type.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/notifications/amazon_pinpoint_channel.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.g.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.dart create mode 100644 packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.g.dart create mode 100644 packages/amplify_core/test/config/amplify_outputs/amplify_outputs_test.dart create mode 100644 packages/amplify_core/test/config/amplify_outputs/test_data.dart diff --git a/packages/amplify_core/lib/amplify_core.dart b/packages/amplify_core/lib/amplify_core.dart index 4add5a25ab..745f3aedf0 100644 --- a/packages/amplify_core/lib/amplify_core.dart +++ b/packages/amplify_core/lib/amplify_core.dart @@ -18,6 +18,7 @@ export 'src/category/amplify_categories.dart'; /// Config export 'src/config/amplify_config.dart'; +export 'src/config/amplify_outputs/amplify_outputs.dart'; export 'src/config/amplify_plugin_config.dart' hide UnknownPluginConfigFactory; export 'src/config/amplify_plugin_registry.dart'; export 'src/config/analytics/analytics_config.dart'; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.dart new file mode 100644 index 0000000000..ab16ab242c --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.dart @@ -0,0 +1,74 @@ +// 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:amplify_core/src/config/amplify_outputs/analytics/analytics_outputs.dart'; +import 'package:amplify_core/src/config/amplify_outputs/auth/auth_outputs.dart'; +import 'package:amplify_core/src/config/amplify_outputs/data/data_outputs.dart'; +import 'package:amplify_core/src/config/amplify_outputs/notifications/notifications_outputs.dart'; +import 'package:amplify_core/src/config/amplify_outputs/storage/storage_outputs.dart'; +import 'package:meta/meta.dart'; + +part 'amplify_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs} +/// The amplify outputs generated by Amplify Gen 2 for +/// Amplify libraries to communicate with backend services. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class AmplifyOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs} + @internal + const AmplifyOutputs({ + this.schema, + required this.version, + this.analytics, + this.auth, + this.data, + this.notifications, + this.storage, + this.custom, + }); + + factory AmplifyOutputs.fromJson(Map json) => + _$AmplifyOutputsFromJson(json); + + /// The json schema for amplify output json object. + final String? schema; + + /// The schema version. + final String version; + + /// {@macro amplify_core.amplify_outputs.analytics_outputs} + final AnalyticsOutputs? analytics; + + /// {@macro amplify_core.amplify_outputs.auth_outputs} + final AuthOutputs? auth; + + /// {@macro amplify_core.amplify_outputs.data_outputs} + final DataOutputs? data; + + /// {@macro amplify_core.amplify_outputs.notifications_outputs} + final NotificationsOutputs? notifications; + + /// {@macro amplify_core.amplify_outputs.storage_outputs} + final StorageOutputs? storage; + + /// The custom outputs generated by Amplify Gen 2. + /// + /// Amplify Categories do not use custom outputs. + final Map? custom; + + @override + List get props => + [schema, version, analytics, auth, data, notifications, storage, custom]; + + @override + String get runtimeTypeName => 'AmplifyOutputs'; + + @override + Map toJson() { + return _$AmplifyOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.g.dart new file mode 100644 index 0000000000..301fd77e27 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/amplify_outputs.g.dart @@ -0,0 +1,53 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'amplify_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AmplifyOutputs _$AmplifyOutputsFromJson(Map json) => + AmplifyOutputs( + schema: json['schema'] as String?, + version: json['version'] as String, + analytics: json['analytics'] == null + ? null + : AnalyticsOutputs.fromJson( + json['analytics'] as Map), + auth: json['auth'] == null + ? null + : AuthOutputs.fromJson(json['auth'] as Map), + data: json['data'] == null + ? null + : DataOutputs.fromJson(json['data'] as Map), + notifications: json['notifications'] == null + ? null + : NotificationsOutputs.fromJson( + json['notifications'] as Map), + storage: json['storage'] == null + ? null + : StorageOutputs.fromJson(json['storage'] as Map), + custom: json['custom'] as Map?, + ); + +Map _$AmplifyOutputsToJson(AmplifyOutputs instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('schema', instance.schema); + val['version'] = instance.version; + writeNotNull('analytics', instance.analytics?.toJson()); + writeNotNull('auth', instance.auth?.toJson()); + writeNotNull('data', instance.data?.toJson()); + writeNotNull('notifications', instance.notifications?.toJson()); + writeNotNull('storage', instance.storage?.toJson()); + writeNotNull('custom', instance.custom); + return val; +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.dart new file mode 100644 index 0000000000..41d00f5f8e --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.dart @@ -0,0 +1,36 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:amplify_core/amplify_core.dart'; + +part 'amazon_pinpoint_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.amazon_pinpoint} +/// The Amplify Gen 2 output for Amazon Pinpoint. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class AmazonPinpointOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.amazon_pinpoint} + const AmazonPinpointOutputs({required this.awsRegion, required this.appId}); + + factory AmazonPinpointOutputs.fromJson(Map json) => + _$AmazonPinpointOutputsFromJson(json); + + /// The AWS region of Amazon Pinpoint resources. + final String awsRegion; + + /// The Amazon Pinpoint App ID. + final String appId; + + @override + List get props => [awsRegion, appId]; + + @override + String get runtimeTypeName => 'AmazonPinpointOutputs'; + + @override + Object? toJson() { + return _$AmazonPinpointOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.g.dart new file mode 100644 index 0000000000..bf957138f7 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.g.dart @@ -0,0 +1,23 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'amazon_pinpoint_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AmazonPinpointOutputs _$AmazonPinpointOutputsFromJson( + Map json) => + AmazonPinpointOutputs( + awsRegion: json['aws_region'] as String, + appId: json['app_id'] as String, + ); + +Map _$AmazonPinpointOutputsToJson( + AmazonPinpointOutputs instance) => + { + 'aws_region': instance.awsRegion, + 'app_id': instance.appId, + }; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.dart new file mode 100644 index 0000000000..2a6d1b5796 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.dart @@ -0,0 +1,34 @@ +// 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:amplify_core/src/config/amplify_outputs/analytics/amazon_pinpoint_outputs.dart'; + +part 'analytics_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.analytics_outputs} +/// The Amplify Gen 2 output for Analytics category. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class AnalyticsOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.analytics_outputs} + const AnalyticsOutputs({this.amazonPinpoint}); + + factory AnalyticsOutputs.fromJson(Map json) => + _$AnalyticsOutputsFromJson(json); + + /// {@macro amplify_core.amplify_outputs.amazon_pinpoint} + final AmazonPinpointOutputs? amazonPinpoint; + + @override + List get props => [amazonPinpoint]; + + @override + String get runtimeTypeName => 'AnalyticsOutputs'; + + @override + Map toJson() { + return _$AnalyticsOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.g.dart new file mode 100644 index 0000000000..f567e72873 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/analytics/analytics_outputs.g.dart @@ -0,0 +1,30 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'analytics_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AnalyticsOutputs _$AnalyticsOutputsFromJson(Map json) => + AnalyticsOutputs( + amazonPinpoint: json['amazon_pinpoint'] == null + ? null + : AmazonPinpointOutputs.fromJson( + json['amazon_pinpoint'] as Map), + ); + +Map _$AnalyticsOutputsToJson(AnalyticsOutputs instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('amazon_pinpoint', instance.amazonPinpoint?.toJson()); + return val; +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.dart new file mode 100644 index 0000000000..e16cc91830 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.dart @@ -0,0 +1,94 @@ +// 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:amplify_core/src/config/amplify_outputs/auth/mfa.dart'; +import 'package:amplify_core/src/config/amplify_outputs/auth/oauth_outputs.dart'; +import 'package:amplify_core/src/config/amplify_outputs/auth/password_policy.dart'; + +part 'auth_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.auth_outputs} +/// The Amplify Gen 2 outputs for Auth category. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class AuthOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.auth_outputs} + const AuthOutputs({ + required this.awsRegion, + this.userPoolId, + this.userPoolClientId, + this.identityPoolId, + this.passwordPolicy, + this.oauth, + this.standardRequiredAttributes, + this.usernameAttributes, + this.userVerificationTypes, + this.unauthenticatedIdentitiesEnabled = true, + this.mfaConfiguration, + this.mfaMethods, + }); + + factory AuthOutputs.fromJson(Map json) => + _$AuthOutputsFromJson(json); + + /// The AWS region of Amazon Cognito resources. + final String awsRegion; + + /// The Cognito User Pool ID. + final String? userPoolId; + + /// The Cognito User Pool Client ID. + final String? userPoolClientId; + + /// The Cognito Identity Pool ID. + final String? identityPoolId; + + /// {@macro amplifyCore.amplify_outputs.password_policy} + final PasswordPolicy? passwordPolicy; + + /// {@macro amplify_core.amplify_outputs.oauth_outputs} + final OAuthOutputs? oauth; + + /// The Cognito User Pool standard attributes required for sign up. + final List? standardRequiredAttributes; + + /// The Cognito User Pool username attributes. + final List? usernameAttributes; + + /// The Cognito User Pool verification type. + final List? userVerificationTypes; + + /// Enables unauthenticated identities. + final bool unauthenticatedIdentitiesEnabled; + + /// {@macro amplify_core.amplify_outputs.maf_enforcement} + final MfaEnforcement? mfaConfiguration; + + /// {@macro amplify_core.amplify_outputs.maf_method} + final List? mfaMethods; + + @override + List get props => [ + awsRegion, + userPoolId, + userPoolClientId, + identityPoolId, + oauth, + standardRequiredAttributes, + usernameAttributes, + userVerificationTypes, + unauthenticatedIdentitiesEnabled, + mfaConfiguration, + mfaMethods, + ]; + + @override + String get runtimeTypeName => 'AuthOutputs'; + + @override + Object? toJson() { + return _$AuthOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.g.dart new file mode 100644 index 0000000000..2524f97862 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/auth_outputs.g.dart @@ -0,0 +1,94 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'auth_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +AuthOutputs _$AuthOutputsFromJson(Map json) => AuthOutputs( + awsRegion: json['aws_region'] as String, + userPoolId: json['user_pool_id'] as String?, + userPoolClientId: json['user_pool_client_id'] as String?, + identityPoolId: json['identity_pool_id'] as String?, + passwordPolicy: json['password_policy'] == null + ? null + : PasswordPolicy.fromJson( + json['password_policy'] as Map), + oauth: json['oauth'] == null + ? null + : OAuthOutputs.fromJson(json['oauth'] as Map), + standardRequiredAttributes: (json['standard_required_attributes'] + as List?) + ?.map((e) => + const CognitoUserAttributeKeyConverter().fromJson(e as String)) + .toList(), + usernameAttributes: (json['username_attributes'] as List?) + ?.map((e) => + const CognitoUserAttributeKeyConverter().fromJson(e as String)) + .toList(), + userVerificationTypes: (json['user_verification_types'] as List?) + ?.map((e) => + const CognitoUserAttributeKeyConverter().fromJson(e as String)) + .toList(), + unauthenticatedIdentitiesEnabled: + json['unauthenticated_identities_enabled'] as bool? ?? true, + mfaConfiguration: $enumDecodeNullable( + _$MfaEnforcementEnumMap, json['mfa_configuration']), + mfaMethods: (json['mfa_methods'] as List?) + ?.map((e) => $enumDecode(_$MfaMethodEnumMap, e)) + .toList(), + ); + +Map _$AuthOutputsToJson(AuthOutputs instance) { + final val = { + 'aws_region': instance.awsRegion, + }; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('user_pool_id', instance.userPoolId); + writeNotNull('user_pool_client_id', instance.userPoolClientId); + writeNotNull('identity_pool_id', instance.identityPoolId); + writeNotNull('password_policy', instance.passwordPolicy?.toJson()); + writeNotNull('oauth', instance.oauth?.toJson()); + writeNotNull( + 'standard_required_attributes', + instance.standardRequiredAttributes + ?.map(const CognitoUserAttributeKeyConverter().toJson) + .toList()); + writeNotNull( + 'username_attributes', + instance.usernameAttributes + ?.map(const CognitoUserAttributeKeyConverter().toJson) + .toList()); + writeNotNull( + 'user_verification_types', + instance.userVerificationTypes + ?.map(const CognitoUserAttributeKeyConverter().toJson) + .toList()); + val['unauthenticated_identities_enabled'] = + instance.unauthenticatedIdentitiesEnabled; + writeNotNull( + 'mfa_configuration', _$MfaEnforcementEnumMap[instance.mfaConfiguration]); + writeNotNull('mfa_methods', + instance.mfaMethods?.map((e) => _$MfaMethodEnumMap[e]!).toList()); + return val; +} + +const _$MfaEnforcementEnumMap = { + MfaEnforcement.optional: 'OPTIONAL', + MfaEnforcement.on: 'REQUIRED', + MfaEnforcement.off: 'NONE', +}; + +const _$MfaMethodEnumMap = { + MfaMethod.sms: 'SMS', + MfaMethod.totp: 'TOTP', +}; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/identity_provider.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/identity_provider.dart new file mode 100644 index 0000000000..95eb7f8b97 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/identity_provider.dart @@ -0,0 +1,21 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:json_annotation/json_annotation.dart'; + +/// {@template amplify_core.amplify_outputs.identity_providers} +/// Identity providers set on Cognito User Pool. +/// {@endtemplate} +enum IdentityProvider { + @JsonValue('FACEBOOK') + facebook, + + @JsonValue('GOOGLE') + google, + + @JsonValue('LOGIN_WITH_AMAZON') + amazon, + + @JsonValue('SIGN_IN_WITH_APPLE') + apple, +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/mfa.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/mfa.dart new file mode 100644 index 0000000000..e82d3327d7 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/mfa.dart @@ -0,0 +1,33 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:json_annotation/json_annotation.dart'; + +/// {@template amplify_core.amplify_outputs.maf_method} +/// The MFA method of Amazon Cognito User Pool. +/// {@endtemplate} +enum MfaMethod { + @JsonValue('SMS') + sms, + + @JsonValue('TOTP') + totp; + + /// The value to pass to `Amplify.Auth.confirmSignIn` when + /// selecting an MFA type. + String get confirmationValue => name; +} + +/// {@template amplify_core.amplify_outputs.maf_enforcement} +/// The MFA enforcement for Amazon Cognito User Pool. +/// {@endtemplate} +enum MfaEnforcement { + @JsonValue('OPTIONAL') + optional, + + @JsonValue('REQUIRED') + on, + + @JsonValue('NONE') + off, +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.dart new file mode 100644 index 0000000000..5b01b47767 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.dart @@ -0,0 +1,64 @@ +// 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:amplify_core/src/config/amplify_outputs/auth/identity_provider.dart'; +import 'package:amplify_core/src/config/amplify_outputs/auth/oauth_response_type.dart'; + +part 'oauth_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.oauth_outputs} +/// The Amplify Gen 2 outputs for oauth. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class OAuthOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.oauth_outputs} + const OAuthOutputs({ + required this.identityProviders, + required this.domain, + required this.scopes, + required this.redirectSignInUri, + required this.redirectSignOutUri, + required this.responseType, + }); + + factory OAuthOutputs.fromJson(Map json) => + _$OAuthOutputsFromJson(json); + + /// {@macro amplify_core.amplify_outputs.identity_providers} + final List identityProviders; + + /// The domain used for identity providers. + final String domain; + + /// The authorized scopes used for the identity providers. + final List scopes; + + /// URIs used to redirect after signing in using an identity provider. + final List redirectSignInUri; + + /// URIs used to redirect after signing out. + final List redirectSignOutUri; + + /// {@macro amplify_core.amplify_outputs.oauth_response_type} + final OAuthResponseType responseType; + + @override + List get props => [ + identityProviders, + domain, + scopes, + redirectSignInUri, + redirectSignOutUri, + responseType, + ]; + + @override + String get runtimeTypeName => 'OAuthOutputs'; + + @override + Object? toJson() { + return _$OAuthOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.g.dart new file mode 100644 index 0000000000..16424b0abc --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_outputs.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'oauth_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +OAuthOutputs _$OAuthOutputsFromJson(Map json) => OAuthOutputs( + identityProviders: (json['identity_providers'] as List) + .map((e) => $enumDecode(_$IdentityProviderEnumMap, e)) + .toList(), + domain: json['domain'] as String, + scopes: + (json['scopes'] as List).map((e) => e as String).toList(), + redirectSignInUri: (json['redirect_sign_in_uri'] as List) + .map((e) => e as String) + .toList(), + redirectSignOutUri: (json['redirect_sign_out_uri'] as List) + .map((e) => e as String) + .toList(), + responseType: + $enumDecode(_$OAuthResponseTypeEnumMap, json['response_type']), + ); + +Map _$OAuthOutputsToJson(OAuthOutputs instance) => + { + 'identity_providers': instance.identityProviders + .map((e) => _$IdentityProviderEnumMap[e]!) + .toList(), + 'domain': instance.domain, + 'scopes': instance.scopes, + 'redirect_sign_in_uri': instance.redirectSignInUri, + 'redirect_sign_out_uri': instance.redirectSignOutUri, + 'response_type': _$OAuthResponseTypeEnumMap[instance.responseType]!, + }; + +const _$IdentityProviderEnumMap = { + IdentityProvider.facebook: 'FACEBOOK', + IdentityProvider.google: 'GOOGLE', + IdentityProvider.amazon: 'LOGIN_WITH_AMAZON', + IdentityProvider.apple: 'SIGN_IN_WITH_APPLE', +}; + +const _$OAuthResponseTypeEnumMap = { + OAuthResponseType.code: 'code', + OAuthResponseType.token: 'token', +}; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_response_type.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_response_type.dart new file mode 100644 index 0000000000..a7ef44ff31 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/oauth_response_type.dart @@ -0,0 +1,15 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:json_annotation/json_annotation.dart'; + +/// {@template amplify_core.amplify_outputs.oauth_response_type} +/// The response type for identity providers set on Amazon Cognito. +/// {@endtemplate} +enum OAuthResponseType { + @JsonValue('code') + code, + + @JsonValue('token') + token, +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.dart new file mode 100644 index 0000000000..600e63ace1 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.dart @@ -0,0 +1,57 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:amplify_core/amplify_core.dart'; + +part 'password_policy.g.dart'; + +/// {@template amplify_core.amplify_outputs.password_policy} +/// The Cognito User Pool password policy. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class PasswordPolicy + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.password_policy} + const PasswordPolicy({ + this.minLength, + this.requireNumbers = false, + this.requireLowercase = false, + this.requireUppercase = false, + this.requireSymbols = false, + }); + + factory PasswordPolicy.fromJson(Map json) => + _$PasswordPolicyFromJson(json); + + /// The min length. + final int? minLength; + + /// Requires numbers. + final bool requireNumbers; + + /// Requires lower case. + final bool requireLowercase; + + /// Requires upper case. + final bool requireUppercase; + + /// Requires symbols. + final bool requireSymbols; + + @override + List get props => [ + minLength, + requireNumbers, + requireLowercase, + requireUppercase, + requireSymbols, + ]; + + @override + String get runtimeTypeName => 'PasswordPolicy'; + + @override + Object? toJson() { + return _$PasswordPolicyToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.g.dart new file mode 100644 index 0000000000..951e3483af --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/auth/password_policy.g.dart @@ -0,0 +1,35 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'password_policy.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +PasswordPolicy _$PasswordPolicyFromJson(Map json) => + PasswordPolicy( + minLength: json['min_length'] as int?, + requireNumbers: json['require_numbers'] as bool? ?? false, + requireLowercase: json['require_lowercase'] as bool? ?? false, + requireUppercase: json['require_uppercase'] as bool? ?? false, + requireSymbols: json['require_symbols'] as bool? ?? false, + ); + +Map _$PasswordPolicyToJson(PasswordPolicy instance) { + final val = {}; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('min_length', instance.minLength); + val['require_numbers'] = instance.requireNumbers; + val['require_lowercase'] = instance.requireLowercase; + val['require_uppercase'] = instance.requireUppercase; + val['require_symbols'] = instance.requireSymbols; + return val; +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.dart new file mode 100644 index 0000000000..1ae78248c5 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.dart @@ -0,0 +1,57 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:amplify_core/amplify_core.dart'; + +part 'data_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.data_outputs} +/// The Amplify Gen 2 outputs for API GraphQL category. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class DataOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.data_outputs} + const DataOutputs({ + required this.awsRegion, + required this.url, + this.apiKey, + required this.defaultAuthorizationType, + required this.authorizationTypes, + }); + + factory DataOutputs.fromJson(Map json) => + _$DataOutputsFromJson(json); + + /// The AWS region of Amazon AppSync resources. + final String awsRegion; + + /// The AppSync endpoint URL. + final String url; + + /// The AppSync API Key. + final String? apiKey; + + /// The default authorization type for AWS AppSync. + final APIAuthorizationType defaultAuthorizationType; + + /// List of supported authorization types for AWS AppSync. + final List authorizationTypes; + + @override + List get props => [ + awsRegion, + url, + apiKey, + defaultAuthorizationType, + authorizationTypes, + ]; + + @override + String get runtimeTypeName => 'DataOutputs'; + + @override + Object? toJson() { + return _$DataOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.g.dart new file mode 100644 index 0000000000..fa4155dffa --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/data/data_outputs.g.dart @@ -0,0 +1,50 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'data_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +DataOutputs _$DataOutputsFromJson(Map json) => DataOutputs( + awsRegion: json['aws_region'] as String, + url: json['url'] as String, + apiKey: json['api_key'] as String?, + defaultAuthorizationType: $enumDecode( + _$APIAuthorizationTypeEnumMap, json['default_authorization_type']), + authorizationTypes: (json['authorization_types'] as List) + .map((e) => $enumDecode(_$APIAuthorizationTypeEnumMap, e)) + .toList(), + ); + +Map _$DataOutputsToJson(DataOutputs instance) { + final val = { + 'aws_region': instance.awsRegion, + 'url': instance.url, + }; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('api_key', instance.apiKey); + val['default_authorization_type'] = + _$APIAuthorizationTypeEnumMap[instance.defaultAuthorizationType]!; + val['authorization_types'] = instance.authorizationTypes + .map((e) => _$APIAuthorizationTypeEnumMap[e]!) + .toList(); + return val; +} + +const _$APIAuthorizationTypeEnumMap = { + APIAuthorizationType.none: 'NONE', + APIAuthorizationType.apiKey: 'API_KEY', + APIAuthorizationType.iam: 'AWS_IAM', + APIAuthorizationType.oidc: 'OPENID_CONNECT', + APIAuthorizationType.userPools: 'AMAZON_COGNITO_USER_POOLS', + APIAuthorizationType.function: 'AWS_LAMBDA', +}; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/notifications/amazon_pinpoint_channel.dart b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/amazon_pinpoint_channel.dart new file mode 100644 index 0000000000..1aff83b6ba --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/amazon_pinpoint_channel.dart @@ -0,0 +1,24 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:json_annotation/json_annotation.dart'; + +/// {@template amplify_core.amplify_outputs.amazon_pinpoint_channel} +/// Supported channels for Amazon Pinpoint. +/// {@endtemplate} +enum AmazonPinpointChannel { + @JsonValue('APNS') + apns, + + @JsonValue('EMAIL') + email, + + @JsonValue('FCM') + fcm, + + @JsonValue('IN_APP_MESSAGING') + inAppMessaging, + + @JsonValue('SMS') + sms, +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.dart new file mode 100644 index 0000000000..dc9b9d37cb --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.dart @@ -0,0 +1,44 @@ +// 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:amplify_core/src/config/amplify_outputs/notifications/amazon_pinpoint_channel.dart'; + +part 'notifications_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.notifications_outputs} +/// The Amplify Gen 2 outputs for Notifications category. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class NotificationsOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.notifications_outputs} + const NotificationsOutputs({ + required this.awsRegion, + required this.amazonPinpointAppId, + required this.channels, + }); + + factory NotificationsOutputs.fromJson(Map json) => + _$NotificationsOutputsFromJson(json); + + /// The AWS region of Amazon Pinpoint resources. + final String awsRegion; + + /// Amazon Pinpoint App ID. + final String amazonPinpointAppId; + + /// {@macro amplify_core.amplify_outputs.amazon_pinpoint_channel} + final List channels; + + @override + List get props => [awsRegion, amazonPinpointAppId, channels]; + + @override + String get runtimeTypeName => 'NotificationsOutputs'; + + @override + Object? toJson() { + return _$NotificationsOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.g.dart new file mode 100644 index 0000000000..b6e4b63c87 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/notifications/notifications_outputs.g.dart @@ -0,0 +1,37 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'notifications_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +NotificationsOutputs _$NotificationsOutputsFromJson( + Map json) => + NotificationsOutputs( + awsRegion: json['aws_region'] as String, + amazonPinpointAppId: json['amazon_pinpoint_app_id'] as String, + channels: (json['channels'] as List) + .map((e) => $enumDecode(_$AmazonPinpointChannelEnumMap, e)) + .toList(), + ); + +Map _$NotificationsOutputsToJson( + NotificationsOutputs instance) => + { + 'aws_region': instance.awsRegion, + 'amazon_pinpoint_app_id': instance.amazonPinpointAppId, + 'channels': instance.channels + .map((e) => _$AmazonPinpointChannelEnumMap[e]!) + .toList(), + }; + +const _$AmazonPinpointChannelEnumMap = { + AmazonPinpointChannel.apns: 'APNS', + AmazonPinpointChannel.email: 'EMAIL', + AmazonPinpointChannel.fcm: 'FCM', + AmazonPinpointChannel.inAppMessaging: 'IN_APP_MESSAGING', + AmazonPinpointChannel.sms: 'SMS', +}; diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.dart b/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.dart new file mode 100644 index 0000000000..9db9356aa6 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.dart @@ -0,0 +1,36 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'package:amplify_core/amplify_core.dart'; + +part 'storage_outputs.g.dart'; + +/// {@template amplify_core.amplify_outputs.storage_outputs} +/// The Amplify Gen 2 outputs for Storage category. +/// {@endtemplate} +@zAmplifyOutputsSerializable +class StorageOutputs + with AWSEquatable, AWSSerializable, AWSDebuggable { + /// {@macro amplify_core.amplify_outputs.storage_outputs} + const StorageOutputs({required this.awsRegion, required this.bucketName}); + + factory StorageOutputs.fromJson(Map json) => + _$StorageOutputsFromJson(json); + + /// The AWS region of Amazon S3 resources. + final String awsRegion; + + /// The Amazon S3 bucket name. + final String bucketName; + + @override + List get props => [awsRegion, bucketName]; + + @override + String get runtimeTypeName => 'StorageOutputs'; + + @override + Object? toJson() { + return _$StorageOutputsToJson(this); + } +} diff --git a/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.g.dart b/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.g.dart new file mode 100644 index 0000000000..c672e2c4d6 --- /dev/null +++ b/packages/amplify_core/lib/src/config/amplify_outputs/storage/storage_outputs.g.dart @@ -0,0 +1,21 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +// ignore_for_file: deprecated_member_use_from_same_package + +part of 'storage_outputs.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +StorageOutputs _$StorageOutputsFromJson(Map json) => + StorageOutputs( + awsRegion: json['aws_region'] as String, + bucketName: json['bucket_name'] as String, + ); + +Map _$StorageOutputsToJson(StorageOutputs instance) => + { + 'aws_region': instance.awsRegion, + 'bucket_name': instance.bucketName, + }; diff --git a/packages/amplify_core/lib/src/config/auth/cognito/auth.dart b/packages/amplify_core/lib/src/config/auth/cognito/auth.dart index 4883afd459..5f0e702a5b 100644 --- a/packages/amplify_core/lib/src/config/auth/cognito/auth.dart +++ b/packages/amplify_core/lib/src/config/auth/cognito/auth.dart @@ -9,7 +9,7 @@ import 'package:json_annotation/json_annotation.dart'; part 'auth.g.dart'; @zAmplifySerializable -@CognitoUserAttributeKeyConverter() +@CognitoUserAttributeKeyToUpperCaseConverter() class CognitoAuthConfig with AWSEquatable, AWSSerializable { const CognitoAuthConfig({ this.oAuth, diff --git a/packages/amplify_core/lib/src/config/auth/cognito/auth.g.dart b/packages/amplify_core/lib/src/config/auth/cognito/auth.g.dart index 36e2c120cc..4c8c8b2e7d 100644 --- a/packages/amplify_core/lib/src/config/auth/cognito/auth.g.dart +++ b/packages/amplify_core/lib/src/config/auth/cognito/auth.g.dart @@ -17,12 +17,12 @@ CognitoAuthConfig _$CognitoAuthConfigFromJson(Map json) => ?.map((e) => $enumDecode(_$SocialProviderEnumMap, e)) .toList(), usernameAttributes: (json['usernameAttributes'] as List?) - ?.map((e) => - const CognitoUserAttributeKeyConverter().fromJson(e as String)) + ?.map((e) => const CognitoUserAttributeKeyToUpperCaseConverter() + .fromJson(e as String)) .toList(), signupAttributes: (json['signupAttributes'] as List?) - ?.map((e) => - const CognitoUserAttributeKeyConverter().fromJson(e as String)) + ?.map((e) => const CognitoUserAttributeKeyToUpperCaseConverter() + .fromJson(e as String)) .toList(), passwordProtectionSettings: json['passwordProtectionSettings'] == null ? null @@ -34,8 +34,8 @@ CognitoAuthConfig _$CognitoAuthConfigFromJson(Map json) => ?.map((e) => $enumDecode(_$MfaTypeEnumMap, e)) .toList(), verificationMechanisms: (json['verificationMechanisms'] as List?) - ?.map((e) => - const CognitoUserAttributeKeyConverter().fromJson(e as String)) + ?.map((e) => const CognitoUserAttributeKeyToUpperCaseConverter() + .fromJson(e as String)) .toList(), ); @@ -57,12 +57,12 @@ Map _$CognitoAuthConfigToJson(CognitoAuthConfig instance) { writeNotNull( 'usernameAttributes', instance.usernameAttributes - ?.map(const CognitoUserAttributeKeyConverter().toJson) + ?.map(const CognitoUserAttributeKeyToUpperCaseConverter().toJson) .toList()); writeNotNull( 'signupAttributes', instance.signupAttributes - ?.map(const CognitoUserAttributeKeyConverter().toJson) + ?.map(const CognitoUserAttributeKeyToUpperCaseConverter().toJson) .toList()); writeNotNull('passwordProtectionSettings', instance.passwordProtectionSettings?.toJson()); @@ -73,7 +73,7 @@ Map _$CognitoAuthConfigToJson(CognitoAuthConfig instance) { writeNotNull( 'verificationMechanisms', instance.verificationMechanisms - ?.map(const CognitoUserAttributeKeyConverter().toJson) + ?.map(const CognitoUserAttributeKeyToUpperCaseConverter().toJson) .toList()); return val; } diff --git a/packages/amplify_core/lib/src/config/auth/cognito/cognito_user_attribute_key_converter.dart b/packages/amplify_core/lib/src/config/auth/cognito/cognito_user_attribute_key_converter.dart index ab59d84cf0..daf058c620 100644 --- a/packages/amplify_core/lib/src/config/auth/cognito/cognito_user_attribute_key_converter.dart +++ b/packages/amplify_core/lib/src/config/auth/cognito/cognito_user_attribute_key_converter.dart @@ -4,6 +4,21 @@ import 'package:amplify_core/amplify_core.dart'; import 'package:json_annotation/json_annotation.dart'; +class CognitoUserAttributeKeyToUpperCaseConverter + extends JsonConverter { + const CognitoUserAttributeKeyToUpperCaseConverter(); + + @override + CognitoUserAttributeKey fromJson(String json) { + return CognitoUserAttributeKey.parse(json); + } + + @override + String toJson(CognitoUserAttributeKey object) { + return object.key.toUpperCase(); + } +} + class CognitoUserAttributeKeyConverter extends JsonConverter { const CognitoUserAttributeKeyConverter(); @@ -15,7 +30,7 @@ class CognitoUserAttributeKeyConverter @override String toJson(CognitoUserAttributeKey object) { - return object.key.toUpperCase(); + return object.key; } } diff --git a/packages/amplify_core/lib/src/util/serializable.dart b/packages/amplify_core/lib/src/util/serializable.dart index e5f490c1cc..f34c9a53a3 100644 --- a/packages/amplify_core/lib/src/util/serializable.dart +++ b/packages/amplify_core/lib/src/util/serializable.dart @@ -29,6 +29,18 @@ const zAmplifySerializable = JsonSerializable( ], ); +/// serialization options for AmplifyOutputs type. +@internal +const zAmplifyOutputsSerializable = JsonSerializable( + includeIfNull: false, + explicitToJson: true, + fieldRename: FieldRename.snake, + converters: [ + CognitoUserAttributeKeyConverter(), + CognitoUserAttributeMapConverter(), + ], +); + /// Global serialization options for AWS types. const zAwsSerializable = JsonSerializable( fieldRename: FieldRename.pascal, diff --git a/packages/amplify_core/test/config/amplify_outputs/amplify_outputs_test.dart b/packages/amplify_core/test/config/amplify_outputs/amplify_outputs_test.dart new file mode 100644 index 0000000000..effa545c39 --- /dev/null +++ b/packages/amplify_core/test/config/amplify_outputs/amplify_outputs_test.dart @@ -0,0 +1,20 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import 'dart:convert'; + +import 'package:amplify_core/src/config/amplify_outputs/amplify_outputs.dart'; +import 'package:test/test.dart'; + +import 'test_data.dart'; + +void main() { + test( + 'Should successfully create an AmplifyOutputs object' + ' from an amplify outputs json object.', () { + final actualConfig = jsonDecode(amplifyoutputs) as Map; + final parsed = AmplifyOutputs.fromJson(actualConfig); + final expectedConfig = parsed.toJson(); + expect(actualConfig, equals(expectedConfig)); + }); +} diff --git a/packages/amplify_core/test/config/amplify_outputs/test_data.dart b/packages/amplify_core/test/config/amplify_outputs/test_data.dart new file mode 100644 index 0000000000..317e7a78b4 --- /dev/null +++ b/packages/amplify_core/test/config/amplify_outputs/test_data.dart @@ -0,0 +1,107 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +// GENERATED FILE. DO NOT MODIFY BY HAND. + +// It uses json-schema-faker to generate a sample json from the Amplify GEN 2 client-config-schema. +// Run below commands to regenerate a sample json. +// curl https://raw.githubusercontent.com/aws-amplify/amplify-backend/main/packages/client-config/src/client-config-schema/schema_v1.json -o schema_v1.json +// npx json-schema-faker -s schema_v1.json -o sample.json --alwaysFakeOptionals + +const amplifyoutputs = '''{ + "schema": "dolor nisi incididunt adipisicing", + "analytics": { + "amazon_pinpoint": { + "app_id": "dolor cupidatat", + "aws_region": "anim" + } + }, + "auth": { + "aws_region": "elit laboris Excepteur et sed", + "identity_pool_id": "Ut exercitation ex aute dolore", + "mfa_configuration": "OPTIONAL", + "mfa_methods": [ + "TOTP", + "SMS" + ], + "oauth": { + "domain": "nostrud pariatur labore quis", + "identity_providers": [ + "LOGIN_WITH_AMAZON", + "FACEBOOK", + "SIGN_IN_WITH_APPLE", + "GOOGLE" + ], + "redirect_sign_in_uri": [ + "laboris", + "commodo dolore dolor fugiat et" + ], + "redirect_sign_out_uri": [ + "nisi do elit", + "mollit anim", + "eu cillum id", + "Excepteur veniam", + "amet est ipsum minim" + ], + "response_type": "code", + "scopes": [ + "ut", + "aliqua labore incididunt", + "dolore aliquip id do magna", + "ad nisi voluptate cupidatat" + ] + }, + "password_policy": { + "min_length": 97, + "require_lowercase": true, + "require_numbers": true, + "require_symbols": false, + "require_uppercase": true + }, + "standard_required_attributes": [ + "locale" + ], + "unauthenticated_identities_enabled": false, + "user_pool_client_id": "aute Lorem", + "user_pool_id": "aliquip eiusmod", + "user_verification_types": [ + "email", + "phone_number", + "phone_number", + "email" + ], + "username_attributes": [ + "phone_number", + "username" + ] + }, + "custom": {}, + "data": { + "api_key": "ullamco sunt sed", + "authorization_types": [ + "API_KEY", + "OPENID_CONNECT", + "AWS_IAM" + ], + "aws_region": "jhdakj", + "default_authorization_type": "OPENID_CONNECT", + "url": "mollit aliquip" + }, + "notifications": { + "amazon_pinpoint_app_id": "ut magna ut", + "aws_region": "skdo sosjh", + "channels": [ + "FCM", + "APNS", + "EMAIL", + "SMS", + "IN_APP_MESSAGING" + ] + }, + "storage": { + "aws_region": "oem dks", + "bucket_name": "dolor et esse" + }, + "version": "1" +} +''';