From 155d114c80c82ec91513e6b022c93133d22bb528 Mon Sep 17 00:00:00 2001 From: Vatsal Goel <144617902+VatsalGoel3@users.noreply.github.com> Date: Wed, 28 May 2025 00:36:58 -0600 Subject: [PATCH 1/7] feat(parser): Added Cognito trigger schemas --- .../utilities/parser/models/__init__.py | 72 +++++ .../utilities/parser/models/cognito.py | 276 ++++++++++++++++++ .../parser/_pydantic/test_cognito_triggers.py | 46 +++ 3 files changed, 394 insertions(+) create mode 100644 aws_lambda_powertools/utilities/parser/models/cognito.py create mode 100644 tests/unit/parser/_pydantic/test_cognito_triggers.py diff --git a/aws_lambda_powertools/utilities/parser/models/__init__.py b/aws_lambda_powertools/utilities/parser/models/__init__.py index 7ea8da2dc22..4257a802a1e 100644 --- a/aws_lambda_powertools/utilities/parser/models/__init__.py +++ b/aws_lambda_powertools/utilities/parser/models/__init__.py @@ -49,6 +49,43 @@ CloudWatchLogsLogEvent, CloudWatchLogsModel, ) +from .cognito import ( + CognitoCallerContextModel, + CognitoChallengeResultModel, + CognitoPreSignupRequestModel, + CognitoPreSignupResponseModel, + CognitoPreSignupTriggerModel, + CognitoPostConfirmationRequestModel, + CognitoPostConfirmationTriggerModel, + CognitoPreAuthenticationRequestModel, + CognitoPreAuthenticationTriggerModel, + CognitoPostAuthenticationRequestModel, + CognitoPostAuthenticationTriggerModel, + CognitoGroupConfigurationModel, + CognitoPreTokenGenRequestModel, + CognitoClaimsOverrideDetailsModel, + CognitoPreTokenGenResponseModel, + CognitoPreTokenGenerationTriggerModel, + CognitoMigrateUserRequestModel, + CognitoMigrateUserResponseModel, + CognitoMigrateUserTriggerModel, + CognitoCustomMessageRequestModel, + CognitoCustomMessageResponseModel, + CognitoCustomMessageTriggerModel, + CognitoCustomEmailSenderRequestModel, + CognitoCustomEmailSenderTriggerModel, + CognitoCustomSMSSenderRequestModel, + CognitoCustomSMSSenderTriggerModel, + CognitoDefineAuthChallengeRequestModel, + CognitoDefineAuthChallengeResponseModel, + CognitoDefineAuthChallengeTriggerModel, + CognitoCreateAuthChallengeRequestModel, + CognitoCreateAuthChallengeResponseModel, + CognitoCreateAuthChallengeTriggerModel, + CognitoVerifyAuthChallengeRequestModel, + CognitoVerifyAuthChallengeResponseModel, + CognitoVerifyAuthChallengeTriggerModel, +) from .dynamodb import ( DynamoDBStreamChangedRecordModel, DynamoDBStreamModel, @@ -137,6 +174,41 @@ "CloudWatchLogsDecode", "CloudWatchLogsLogEvent", "CloudWatchLogsModel", + "CognitoCallerContextModel", + "CognitoChallengeResultModel", + "CognitoPreSignupRequestModel", + "CognitoPreSignupResponseModel", + "CognitoPreSignupTriggerModel", + "CognitoPostConfirmationRequestModel", + "CognitoPostConfirmationTriggerModel", + "CognitoPreAuthenticationRequestModel", + "CognitoPreAuthenticationTriggerModel", + "CognitoPostAuthenticationRequestModel", + "CognitoPostAuthenticationTriggerModel", + "CognitoGroupConfigurationModel", + "CognitoPreTokenGenRequestModel", + "CognitoClaimsOverrideDetailsModel", + "CognitoPreTokenGenResponseModel", + "CognitoPreTokenGenerationTriggerModel", + "CognitoMigrateUserRequestModel", + "CognitoMigrateUserResponseModel", + "CognitoMigrateUserTriggerModel", + "CognitoCustomMessageRequestModel", + "CognitoCustomMessageResponseModel", + "CognitoCustomMessageTriggerModel", + "CognitoCustomEmailSenderRequestModel", + "CognitoCustomEmailSenderTriggerModel", + "CognitoCustomSMSSenderRequestModel", + "CognitoCustomSMSSenderTriggerModel", + "CognitoDefineAuthChallengeRequestModel", + "CognitoDefineAuthChallengeResponseModel", + "CognitoDefineAuthChallengeTriggerModel", + "CognitoCreateAuthChallengeRequestModel", + "CognitoCreateAuthChallengeResponseModel", + "CognitoCreateAuthChallengeTriggerModel", + "CognitoVerifyAuthChallengeRequestModel", + "CognitoVerifyAuthChallengeResponseModel", + "CognitoVerifyAuthChallengeTriggerModel", "AlbModel", "AlbRequestContext", "AlbRequestContextData", diff --git a/aws_lambda_powertools/utilities/parser/models/cognito.py b/aws_lambda_powertools/utilities/parser/models/cognito.py new file mode 100644 index 00000000000..d49457adc94 --- /dev/null +++ b/aws_lambda_powertools/utilities/parser/models/cognito.py @@ -0,0 +1,276 @@ +from __future__ import annotations +from typing import Any, Dict, List, Optional +from pydantic import BaseModel + + +class CognitoCallerContextModel(BaseModel): + awsSdkVersion: str + clientId: str + + +class CognitoChallengeResultModel(BaseModel): + challengeName: str + challengeResult: bool + challengeMetadata: Optional[str] + + +class CognitoPreSignupRequestModel(BaseModel): + userAttributes: Dict[str, str] + validationData: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoPreSignupResponseModel(BaseModel): + autoConfirmUser: Optional[bool] = None + autoVerifyPhone: Optional[bool] = None + autoVerifyEmail: Optional[bool] = None + + +class CognitoPreSignupTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoPreSignupRequestModel + response: CognitoPreSignupResponseModel + + +class CognitoPostConfirmationRequestModel(BaseModel): + userAttributes: Dict[str, str] + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoPostConfirmationTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoPostConfirmationRequestModel + response: Dict[str, Any] = {} + + +class CognitoPreAuthenticationRequestModel(BaseModel): + userAttributes: Dict[str, str] + validationData: Optional[Dict[str, str]] = None + userNotFound: Optional[bool] = None + + +class CognitoPreAuthenticationTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoPreAuthenticationRequestModel + response: Dict[str, Any] = {} + + +class CognitoPostAuthenticationRequestModel(BaseModel): + userAttributes: Dict[str, str] + newDeviceUsed: bool + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoPostAuthenticationTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoPostAuthenticationRequestModel + response: Dict[str, Any] = {} + + +class CognitoGroupConfigurationModel(BaseModel): + groupsToOverride: List[str] + iamRolesToOverride: List[str] + preferredRole: Optional[str] = None + + +class CognitoPreTokenGenRequestModel(BaseModel): + userAttributes: Dict[str, str] + groupConfiguration: CognitoGroupConfigurationModel + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoClaimsOverrideDetailsModel(BaseModel): + claimsToAddOrOverride: Optional[Dict[str, str]] = None + claimsToSuppress: Optional[List[str]] = None + groupOverrideDetails: Optional[CognitoGroupConfigurationModel] = None + + +class CognitoPreTokenGenResponseModel(BaseModel): + claimsOverrideDetails: Optional[CognitoClaimsOverrideDetailsModel] = None + + +class CognitoPreTokenGenerationTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoPreTokenGenRequestModel + response: CognitoPreTokenGenResponseModel + + +class CognitoMigrateUserRequestModel(BaseModel): + password: str + validationData: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoMigrateUserResponseModel(BaseModel): + userAttributes: Dict[str, str] + finalUserStatus: Optional[str] = None + messageAction: Optional[str] = None + desiredDeliveryMediums: Optional[List[str]] = None + forceAliasCreation: Optional[bool] = None + enableSMSMFA: Optional[bool] = None + + +class CognitoMigrateUserTriggerModel(BaseModel): + userName: str + version: Optional[str] = None + region: Optional[str] = None + userPoolId: Optional[str] = None + callerContext: Optional[CognitoCallerContextModel] = None + triggerSource: Optional[str] = None + request: CognitoMigrateUserRequestModel + response: CognitoMigrateUserResponseModel + + +class CognitoCustomMessageRequestModel(BaseModel): + userAttributes: Dict[str, str] + codeParameter: Optional[str] = None + usernameParameter: Optional[str] = None + clientMetadata: Optional[Dict[str, str]] = None + + +class CognitoCustomMessageResponseModel(BaseModel): + smsMessage: Optional[str] = None + emailMessage: Optional[str] = None + emailSubject: Optional[str] = None + + +class CognitoCustomMessageTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoCustomMessageRequestModel + response: CognitoCustomMessageResponseModel + + +class CognitoCustomEmailSenderRequestModel(BaseModel): + type: str + code: str + clientMetadata: Optional[Dict[str, str]] = None + userAttributes: Dict[str, str] + + +class CognitoCustomEmailSenderTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoCustomEmailSenderRequestModel + + +class CognitoCustomSMSSenderRequestModel(BaseModel): + type: str + code: str + clientMetadata: Optional[Dict[str, str]] = None + userAttributes: Dict[str, str] + + +class CognitoCustomSMSSenderTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoCustomSMSSenderRequestModel + + +class CognitoDefineAuthChallengeRequestModel(BaseModel): + userAttributes: Dict[str, str] + session: List[CognitoChallengeResultModel] + clientMetadata: Optional[Dict[str, str]] = None + userNotFound: Optional[bool] = None + + +class CognitoDefineAuthChallengeResponseModel(BaseModel): + challengeName: str + issueTokens: bool + failAuthentication: bool + + +class CognitoDefineAuthChallengeTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoDefineAuthChallengeRequestModel + response: CognitoDefineAuthChallengeResponseModel + + +class CognitoCreateAuthChallengeRequestModel(BaseModel): + userAttributes: Dict[str, str] + challengeName: str + session: List[CognitoChallengeResultModel] + clientMetadata: Optional[Dict[str, str]] = None + userNotFound: Optional[bool] = None + + +class CognitoCreateAuthChallengeResponseModel(BaseModel): + publicChallengeParameters: Dict[str, str] + privateChallengeParameters: Dict[str, str] + challengeMetadata: Optional[str] = None + + +class CognitoCreateAuthChallengeTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoCreateAuthChallengeRequestModel + response: CognitoCreateAuthChallengeResponseModel + + +class CognitoVerifyAuthChallengeRequestModel(BaseModel): + userAttributes: Dict[str, str] + privateChallengeParameters: Dict[str, str] + challengeAnswer: str + clientMetadata: Optional[Dict[str, str]] = None + userNotFound: Optional[bool] = None + + +class CognitoVerifyAuthChallengeResponseModel(BaseModel): + answerCorrect: bool + + +class CognitoVerifyAuthChallengeTriggerModel(BaseModel): + version: str + region: str + userPoolId: str + userName: str + callerContext: CognitoCallerContextModel + triggerSource: str + request: CognitoVerifyAuthChallengeRequestModel + response: CognitoVerifyAuthChallengeResponseModel \ No newline at end of file diff --git a/tests/unit/parser/_pydantic/test_cognito_triggers.py b/tests/unit/parser/_pydantic/test_cognito_triggers.py new file mode 100644 index 00000000000..39c88f66a80 --- /dev/null +++ b/tests/unit/parser/_pydantic/test_cognito_triggers.py @@ -0,0 +1,46 @@ +import pytest +from aws_lambda_powertools.utilities.parser import parse, ValidationError +from aws_lambda_powertools.utilities.parser.models import ( + CognitoPreSignupTriggerModel, + CognitoPostConfirmationTriggerModel, + CognitoPreAuthenticationTriggerModel, + CognitoPostAuthenticationTriggerModel, + CognitoPreTokenGenerationTriggerModel, + CognitoMigrateUserTriggerModel, + CognitoCustomMessageTriggerModel, + CognitoCustomEmailSenderTriggerModel, + CognitoCustomSMSSenderTriggerModel, + CognitoDefineAuthChallengeTriggerModel, + CognitoCreateAuthChallengeTriggerModel, + CognitoVerifyAuthChallengeTriggerModel, +) +from tests.functional.utils import load_event + +@pytest.mark.parametrize( + "filename,model", + [ + # use the existing `tests/events/*.json` names: + ("cognitoPreSignUpEvent.json", CognitoPreSignupTriggerModel), + ("cognitoPostConfirmationEvent.json", CognitoPostConfirmationTriggerModel), + ("cognitoPreAuthenticationEvent.json", CognitoPreAuthenticationTriggerModel), + ("cognitoPostAuthenticationEvent.json", CognitoPostAuthenticationTriggerModel), + ("cognitoPreTokenGenerationEvent.json", CognitoPreTokenGenerationTriggerModel), + ("cognitoUserMigrationEvent.json", CognitoMigrateUserTriggerModel), + ("cognitoCustomMessageEvent.json", CognitoCustomMessageTriggerModel), + ("cognitoCustomEmailSenderEvent.json", CognitoCustomEmailSenderTriggerModel), + ("cognitoCustomSMSSenderEvent.json", CognitoCustomSMSSenderTriggerModel), + ("cognitoDefineAuthChallengeEvent.json", CognitoDefineAuthChallengeTriggerModel), + ("cognitoCreateAuthChallengeEvent.json", CognitoCreateAuthChallengeTriggerModel), + ("cognitoVerifyAuthChallengeResponseEvent.json", CognitoVerifyAuthChallengeTriggerModel), + ], +) +def test_cognito_trigger_models_parse_success(filename, model): + event = load_event(filename) + parsed = parse(event=event, model=model) + # if parsing succeeds, we get an instance + assert isinstance(parsed, model) + + +def test_cognito_trigger_models_invalid_raises(): + with pytest.raises(ValidationError): + parse(event={"foo": "bar"}, model=CognitoPreSignupTriggerModel) From 03e520bbd077a38fb6767fb9ac9001a3c8343bc8 Mon Sep 17 00:00:00 2001 From: Vatsal Goel <144617902+VatsalGoel3@users.noreply.github.com> Date: Thu, 29 May 2025 00:47:21 -0600 Subject: [PATCH 2/7] Updated docs --- docs/utilities/parser.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/utilities/parser.md b/docs/utilities/parser.md index 4cdf0d452f2..e76c72d4b60 100644 --- a/docs/utilities/parser.md +++ b/docs/utilities/parser.md @@ -117,6 +117,18 @@ The example above uses `SqsModel`. Other built-in models can be found below. | **CloudFormationCustomResourceUpdateModel** | Lambda Event Source payload for AWS CloudFormation `UPDATE` operation | | **CloudFormationCustomResourceDeleteModel** | Lambda Event Source payload for AWS CloudFormation `DELETE` operation | | **CloudwatchLogsModel** | Lambda Event Source payload for Amazon CloudWatch Logs | +| **CognitoPreSignupTriggerModel** | Lambda User Pool Pre-Sign-Up trigger event | +| **CognitoPostConfirmationTriggerModel** | Lambda User Pool Post Confirmation trigger event | +| **CognitoPreAuthenticationTriggerModel** | Lambda User Pool Pre Authentication trigger event | +| **CognitoPostAuthenticationTriggerModel** | Lambda User Pool Post Authentication trigger event | +| **CognitoPreTokenGenerationTriggerModel** | Lambda User Pool Pre Token Generation trigger event | +| **CognitoMigrateUserTriggerModel** | Lambda User Pool Migrate User trigger event | +| **CognitoCustomMessageTriggerModel** | Lambda User Pool Custom Message trigger event | +| **CognitoCustomEmailSenderTriggerModel** | Lambda User Pool Custom Email Sender trigger event | +| **CognitoCustomSMSSenderTriggerModel** | Lambda User Pool Custom SMS Sender trigger event | +| **CognitoDefineAuthChallengeTriggerModel** | Lambda User Pool Define Auth Challenge trigger event | +| **CognitoCreateAuthChallengeTriggerModel** | Lambda User Pool Create Auth Challenge trigger event | +| **CognitoVerifyAuthChallengeTriggerModel** | Lambda User Pool Verify Auth Challenge trigger event | | **DynamoDBStreamModel** | Lambda Event Source payload for Amazon DynamoDB Streams | | **EventBridgeModel** | Lambda Event Source payload for Amazon EventBridge | | **IoTCoreThingEvent** | Lambda Event Source payload for IoT Core Thing created, updated, or deleted. | From adbe34745a056f2664f410fe8d06132519a1d7bd Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 9 Jul 2025 16:39:13 +0100 Subject: [PATCH 3/7] Fix Ruff problems --- .../utilities/parser/models/__init__.py | 42 +++++++++---------- .../utilities/parser/models/cognito.py | 4 +- .../parser/_pydantic/test_cognito_triggers.py | 20 +++++---- 3 files changed, 34 insertions(+), 32 deletions(-) diff --git a/aws_lambda_powertools/utilities/parser/models/__init__.py b/aws_lambda_powertools/utilities/parser/models/__init__.py index 7dca3b5fb4e..c296cc3c6df 100644 --- a/aws_lambda_powertools/utilities/parser/models/__init__.py +++ b/aws_lambda_powertools/utilities/parser/models/__init__.py @@ -53,36 +53,36 @@ from .cognito import ( CognitoCallerContextModel, CognitoChallengeResultModel, - CognitoPreSignupRequestModel, - CognitoPreSignupResponseModel, - CognitoPreSignupTriggerModel, - CognitoPostConfirmationRequestModel, - CognitoPostConfirmationTriggerModel, - CognitoPreAuthenticationRequestModel, - CognitoPreAuthenticationTriggerModel, - CognitoPostAuthenticationRequestModel, - CognitoPostAuthenticationTriggerModel, - CognitoGroupConfigurationModel, - CognitoPreTokenGenRequestModel, CognitoClaimsOverrideDetailsModel, - CognitoPreTokenGenResponseModel, - CognitoPreTokenGenerationTriggerModel, - CognitoMigrateUserRequestModel, - CognitoMigrateUserResponseModel, - CognitoMigrateUserTriggerModel, + CognitoCreateAuthChallengeRequestModel, + CognitoCreateAuthChallengeResponseModel, + CognitoCreateAuthChallengeTriggerModel, + CognitoCustomEmailSenderRequestModel, + CognitoCustomEmailSenderTriggerModel, CognitoCustomMessageRequestModel, CognitoCustomMessageResponseModel, CognitoCustomMessageTriggerModel, - CognitoCustomEmailSenderRequestModel, - CognitoCustomEmailSenderTriggerModel, CognitoCustomSMSSenderRequestModel, CognitoCustomSMSSenderTriggerModel, CognitoDefineAuthChallengeRequestModel, CognitoDefineAuthChallengeResponseModel, CognitoDefineAuthChallengeTriggerModel, - CognitoCreateAuthChallengeRequestModel, - CognitoCreateAuthChallengeResponseModel, - CognitoCreateAuthChallengeTriggerModel, + CognitoGroupConfigurationModel, + CognitoMigrateUserRequestModel, + CognitoMigrateUserResponseModel, + CognitoMigrateUserTriggerModel, + CognitoPostAuthenticationRequestModel, + CognitoPostAuthenticationTriggerModel, + CognitoPostConfirmationRequestModel, + CognitoPostConfirmationTriggerModel, + CognitoPreAuthenticationRequestModel, + CognitoPreAuthenticationTriggerModel, + CognitoPreSignupRequestModel, + CognitoPreSignupResponseModel, + CognitoPreSignupTriggerModel, + CognitoPreTokenGenerationTriggerModel, + CognitoPreTokenGenRequestModel, + CognitoPreTokenGenResponseModel, CognitoVerifyAuthChallengeRequestModel, CognitoVerifyAuthChallengeResponseModel, CognitoVerifyAuthChallengeTriggerModel, diff --git a/aws_lambda_powertools/utilities/parser/models/cognito.py b/aws_lambda_powertools/utilities/parser/models/cognito.py index d49457adc94..995c72b77ab 100644 --- a/aws_lambda_powertools/utilities/parser/models/cognito.py +++ b/aws_lambda_powertools/utilities/parser/models/cognito.py @@ -1,5 +1,5 @@ -from __future__ import annotations from typing import Any, Dict, List, Optional + from pydantic import BaseModel @@ -273,4 +273,4 @@ class CognitoVerifyAuthChallengeTriggerModel(BaseModel): callerContext: CognitoCallerContextModel triggerSource: str request: CognitoVerifyAuthChallengeRequestModel - response: CognitoVerifyAuthChallengeResponseModel \ No newline at end of file + response: CognitoVerifyAuthChallengeResponseModel diff --git a/tests/unit/parser/_pydantic/test_cognito_triggers.py b/tests/unit/parser/_pydantic/test_cognito_triggers.py index 39c88f66a80..f23a7ea65ec 100644 --- a/tests/unit/parser/_pydantic/test_cognito_triggers.py +++ b/tests/unit/parser/_pydantic/test_cognito_triggers.py @@ -1,21 +1,23 @@ import pytest -from aws_lambda_powertools.utilities.parser import parse, ValidationError + +from aws_lambda_powertools.utilities.parser import ValidationError, parse from aws_lambda_powertools.utilities.parser.models import ( - CognitoPreSignupTriggerModel, - CognitoPostConfirmationTriggerModel, - CognitoPreAuthenticationTriggerModel, - CognitoPostAuthenticationTriggerModel, - CognitoPreTokenGenerationTriggerModel, - CognitoMigrateUserTriggerModel, - CognitoCustomMessageTriggerModel, + CognitoCreateAuthChallengeTriggerModel, CognitoCustomEmailSenderTriggerModel, + CognitoCustomMessageTriggerModel, CognitoCustomSMSSenderTriggerModel, CognitoDefineAuthChallengeTriggerModel, - CognitoCreateAuthChallengeTriggerModel, + CognitoMigrateUserTriggerModel, + CognitoPostAuthenticationTriggerModel, + CognitoPostConfirmationTriggerModel, + CognitoPreAuthenticationTriggerModel, + CognitoPreSignupTriggerModel, + CognitoPreTokenGenerationTriggerModel, CognitoVerifyAuthChallengeTriggerModel, ) from tests.functional.utils import load_event + @pytest.mark.parametrize( "filename,model", [ From e4aa97c6d64acf229f4214646921514ac287e44a Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 9 Jul 2025 18:19:41 +0100 Subject: [PATCH 4/7] Fix implementation and tests --- .../utilities/parser/models/__init__.py | 51 +--- .../utilities/parser/models/cognito.py | 251 +++++++----------- .../cognitoCreateAuthChallengeEvent.json | 2 +- .../events/cognitoCustomEmailSenderEvent.json | 2 +- tests/events/cognitoCustomMessageEvent.json | 2 +- tests/events/cognitoCustomSMSSenderEvent.json | 2 +- .../cognitoDefineAuthChallengeEvent.json | 2 +- ...gnitoVerifyAuthChallengeResponseEvent.json | 4 +- .../parser/_pydantic/test_cognito_triggers.py | 4 +- 9 files changed, 117 insertions(+), 203 deletions(-) diff --git a/aws_lambda_powertools/utilities/parser/models/__init__.py b/aws_lambda_powertools/utilities/parser/models/__init__.py index c296cc3c6df..cbaef0ed955 100644 --- a/aws_lambda_powertools/utilities/parser/models/__init__.py +++ b/aws_lambda_powertools/utilities/parser/models/__init__.py @@ -51,40 +51,18 @@ CloudWatchLogsModel, ) from .cognito import ( - CognitoCallerContextModel, - CognitoChallengeResultModel, - CognitoClaimsOverrideDetailsModel, - CognitoCreateAuthChallengeRequestModel, - CognitoCreateAuthChallengeResponseModel, CognitoCreateAuthChallengeTriggerModel, - CognitoCustomEmailSenderRequestModel, CognitoCustomEmailSenderTriggerModel, - CognitoCustomMessageRequestModel, - CognitoCustomMessageResponseModel, CognitoCustomMessageTriggerModel, - CognitoCustomSMSSenderRequestModel, CognitoCustomSMSSenderTriggerModel, - CognitoDefineAuthChallengeRequestModel, - CognitoDefineAuthChallengeResponseModel, CognitoDefineAuthChallengeTriggerModel, - CognitoGroupConfigurationModel, - CognitoMigrateUserRequestModel, - CognitoMigrateUserResponseModel, CognitoMigrateUserTriggerModel, - CognitoPostAuthenticationRequestModel, CognitoPostAuthenticationTriggerModel, - CognitoPostConfirmationRequestModel, CognitoPostConfirmationTriggerModel, - CognitoPreAuthenticationRequestModel, CognitoPreAuthenticationTriggerModel, - CognitoPreSignupRequestModel, - CognitoPreSignupResponseModel, CognitoPreSignupTriggerModel, - CognitoPreTokenGenerationTriggerModel, - CognitoPreTokenGenRequestModel, - CognitoPreTokenGenResponseModel, - CognitoVerifyAuthChallengeRequestModel, - CognitoVerifyAuthChallengeResponseModel, + CognitoPreTokenGenerationTriggerModelV1, + CognitoPreTokenGenerationTriggerModelV2AndV3, CognitoVerifyAuthChallengeTriggerModel, ) from .dynamodb import ( @@ -175,41 +153,20 @@ "CloudWatchLogsDecode", "CloudWatchLogsLogEvent", "CloudWatchLogsModel", - "CognitoCallerContextModel", - "CognitoChallengeResultModel", - "CognitoPreSignupRequestModel", - "CognitoPreSignupResponseModel", "CognitoPreSignupTriggerModel", - "CognitoPostConfirmationRequestModel", "CognitoPostConfirmationTriggerModel", - "CognitoPreAuthenticationRequestModel", "CognitoPreAuthenticationTriggerModel", - "CognitoPostAuthenticationRequestModel", "CognitoPostAuthenticationTriggerModel", - "CognitoGroupConfigurationModel", - "CognitoPreTokenGenRequestModel", - "CognitoClaimsOverrideDetailsModel", - "CognitoPreTokenGenResponseModel", "CognitoPreTokenGenerationTriggerModel", - "CognitoMigrateUserRequestModel", - "CognitoMigrateUserResponseModel", "CognitoMigrateUserTriggerModel", - "CognitoCustomMessageRequestModel", - "CognitoCustomMessageResponseModel", "CognitoCustomMessageTriggerModel", - "CognitoCustomEmailSenderRequestModel", "CognitoCustomEmailSenderTriggerModel", - "CognitoCustomSMSSenderRequestModel", "CognitoCustomSMSSenderTriggerModel", - "CognitoDefineAuthChallengeRequestModel", - "CognitoDefineAuthChallengeResponseModel", "CognitoDefineAuthChallengeTriggerModel", - "CognitoCreateAuthChallengeRequestModel", - "CognitoCreateAuthChallengeResponseModel", "CognitoCreateAuthChallengeTriggerModel", - "CognitoVerifyAuthChallengeRequestModel", - "CognitoVerifyAuthChallengeResponseModel", "CognitoVerifyAuthChallengeTriggerModel", + "CognitoPreTokenGenerationTriggerModelV1", + "CognitoPreTokenGenerationTriggerModelV2AndV3", "AlbModel", "AlbRequestContext", "AlbRequestContextData", diff --git a/aws_lambda_powertools/utilities/parser/models/cognito.py b/aws_lambda_powertools/utilities/parser/models/cognito.py index 995c72b77ab..05726e37db4 100644 --- a/aws_lambda_powertools/utilities/parser/models/cognito.py +++ b/aws_lambda_powertools/utilities/parser/models/cognito.py @@ -1,133 +1,118 @@ -from typing import Any, Dict, List, Optional +from typing import Any, Dict, List, Literal, Optional from pydantic import BaseModel +# Common context model for Cognito triggers class CognitoCallerContextModel(BaseModel): awsSdkVersion: str clientId: str -class CognitoChallengeResultModel(BaseModel): - challengeName: str - challengeResult: bool - challengeMetadata: Optional[str] +# Base model for all Cognito triggers +class CognitoTriggerBaseSchema(BaseModel): + version: str + region: str + userPoolId: str + userName: Optional[str] = None + callerContext: CognitoCallerContextModel +# Models for Pre-Signup flow class CognitoPreSignupRequestModel(BaseModel): - userAttributes: Dict[str, str] - validationData: Optional[Dict[str, str]] = None - clientMetadata: Optional[Dict[str, str]] = None + userAttributes: Dict[str, Any] + validationData: Optional[Dict[str, Any]] = None + clientMetadata: Optional[Dict[str, Any]] = None + userNotFound: Optional[bool] = None class CognitoPreSignupResponseModel(BaseModel): - autoConfirmUser: Optional[bool] = None - autoVerifyPhone: Optional[bool] = None - autoVerifyEmail: Optional[bool] = None + autoConfirmUser: Optional[bool] = False + autoVerifyPhone: Optional[bool] = False + autoVerifyEmail: Optional[bool] = False -class CognitoPreSignupTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str +class CognitoPreSignupTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["PreSignUp_SignUp"] request: CognitoPreSignupRequestModel response: CognitoPreSignupResponseModel +# Models for Post-Confirmation flow class CognitoPostConfirmationRequestModel(BaseModel): - userAttributes: Dict[str, str] - clientMetadata: Optional[Dict[str, str]] = None + userAttributes: Dict[str, Any] + clientMetadata: Optional[Dict[str, Any]] = None -class CognitoPostConfirmationTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str +class CognitoPostConfirmationTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["PostConfirmation_ConfirmSignUp"] request: CognitoPostConfirmationRequestModel response: Dict[str, Any] = {} +# Models for Pre-Authentication flow class CognitoPreAuthenticationRequestModel(BaseModel): - userAttributes: Dict[str, str] - validationData: Optional[Dict[str, str]] = None + userAttributes: Dict[str, Any] + validationData: Optional[Dict[str, Any]] = None userNotFound: Optional[bool] = None -class CognitoPreAuthenticationTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str +class CognitoPreAuthenticationTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["PreAuthentication_Authentication"] request: CognitoPreAuthenticationRequestModel response: Dict[str, Any] = {} +# Models for Post-Authentication flow class CognitoPostAuthenticationRequestModel(BaseModel): - userAttributes: Dict[str, str] - newDeviceUsed: bool - clientMetadata: Optional[Dict[str, str]] = None + userAttributes: Dict[str, Any] + newDeviceUsed: Optional[bool] = None + clientMetadata: Optional[Dict[str, Any]] = None -class CognitoPostAuthenticationTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str +class CognitoPostAuthenticationTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["PostAuthentication_Authentication"] request: CognitoPostAuthenticationRequestModel response: Dict[str, Any] = {} +# Models for Pre-Token Generation flow class CognitoGroupConfigurationModel(BaseModel): groupsToOverride: List[str] iamRolesToOverride: List[str] preferredRole: Optional[str] = None -class CognitoPreTokenGenRequestModel(BaseModel): - userAttributes: Dict[str, str] +class CognitoPreTokenGenerationRequestModel(BaseModel): + userAttributes: Dict[str, Any] groupConfiguration: CognitoGroupConfigurationModel - clientMetadata: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, Any]] = None -class CognitoClaimsOverrideDetailsModel(BaseModel): - claimsToAddOrOverride: Optional[Dict[str, str]] = None - claimsToSuppress: Optional[List[str]] = None - groupOverrideDetails: Optional[CognitoGroupConfigurationModel] = None +class CognitoPreTokenGenerationTriggerModelV1(CognitoTriggerBaseSchema): + triggerSource: str + request: CognitoPreTokenGenerationRequestModel + response: Dict[str, Any] = {} -class CognitoPreTokenGenResponseModel(BaseModel): - claimsOverrideDetails: Optional[CognitoClaimsOverrideDetailsModel] = None +class CognitoPreTokenGenerationRequestModelV2AndV3(CognitoPreTokenGenerationRequestModel): + scopes: Optional[Dict[str, Any]] = None -class CognitoPreTokenGenerationTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str - request: CognitoPreTokenGenRequestModel - response: CognitoPreTokenGenResponseModel +class CognitoPreTokenGenerationTriggerModelV2AndV3(CognitoTriggerBaseSchema): + request: CognitoPreTokenGenerationRequestModelV2AndV3 + response: Dict[str, Any] = {} +# Models for User Migration flow class CognitoMigrateUserRequestModel(BaseModel): password: str - validationData: Optional[Dict[str, str]] = None - clientMetadata: Optional[Dict[str, str]] = None + validationData: Optional[Dict[str, Any]] = None + clientMetadata: Optional[Dict[str, Any]] = None class CognitoMigrateUserResponseModel(BaseModel): - userAttributes: Dict[str, str] + userAttributes: Optional[Dict[str, Any]] = None finalUserStatus: Optional[str] = None messageAction: Optional[str] = None desiredDeliveryMediums: Optional[List[str]] = None @@ -135,22 +120,20 @@ class CognitoMigrateUserResponseModel(BaseModel): enableSMSMFA: Optional[bool] = None -class CognitoMigrateUserTriggerModel(BaseModel): +class CognitoMigrateUserTriggerModel(CognitoTriggerBaseSchema): + triggerSource: str userName: str - version: Optional[str] = None - region: Optional[str] = None - userPoolId: Optional[str] = None - callerContext: Optional[CognitoCallerContextModel] = None - triggerSource: Optional[str] = None request: CognitoMigrateUserRequestModel response: CognitoMigrateUserResponseModel +# Models for Custom Message flow class CognitoCustomMessageRequestModel(BaseModel): - userAttributes: Dict[str, str] - codeParameter: Optional[str] = None + userAttributes: Dict[str, Any] + codeParameter: str + linkParameter: Optional[str] = None usernameParameter: Optional[str] = None - clientMetadata: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, Any]] = None class CognitoCustomMessageResponseModel(BaseModel): @@ -159,105 +142,82 @@ class CognitoCustomMessageResponseModel(BaseModel): emailSubject: Optional[str] = None -class CognitoCustomMessageTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel +class CognitoCustomMessageTriggerModel(CognitoTriggerBaseSchema): triggerSource: str request: CognitoCustomMessageRequestModel response: CognitoCustomMessageResponseModel -class CognitoCustomEmailSenderRequestModel(BaseModel): +# Models for Custom Email/SMS Sender flow +class CognitoCustomEmailSMSSenderRequestModel(BaseModel): type: str code: str - clientMetadata: Optional[Dict[str, str]] = None - userAttributes: Dict[str, str] + clientMetadata: Optional[Dict[str, Any]] = None + userAttributes: Dict[str, Any] -class CognitoCustomEmailSenderTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str - request: CognitoCustomEmailSenderRequestModel +class CognitoCustomEmailSenderTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["CustomEmailSender_SignUp"] + request: CognitoCustomEmailSMSSenderRequestModel -class CognitoCustomSMSSenderRequestModel(BaseModel): - type: str - code: str - clientMetadata: Optional[Dict[str, str]] = None - userAttributes: Dict[str, str] +class CognitoCustomSMSSenderTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["CustomSMSSender_SignUp"] + request: CognitoCustomEmailSMSSenderRequestModel -class CognitoCustomSMSSenderTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str - request: CognitoCustomSMSSenderRequestModel +# Models for Challenge Authentication flows +class CognitoChallengeResultModel(BaseModel): + challengeName: Literal[ + "SRP_A", + "PASSWORD_VERIFIER", + "SMS_MFA", + "EMAIL_OTP", + "SOFTWARE_TOKEN_MFA", + "DEVICE_SRP_AUTH", + "DEVICE_PASSWORD_VERIFIER", + "ADMIN_NO_SRP_AUTH", + ] + challengeResult: bool + challengeMetadata: Optional[str] = None -class CognitoDefineAuthChallengeRequestModel(BaseModel): - userAttributes: Dict[str, str] +class CognitoAuthChallengeRequestModel(BaseModel): + userAttributes: Dict[str, Any] session: List[CognitoChallengeResultModel] - clientMetadata: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, Any]] = None userNotFound: Optional[bool] = None class CognitoDefineAuthChallengeResponseModel(BaseModel): - challengeName: str - issueTokens: bool - failAuthentication: bool + challengeName: Optional[str] = None + issueTokens: Optional[bool] = None + failAuthentication: Optional[bool] = None -class CognitoDefineAuthChallengeTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str - request: CognitoDefineAuthChallengeRequestModel +class CognitoDefineAuthChallengeTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["DefineAuthChallenge_Authentication"] + request: CognitoAuthChallengeRequestModel response: CognitoDefineAuthChallengeResponseModel -class CognitoCreateAuthChallengeRequestModel(BaseModel): - userAttributes: Dict[str, str] - challengeName: str - session: List[CognitoChallengeResultModel] - clientMetadata: Optional[Dict[str, str]] = None - userNotFound: Optional[bool] = None - - class CognitoCreateAuthChallengeResponseModel(BaseModel): - publicChallengeParameters: Dict[str, str] - privateChallengeParameters: Dict[str, str] + publicChallengeParameters: Optional[Dict[str, Any]] = None + privateChallengeParameters: Optional[Dict[str, Any]] = None challengeMetadata: Optional[str] = None -class CognitoCreateAuthChallengeTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str - request: CognitoCreateAuthChallengeRequestModel +class CognitoCreateAuthChallengeTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["CreateAuthChallenge_Authentication"] + request: CognitoAuthChallengeRequestModel response: CognitoCreateAuthChallengeResponseModel class CognitoVerifyAuthChallengeRequestModel(BaseModel): - userAttributes: Dict[str, str] - privateChallengeParameters: Dict[str, str] + userAttributes: Dict[str, Any] + privateChallengeParameters: Dict[str, Any] challengeAnswer: str - clientMetadata: Optional[Dict[str, str]] = None + clientMetadata: Optional[Dict[str, Any]] = None userNotFound: Optional[bool] = None @@ -265,12 +225,7 @@ class CognitoVerifyAuthChallengeResponseModel(BaseModel): answerCorrect: bool -class CognitoVerifyAuthChallengeTriggerModel(BaseModel): - version: str - region: str - userPoolId: str - userName: str - callerContext: CognitoCallerContextModel - triggerSource: str +class CognitoVerifyAuthChallengeTriggerModel(CognitoTriggerBaseSchema): + triggerSource: Literal["VerifyAuthChallengeResponse_Authentication"] request: CognitoVerifyAuthChallengeRequestModel response: CognitoVerifyAuthChallengeResponseModel diff --git a/tests/events/cognitoCreateAuthChallengeEvent.json b/tests/events/cognitoCreateAuthChallengeEvent.json index ad018ae0829..6955a7b7bbf 100644 --- a/tests/events/cognitoCreateAuthChallengeEvent.json +++ b/tests/events/cognitoCreateAuthChallengeEvent.json @@ -18,7 +18,7 @@ "challengeName": "PASSWORD_VERIFIER", "session" : [ { - "challengeName": "CUSTOM_CHALLENGE", + "challengeName": "PASSWORD_VERIFIER", "challengeResult": true, "challengeMetadata": "CAPTCHA_CHALLENGE" } diff --git a/tests/events/cognitoCustomEmailSenderEvent.json b/tests/events/cognitoCustomEmailSenderEvent.json index c65e304d036..51e5f952a0c 100644 --- a/tests/events/cognitoCustomEmailSenderEvent.json +++ b/tests/events/cognitoCustomEmailSenderEvent.json @@ -5,7 +5,7 @@ "userPoolId": "userPoolId", "userName": "userName", "callerContext": { - "awsSdk": "awsSdkVersion", + "awsSdkVersion": "awsSdkVersion", "clientId": "clientId" }, "request": { diff --git a/tests/events/cognitoCustomMessageEvent.json b/tests/events/cognitoCustomMessageEvent.json index 658cd302961..8e83b1a86c2 100644 --- a/tests/events/cognitoCustomMessageEvent.json +++ b/tests/events/cognitoCustomMessageEvent.json @@ -5,7 +5,7 @@ "userPoolId": "userPoolId", "userName": "userName", "callerContext": { - "awsSdk": "awsSdkVersion", + "awsSdkVersion": "awsSdkVersion", "clientId": "clientId" }, "request": { diff --git a/tests/events/cognitoCustomSMSSenderEvent.json b/tests/events/cognitoCustomSMSSenderEvent.json index d2ca1b218c0..3076bc2e807 100644 --- a/tests/events/cognitoCustomSMSSenderEvent.json +++ b/tests/events/cognitoCustomSMSSenderEvent.json @@ -5,7 +5,7 @@ "userPoolId": "userPoolId", "userName": "userName", "callerContext": { - "awsSdk": "awsSdkVersion", + "awsSdkVersion": "awsSdkVersion", "clientId": "clientId" }, "request": { diff --git a/tests/events/cognitoDefineAuthChallengeEvent.json b/tests/events/cognitoDefineAuthChallengeEvent.json index 80ea5ac2d98..43e754e2a54 100644 --- a/tests/events/cognitoDefineAuthChallengeEvent.json +++ b/tests/events/cognitoDefineAuthChallengeEvent.json @@ -21,7 +21,7 @@ "challengeResult": true }, { - "challengeName": "CUSTOM_CHALLENGE", + "challengeName": "PASSWORD_VERIFIER", "challengeResult": true, "challengeMetadata": "CAPTCHA_CHALLENGE" } diff --git a/tests/events/cognitoVerifyAuthChallengeResponseEvent.json b/tests/events/cognitoVerifyAuthChallengeResponseEvent.json index 2ebcdb5c278..b466af3c6cb 100644 --- a/tests/events/cognitoVerifyAuthChallengeResponseEvent.json +++ b/tests/events/cognitoVerifyAuthChallengeResponseEvent.json @@ -24,5 +24,7 @@ "challengeAnswer": "challengeAnswer", "userNotFound": true }, - "response": {} + "response": { + "answerCorrect": true + } } diff --git a/tests/unit/parser/_pydantic/test_cognito_triggers.py b/tests/unit/parser/_pydantic/test_cognito_triggers.py index f23a7ea65ec..a4c34472ad7 100644 --- a/tests/unit/parser/_pydantic/test_cognito_triggers.py +++ b/tests/unit/parser/_pydantic/test_cognito_triggers.py @@ -12,7 +12,7 @@ CognitoPostConfirmationTriggerModel, CognitoPreAuthenticationTriggerModel, CognitoPreSignupTriggerModel, - CognitoPreTokenGenerationTriggerModel, + CognitoPreTokenGenerationTriggerModelV1, CognitoVerifyAuthChallengeTriggerModel, ) from tests.functional.utils import load_event @@ -26,7 +26,7 @@ ("cognitoPostConfirmationEvent.json", CognitoPostConfirmationTriggerModel), ("cognitoPreAuthenticationEvent.json", CognitoPreAuthenticationTriggerModel), ("cognitoPostAuthenticationEvent.json", CognitoPostAuthenticationTriggerModel), - ("cognitoPreTokenGenerationEvent.json", CognitoPreTokenGenerationTriggerModel), + ("cognitoPreTokenGenerationEvent.json", CognitoPreTokenGenerationTriggerModelV1), ("cognitoUserMigrationEvent.json", CognitoMigrateUserTriggerModel), ("cognitoCustomMessageEvent.json", CognitoCustomMessageTriggerModel), ("cognitoCustomEmailSenderEvent.json", CognitoCustomEmailSenderTriggerModel), From 84c0ae3b87823c13a0c35f0b995a455671921706 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 9 Jul 2025 18:21:34 +0100 Subject: [PATCH 5/7] Fix implementation and tests --- aws_lambda_powertools/utilities/parser/models/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aws_lambda_powertools/utilities/parser/models/__init__.py b/aws_lambda_powertools/utilities/parser/models/__init__.py index cbaef0ed955..15387374f4d 100644 --- a/aws_lambda_powertools/utilities/parser/models/__init__.py +++ b/aws_lambda_powertools/utilities/parser/models/__init__.py @@ -157,7 +157,6 @@ "CognitoPostConfirmationTriggerModel", "CognitoPreAuthenticationTriggerModel", "CognitoPostAuthenticationTriggerModel", - "CognitoPreTokenGenerationTriggerModel", "CognitoMigrateUserTriggerModel", "CognitoCustomMessageTriggerModel", "CognitoCustomEmailSenderTriggerModel", From bb8ba50749546925275a4b6f5ea54db6a0165a39 Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 9 Jul 2025 18:22:54 +0100 Subject: [PATCH 6/7] Fix implementation and tests --- .github/workflows/quality_check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/quality_check.yml b/.github/workflows/quality_check.yml index 66e2ef60e0d..0cfeac0e6e5 100644 --- a/.github/workflows/quality_check.yml +++ b/.github/workflows/quality_check.yml @@ -79,6 +79,6 @@ jobs: uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # 5.4.3 with: token: ${{ secrets.CODECOV_TOKEN }} - file: ./coverage.xml + files: ./coverage.xml env_vars: PYTHON name: aws-lambda-powertools-python-codecov From 281a55a60e8a87b006c653ecdf8155d23a40f7ba Mon Sep 17 00:00:00 2001 From: Leandro Damascena Date: Wed, 9 Jul 2025 18:38:19 +0100 Subject: [PATCH 7/7] Fix docs --- docs/utilities/parser.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/utilities/parser.md b/docs/utilities/parser.md index a6041a5a996..7c46258bff9 100644 --- a/docs/utilities/parser.md +++ b/docs/utilities/parser.md @@ -122,7 +122,8 @@ The example above uses `SqsModel`. Other built-in models can be found below. | **CognitoPostConfirmationTriggerModel** | Lambda User Pool Post Confirmation trigger event | | **CognitoPreAuthenticationTriggerModel** | Lambda User Pool Pre Authentication trigger event | | **CognitoPostAuthenticationTriggerModel** | Lambda User Pool Post Authentication trigger event | -| **CognitoPreTokenGenerationTriggerModel** | Lambda User Pool Pre Token Generation trigger event | +| **CognitoPreTokenGenerationTriggerModelV1** | Lambda User Pool Pre Token Generation V1 trigger event | +| **CognitoPreTokenGenerationTriggerModelV2AndV3** | Lambda User Pool Pre Token Generation V2 and V3 trigger event | | **CognitoMigrateUserTriggerModel** | Lambda User Pool Migrate User trigger event | | **CognitoCustomMessageTriggerModel** | Lambda User Pool Custom Message trigger event | | **CognitoCustomEmailSenderTriggerModel** | Lambda User Pool Custom Email Sender trigger event |