From 4137aa63e9d2d8903a3f9fa5bf380736367678d4 Mon Sep 17 00:00:00 2001 From: Tyler-Larkin Date: Mon, 10 Feb 2025 16:25:00 -0800 Subject: [PATCH 1/6] fix(auth,core): Added auth userpool endpoint into AmplifyOutputs mapping --- .../amplify_outputs/auth/auth_outputs.dart | 30 +++++++++++-------- .../amplify_outputs/auth/auth_outputs.g.dart | 6 ++++ .../lib/src/config/auth/auth_config.dart | 1 + .../data/amplify_outputs.g.dart | 1 + .../data/amplifyconfiguration.g.dart | 3 +- .../machines/configuration_state_machine.dart | 1 + 6 files changed, 29 insertions(+), 13 deletions(-) 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 index 960f464a8c..a203412bd6 100644 --- 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 @@ -20,6 +20,7 @@ class AuthOutputs required this.awsRegion, this.userPoolId, this.userPoolClientId, + this.userPoolEndpoint, this.appClientSecret, this.identityPoolId, this.passwordPolicy, @@ -44,6 +45,9 @@ class AuthOutputs /// The Cognito User Pool Client ID. final String? userPoolClientId; + /// The Cognito User Pool Endpoint. + final String? userPoolEndpoint; //Gen 1 only + /// A fixed string that must be used in all API requests to the app client /// if the the app client has one configured. /// @@ -81,18 +85,20 @@ class AuthOutputs @override List get props => [ - awsRegion, - userPoolId, - userPoolClientId, - identityPoolId, - oauth, - standardRequiredAttributes, - usernameAttributes, - userVerificationTypes, - unauthenticatedIdentitiesEnabled, - mfaConfiguration, - mfaMethods, - ]; + awsRegion, + userPoolId, + userPoolClientId, + userPoolEndpoint, + appClientSecret, + identityPoolId, + oauth, + standardRequiredAttributes, + usernameAttributes, + userVerificationTypes, + unauthenticatedIdentitiesEnabled, + mfaConfiguration, + mfaMethods, + ]; @override String get runtimeTypeName => 'AuthOutputs'; 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 index 91a5452d5d..c969bed99d 100644 --- 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 @@ -19,6 +19,10 @@ AuthOutputs _$AuthOutputsFromJson(Map json) => $checkedCreate( 'user_pool_client_id', (v) => v as String?, ), + userPoolEndpoint: $checkedConvert( + 'user_pool_endpoint', + (v) => v as String?, + ), appClientSecret: $checkedConvert( 'app_client_secret', (v) => v as String?, @@ -86,6 +90,7 @@ AuthOutputs _$AuthOutputsFromJson(Map json) => $checkedCreate( 'awsRegion': 'aws_region', 'userPoolId': 'user_pool_id', 'userPoolClientId': 'user_pool_client_id', + 'userPoolEndpoint': 'user_pool_endpoint', 'appClientSecret': 'app_client_secret', 'identityPoolId': 'identity_pool_id', 'passwordPolicy': 'password_policy', @@ -103,6 +108,7 @@ Map _$AuthOutputsToJson(AuthOutputs instance) => 'aws_region': instance.awsRegion, 'user_pool_id': ?instance.userPoolId, 'user_pool_client_id': ?instance.userPoolClientId, + 'user_pool_endpoint': ?instance.userPoolEndpoint, 'app_client_secret': ?instance.appClientSecret, 'identity_pool_id': ?instance.identityPoolId, 'password_policy': ?instance.passwordPolicy?.toJson(), diff --git a/packages/amplify_core/lib/src/config/auth/auth_config.dart b/packages/amplify_core/lib/src/config/auth/auth_config.dart index 34dfe2e00f..e67600667c 100644 --- a/packages/amplify_core/lib/src/config/auth/auth_config.dart +++ b/packages/amplify_core/lib/src/config/auth/auth_config.dart @@ -137,6 +137,7 @@ class AuthConfig extends AmplifyPluginConfigMap { awsRegion: region, userPoolId: userPool?.poolId, userPoolClientId: userPool?.appClientId, + userPoolEndpoint: userPool?.endpoint, appClientSecret: userPool?.appClientSecret, identityPoolId: identityPool?.poolId, passwordPolicy: passwordPolicy, diff --git a/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplify_outputs.g.dart b/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplify_outputs.g.dart index 44a8dc24aa..0c2d3c8839 100644 --- a/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplify_outputs.g.dart +++ b/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplify_outputs.g.dart @@ -4,6 +4,7 @@ const amplifyConfig = '''{ "aws_region": "us-east-1", "user_pool_id": "fake-user-pool", "user_pool_client_id": "fake-client-id", + "user_pool_endpoint": "fake-endpoint", "identity_pool_id": "fake-identity-pool-id", "password_policy": { "min_length": 8, diff --git a/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplifyconfiguration.g.dart b/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplifyconfiguration.g.dart index bd40002a05..06bcd89d19 100644 --- a/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplifyconfiguration.g.dart +++ b/packages/amplify_core/test/config/amplify_outputs_mapping/data/amplifyconfiguration.g.dart @@ -10,7 +10,8 @@ const amplifyConfig = '''{ "Default": { "PoolId": "fake-user-pool", "AppClientId": "fake-client-id", - "Region": "us-east-1" + "Region": "us-east-1", + "Endpoint": "fake-endpoint" } }, "CredentialsProvider": { 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 36230eece8..9efe90617d 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 @@ -78,6 +78,7 @@ final class ConfigurationStateMachine region: authOutputs.awsRegion, credentialsProvider: _credentialsProvider, dependencyManager: this, + endpoint: authOutputs.userPoolEndpoint, ), ); From fabe39daf77603391fc0736f1737711c81da822f Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Thu, 11 Dec 2025 13:36:57 +0530 Subject: [PATCH 2/6] fix(auth): add endpoint to CognitoUserPoolConfig factory --- packages/amplify_core/lib/src/config/auth/cognito/user_pool.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/amplify_core/lib/src/config/auth/cognito/user_pool.dart b/packages/amplify_core/lib/src/config/auth/cognito/user_pool.dart index 944b5c5951..bd6b8e4289 100644 --- a/packages/amplify_core/lib/src/config/auth/cognito/user_pool.dart +++ b/packages/amplify_core/lib/src/config/auth/cognito/user_pool.dart @@ -36,6 +36,7 @@ class CognitoUserPoolConfig appClientId: authOutputs.userPoolClientId!, appClientSecret: authOutputs.appClientSecret, region: authOutputs.awsRegion, + endpoint: authOutputs.userPoolEndpoint, hostedUI: authOutputs.oauth == null ? null : CognitoOAuthConfig.fromAuthOutputs(authOutputs), From 0bf103997a7dce99ce8c9b0b0b23c71efbdea4d1 Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Thu, 11 Dec 2025 13:46:36 +0530 Subject: [PATCH 3/6] test(auth): add test for mapping user pool endpoint config --- .../amplify_outputs_mapping_test.dart | 63 ++++++++++++++++--- 1 file changed, 53 insertions(+), 10 deletions(-) diff --git a/packages/amplify_core/test/config/amplify_outputs_mapping/amplify_outputs_mapping_test.dart b/packages/amplify_core/test/config/amplify_outputs_mapping/amplify_outputs_mapping_test.dart index fd62cbe194..b9ae07ec50 100644 --- a/packages/amplify_core/test/config/amplify_outputs_mapping/amplify_outputs_mapping_test.dart +++ b/packages/amplify_core/test/config/amplify_outputs_mapping/amplify_outputs_mapping_test.dart @@ -92,16 +92,22 @@ void main() { expect(mappedOutputs.auth?.appClientSecret, appClientSecret); }); - test( - 'maps config with only the required options for a user pool', - () async { - final configJson = - jsonDecode(userPoolOnlyConfig) as Map; - final amplifyConfig = AmplifyConfig.fromJson(configJson); - final mappedOutputs = amplifyConfig.toAmplifyOutputs(); - expect(mappedOutputs.auth?.passwordPolicy, null); - }, - ); + test('maps config with only the required options for a user pool', + () async { + final configJson = + jsonDecode(userPoolOnlyConfig) as Map; + final amplifyConfig = AmplifyConfig.fromJson(configJson); + final mappedOutputs = amplifyConfig.toAmplifyOutputs(); + expect(mappedOutputs.auth?.passwordPolicy, null); + }); + + test('maps config with user pool endpoint', () async { + final configJson = + jsonDecode(endpointConfig) as Map; + final amplifyConfig = AmplifyConfig.fromJson(configJson); + final mappedOutputs = amplifyConfig.toAmplifyOutputs(); + expect(mappedOutputs.auth?.userPoolEndpoint, userPoolEndpoint); + }); }); }); } @@ -259,3 +265,40 @@ Map updateConfig(Map config) { defaultAuth['socialProviders'] = ['GOOGLE', 'FACEBOOK', 'AMAZON', 'APPLE']; return config; } + +const userPoolEndpoint = 'https://fake-user-pool-endpoint.com'; + +const endpointConfig = r'''{ + "UserAgent": "aws-amplify-cli/2.0", + "Version": "1.0", + "auth": { + "plugins": { + "awsCognitoAuthPlugin": { + "IdentityManager": { + "Default": {} + }, + "CredentialsProvider": { + "CognitoIdentity": { + "Default": { + "PoolId": "fake-pool-id", + "Region": "us-east-1" + } + } + }, + "CognitoUserPool": { + "Default": { + "PoolId": "fake-pool-id", + "AppClientId": "fake-client-id", + "Region": "us-east-1", + "Endpoint": "https://fake-user-pool-endpoint.com" + } + }, + "Auth": { + "Default": { + "authenticationFlowType": "USER_SRP_AUTH" + } + } + } + } + } +}'''; From 97296bb5cbf3893124e8587b8893c0b209227da7 Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Thu, 11 Dec 2025 14:51:48 +0530 Subject: [PATCH 4/6] test(auth): Debug logging for custom endpoint configuration is passed correctly --- .../lib/src/config/auth/auth_config.dart | 13 ++++++++++++- .../lib/src/sdk/sdk_bridge.dart | 18 +++++++++++++++++- .../machines/configuration_state_machine.dart | 12 ++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/packages/amplify_core/lib/src/config/auth/auth_config.dart b/packages/amplify_core/lib/src/config/auth/auth_config.dart index e67600667c..5d172cd972 100644 --- a/packages/amplify_core/lib/src/config/auth/auth_config.dart +++ b/packages/amplify_core/lib/src/config/auth/auth_config.dart @@ -133,11 +133,22 @@ class AuthConfig extends AmplifyPluginConfigMap { ) : null; + final endpoint = userPool?.endpoint; + if (endpoint != null) { + safePrint( + '📋 [Auth Config] Gen 1 config contains Endpoint: $endpoint', + ); + } else { + safePrint( + '📋 [Auth Config] No Endpoint found in Gen 1 config', + ); + } + return AuthOutputs( awsRegion: region, userPoolId: userPool?.poolId, userPoolClientId: userPool?.appClientId, - userPoolEndpoint: userPool?.endpoint, + userPoolEndpoint: endpoint, appClientSecret: userPool?.appClientSecret, identityPoolId: identityPool?.poolId, passwordPolicy: passwordPolicy, diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart index 3ad0dbe165..a06e209389 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart @@ -189,7 +189,23 @@ class WrappedCognitoIdentityProviderClient WithHeader(AWSHeaders.cacheControl, 'no-store'), ], ), - _dependencyManager = dependencyManager; + _dependencyManager = dependencyManager { + // Log the actual baseUri being used + final baseUri = endpoint == null + ? null + : (endpoint.startsWith('http') + ? Uri.parse(endpoint) + : Uri.parse('https://$endpoint')); + if (baseUri != null) { + safePrint( + '🌐 [Cognito SDK] Using custom baseUri: $baseUri', + ); + } else { + safePrint( + '🌐 [Cognito SDK] Using default AWS Cognito endpoint for region: $region', + ); + } + } final DependencyManager _dependencyManager; final CognitoIdentityProviderClient _base; 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 9efe90617d..75f447e990 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 @@ -73,6 +73,18 @@ final class ConfigurationStateMachine } addInstance(authOutputs); final waiters = >[]; + + // Log endpoint configuration + if (authOutputs.userPoolEndpoint != null) { + safePrint( + '🔧 [Amplify Auth] Configuring Cognito with custom endpoint: ${authOutputs.userPoolEndpoint}', + ); + } else { + safePrint( + '🔧 [Amplify Auth] Configuring Cognito with default AWS endpoint (no custom endpoint set)', + ); + } + addInstance( WrappedCognitoIdentityProviderClient( region: authOutputs.awsRegion, From 29bb14d2a64c77abdb49cf640680109e1b024198 Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Thu, 11 Dec 2025 15:37:32 +0530 Subject: [PATCH 5/6] feat(auth): add more detailed logging to trace endpoint flow --- .../amplify_core/lib/src/config/auth/auth_config.dart | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/amplify_core/lib/src/config/auth/auth_config.dart b/packages/amplify_core/lib/src/config/auth/auth_config.dart index 5d172cd972..3317800def 100644 --- a/packages/amplify_core/lib/src/config/auth/auth_config.dart +++ b/packages/amplify_core/lib/src/config/auth/auth_config.dart @@ -132,7 +132,6 @@ class AuthConfig extends AmplifyPluginConfigMap { responseType: OAuthResponseType.code, ) : null; - final endpoint = userPool?.endpoint; if (endpoint != null) { safePrint( @@ -144,7 +143,7 @@ class AuthConfig extends AmplifyPluginConfigMap { ); } - return AuthOutputs( + final authOutputs = AuthOutputs( awsRegion: region, userPoolId: userPool?.poolId, userPoolClientId: userPool?.appClientId, @@ -159,6 +158,12 @@ class AuthConfig extends AmplifyPluginConfigMap { mfaConfiguration: plugin?.mfaConfiguration?.toMfaEnforcement(), mfaMethods: plugin?.mfaTypes?.map((t) => t.toMfaMethod()).toList(), ); + + safePrint( + '📤 [Auth Config] Created AuthOutputs with userPoolEndpoint: ${authOutputs.userPoolEndpoint}', + ); + + return authOutputs; } @override From 83b97331f3a9244e3e95b141fb99bdaf89caf71e Mon Sep 17 00:00:00 2001 From: Nathan Gill Date: Thu, 11 Dec 2025 16:27:28 +0530 Subject: [PATCH 6/6] feat(auth): add logging for plugin configuration and sign-in --- packages/amplify_core/lib/src/amplify_class.dart | 3 +++ .../lib/src/auth_plugin_impl.dart | 4 ++++ .../amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart | 3 +++ .../src/state/machines/configuration_state_machine.dart | 7 +++++++ 4 files changed, 17 insertions(+) diff --git a/packages/amplify_core/lib/src/amplify_class.dart b/packages/amplify_core/lib/src/amplify_class.dart index 83b5d30c93..7e9c2610be 100644 --- a/packages/amplify_core/lib/src/amplify_class.dart +++ b/packages/amplify_core/lib/src/amplify_class.dart @@ -180,6 +180,9 @@ abstract class AmplifyClass { /// Configures all plugins in topologically-sorted order. Future _configurePlugins(AmplifyOutputs config) async { + safePrint( + '⚙️ [Amplify Core] Configuring plugins with AuthOutputs.userPoolEndpoint: ${config.auth?.userPoolEndpoint}', + ); await Future.wait(_addPluginFutures); _addPluginFutures.clear(); final categories = { 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 716e736799..0676175c76 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 @@ -515,6 +515,10 @@ class AmplifyAuthCognitoDart extends AuthPluginInterface String? password, SignInOptions? options, }) async { + safePrint( + '🔐 [Auth Plugin] signIn called with username: $username (password provided: ${password != null})', + ); + final pluginOptions = reifyPluginOptions( pluginOptions: options?.pluginOptions, defaultPluginOptions: const CognitoSignInPluginOptions(), diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart index a06e209389..f2d8c9251e 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/sdk/sdk_bridge.dart @@ -190,6 +190,9 @@ class WrappedCognitoIdentityProviderClient ], ), _dependencyManager = dependencyManager { + safePrint('🌐 [SDK Bridge] WrappedCognitoIdentityProviderClient constructor called'); + safePrint('🌐 [SDK Bridge] region: $region, endpoint parameter: $endpoint'); + // Log the actual baseUri being used final baseUri = endpoint == null ? null 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 75f447e990..aeb6a3dbff 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 @@ -67,10 +67,15 @@ final class ConfigurationStateMachine /// State machine callback for the [Configure] event. Future onConfigure(Configure event) async { + safePrint('🔧 [Configuration State Machine] onConfigure called'); + final authOutputs = event.config.auth; if (authOutputs == null) { throw ConfigurationError('No Cognito plugin config available'); } + + safePrint('🔧 [Configuration State Machine] AuthOutputs found - userPoolEndpoint: ${authOutputs.userPoolEndpoint}'); + addInstance(authOutputs); final waiters = >[]; @@ -85,6 +90,8 @@ final class ConfigurationStateMachine ); } + safePrint('🔧 [Configuration State Machine] Creating WrappedCognitoIdentityProviderClient with endpoint: ${authOutputs.userPoolEndpoint}'); + addInstance( WrappedCognitoIdentityProviderClient( region: authOutputs.awsRegion,