From a329c3a478f52aaff170b367c5b5965ff919ba41 Mon Sep 17 00:00:00 2001 From: Vishwak Thatikonda Date: Sun, 4 Oct 2026 17:22:50 -0700 Subject: [PATCH 1/2] fix(parser): accept real Cognito trigger events from common flows The Cognito trigger schemas rejected events Cognito sends in common flows, so custom auth flows and custom email senders could not be parsed at all. - PreSignup, PostConfirmation, and the custom email and SMS sender schemas accept every documented triggerSource instead of a single one. - The custom sender schemas no longer require a response, which real events don't have, and accept a null clientMetadata. - The Define and Create auth challenge schemas accept an empty session, which the first call of a custom auth flow without SRP sends. - The Verify auth challenge schema accepts a null answerCorrect, which Cognito sends for the function to set. - callerContext.clientId accepts null, which admin API operations send. Add the captured events from the issue as fixtures, with a round-trip test for each. Closes #5770 --- packages/parser/src/schemas/cognito.ts | 63 ++++++++++++++----- .../create-auth-challenge-first-call.json | 26 ++++++++ ...custom-email-sender-admin-create-user.json | 22 +++++++ .../custom-email-sender-forgot-password.json | 22 +++++++ .../define-auth-challenge-first-call.json | 25 ++++++++ ...st-confirmation-admin-confirm-sign-up.json | 20 ++++++ ...-confirmation-confirm-forgot-password.json | 20 ++++++ .../cognito/pre-signup-admin-create-user.json | 25 ++++++++ .../verify-auth-challenge-response.json | 26 ++++++++ .../parser/tests/unit/schema/cognito.test.ts | 49 +++++++++++++++ 10 files changed, 282 insertions(+), 16 deletions(-) create mode 100644 packages/parser/tests/events/cognito/create-auth-challenge-first-call.json create mode 100644 packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json create mode 100644 packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json create mode 100644 packages/parser/tests/events/cognito/define-auth-challenge-first-call.json create mode 100644 packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json create mode 100644 packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json create mode 100644 packages/parser/tests/events/cognito/pre-signup-admin-create-user.json create mode 100644 packages/parser/tests/events/cognito/verify-auth-challenge-response.json diff --git a/packages/parser/src/schemas/cognito.ts b/packages/parser/src/schemas/cognito.ts index 085f5e8bae..7d2292c367 100644 --- a/packages/parser/src/schemas/cognito.ts +++ b/packages/parser/src/schemas/cognito.ts @@ -13,7 +13,8 @@ const CognitoTriggerBaseSchema = z.object({ userName: z.string().optional(), callerContext: z.object({ awsSdkVersion: z.string(), - clientId: z.string(), + // Admin API operations such as AdminConfirmSignUp send null + clientId: z.string().nullable(), }), request: z.object({}), response: z.object({}), @@ -55,7 +56,11 @@ const CognitoTriggerBaseSchema = z.object({ * @see {@link https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html | Amazon Cognito Developer Guide} */ const PreSignupTriggerSchema = CognitoTriggerBaseSchema.extend({ - triggerSource: z.literal('PreSignUp_SignUp'), + triggerSource: z.enum([ + 'PreSignUp_SignUp', + 'PreSignUp_AdminCreateUser', + 'PreSignUp_ExternalProvider', + ]), request: z.object({ userAttributes: z.record(z.string(), z.string()), validationData: z.record(z.string(), z.string()).nullable(), @@ -100,7 +105,10 @@ const PreSignupTriggerSchema = CognitoTriggerBaseSchema.extend({ * @see {@link https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-post-confirmation.html | Amazon Cognito Developer Guide} */ const PostConfirmationTriggerSchema = CognitoTriggerBaseSchema.extend({ - triggerSource: z.literal('PostConfirmation_ConfirmSignUp'), + triggerSource: z.enum([ + 'PostConfirmation_ConfirmSignUp', + 'PostConfirmation_ConfirmForgotPassword', + ]), request: z.object({ userAttributes: z.record(z.string(), z.string()), clientMetadata: z.record(z.string(), z.string()).optional(), @@ -397,19 +405,30 @@ const CustomMessageTriggerSchema = CognitoTriggerBaseSchema.extend({ * "code": "string", * "clientMetadata": { "string": "string" }, * "userAttributes": { "string": "string" } - * }, - * "response": {} + * } * } * ``` * * @see {@link https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-email-sender.html | Amazon Cognito Developer Guide} */ -const CustomEmailSenderTriggerSchema = CognitoTriggerBaseSchema.extend({ - triggerSource: z.literal('CustomEmailSender_SignUp'), +// Custom sender events have no response, since Cognito expects nothing back +const CustomEmailSenderTriggerSchema = CognitoTriggerBaseSchema.omit({ + response: true, +}).extend({ + triggerSource: z.enum([ + 'CustomEmailSender_SignUp', + 'CustomEmailSender_ResendCode', + 'CustomEmailSender_ForgotPassword', + 'CustomEmailSender_UpdateUserAttribute', + 'CustomEmailSender_VerifyUserAttribute', + 'CustomEmailSender_AdminCreateUser', + 'CustomEmailSender_Authentication', + 'CustomEmailSender_AccountTakeOverNotification', + ]), request: z.object({ type: z.literal('customEmailSenderRequestV1'), code: z.string(), - clientMetadata: z.record(z.string(), z.string()).optional(), + clientMetadata: z.record(z.string(), z.string()).nullish(), userAttributes: z.record(z.string(), z.string()), }), }); @@ -436,19 +455,28 @@ const CustomEmailSenderTriggerSchema = CognitoTriggerBaseSchema.extend({ * "string": "string" * }, * "userAttributes": { "string": "string" } - * }, - * "response": {} + * } * } * ``` * * @see {@link https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-sms-sender.html | Amazon Cognito Developer Guide} */ -const CustomSMSSenderTriggerSchema = CognitoTriggerBaseSchema.extend({ - triggerSource: z.literal('CustomSMSSender_SignUp'), +const CustomSMSSenderTriggerSchema = CognitoTriggerBaseSchema.omit({ + response: true, +}).extend({ + triggerSource: z.enum([ + 'CustomSMSSender_SignUp', + 'CustomSMSSender_ResendCode', + 'CustomSMSSender_ForgotPassword', + 'CustomSMSSender_UpdateUserAttribute', + 'CustomSMSSender_VerifyUserAttribute', + 'CustomSMSSender_AdminCreateUser', + 'CustomSMSSender_Authentication', + ]), request: z.object({ type: z.literal('customSMSSenderRequestV1'), code: z.string(), - clientMetadata: z.record(z.string(), z.string()).optional(), + clientMetadata: z.record(z.string(), z.string()).nullish(), userAttributes: z.record(z.string(), z.string()), }), }); @@ -513,7 +541,8 @@ const DefineAuthChallengeTriggerSchema = CognitoTriggerBaseSchema.extend({ triggerSource: z.literal('DefineAuthChallenge_Authentication'), request: z.object({ userAttributes: z.record(z.string(), z.string()), - session: z.array(ChallengeResultSchema).min(1), + // Empty on the first call of a custom auth flow without SRP + session: z.array(ChallengeResultSchema), clientMetadata: z.record(z.string(), z.string()).optional(), userNotFound: z.boolean().optional(), }), @@ -563,7 +592,8 @@ const CreateAuthChallengeTriggerSchema = CognitoTriggerBaseSchema.extend({ request: z.object({ userAttributes: z.record(z.string(), z.string()), challengeName: z.string(), - session: z.array(ChallengeResultSchema).min(1), + // Empty on the first call of a custom auth flow without SRP + session: z.array(ChallengeResultSchema), clientMetadata: z.record(z.string(), z.string()).optional(), userNotFound: z.boolean().optional(), }), @@ -614,7 +644,8 @@ const VerifyAuthChallengeTriggerSchema = CognitoTriggerBaseSchema.extend({ userNotFound: z.boolean().optional(), }), response: z.object({ - answerCorrect: z.boolean(), + // Cognito sends null; the function sets the verdict + answerCorrect: z.boolean().nullable(), }), }); diff --git a/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json b/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json new file mode 100644 index 0000000000..4a54eebe59 --- /dev/null +++ b/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json @@ -0,0 +1,26 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "example-client-id" + }, + "triggerSource": "CreateAuthChallenge_Authentication", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "challengeName": "CUSTOM_CHALLENGE", + "session": [] + }, + "response": { + "publicChallengeParameters": null, + "privateChallengeParameters": null, + "challengeMetadata": null + } +} diff --git a/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json b/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json new file mode 100644 index 0000000000..e32b4096c4 --- /dev/null +++ b/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json @@ -0,0 +1,22 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "CLIENT_ID_NOT_APPLICABLE" + }, + "triggerSource": "CustomEmailSender_AdminCreateUser", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "type": "customEmailSenderRequestV1", + "code": "AYADeIZczazd30Tm9/+4", + "clientMetadata": null + } +} diff --git a/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json b/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json new file mode 100644 index 0000000000..06ccd7d465 --- /dev/null +++ b/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json @@ -0,0 +1,22 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "example-client-id" + }, + "triggerSource": "CustomEmailSender_ForgotPassword", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "type": "customEmailSenderRequestV1", + "code": "AYADeIZczazd30Tm9/+4", + "clientMetadata": null + } +} diff --git a/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json b/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json new file mode 100644 index 0000000000..8f55a85b4d --- /dev/null +++ b/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json @@ -0,0 +1,25 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "example-client-id" + }, + "triggerSource": "DefineAuthChallenge_Authentication", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "session": [] + }, + "response": { + "challengeName": null, + "issueTokens": null, + "failAuthentication": null + } +} diff --git a/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json b/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json new file mode 100644 index 0000000000..1d00659f72 --- /dev/null +++ b/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json @@ -0,0 +1,20 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": null + }, + "triggerSource": "PostConfirmation_ConfirmSignUp", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + } + }, + "response": {} +} diff --git a/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json b/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json new file mode 100644 index 0000000000..d6c7066602 --- /dev/null +++ b/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json @@ -0,0 +1,20 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "example-client-id" + }, + "triggerSource": "PostConfirmation_ConfirmForgotPassword", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + } + }, + "response": {} +} diff --git a/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json b/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json new file mode 100644 index 0000000000..98b8aaaab3 --- /dev/null +++ b/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json @@ -0,0 +1,25 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "CLIENT_ID_NOT_APPLICABLE" + }, + "triggerSource": "PreSignUp_AdminCreateUser", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "validationData": null + }, + "response": { + "autoConfirmUser": false, + "autoVerifyEmail": false, + "autoVerifyPhone": false + } +} diff --git a/packages/parser/tests/events/cognito/verify-auth-challenge-response.json b/packages/parser/tests/events/cognito/verify-auth-challenge-response.json new file mode 100644 index 0000000000..511567081a --- /dev/null +++ b/packages/parser/tests/events/cognito/verify-auth-challenge-response.json @@ -0,0 +1,26 @@ +{ + "version": "1", + "region": "eu-west-1", + "userPoolId": "eu-west-1_EXAMPLE", + "userName": "user1", + "callerContext": { + "awsSdkVersion": "aws-sdk-unknown-unknown", + "clientId": "example-client-id" + }, + "triggerSource": "VerifyAuthChallengeResponse_Authentication", + "request": { + "userAttributes": { + "sub": "11111111-2222-3333-4444-555555555555", + "email_verified": "true", + "cognito:user_status": "CONFIRMED", + "email": "user@example.com" + }, + "privateChallengeParameters": { + "answer": "42" + }, + "challengeAnswer": "42" + }, + "response": { + "answerCorrect": null + } +} diff --git a/packages/parser/tests/unit/schema/cognito.test.ts b/packages/parser/tests/unit/schema/cognito.test.ts index 4e6c1e6040..0566b1ff58 100644 --- a/packages/parser/tests/unit/schema/cognito.test.ts +++ b/packages/parser/tests/unit/schema/cognito.test.ts @@ -21,6 +21,53 @@ describe('Schemas: Cognito User Pool', () => { filename: 'base', }); + it.each([ + { + filename: 'pre-signup-admin-create-user', + schema: PreSignupTriggerSchema, + }, + { + filename: 'post-confirmation-confirm-forgot-password', + schema: PostConfirmationTriggerSchema, + }, + { + filename: 'post-confirmation-admin-confirm-sign-up', + schema: PostConfirmationTriggerSchema, + }, + { + filename: 'custom-email-sender-forgot-password', + schema: CustomEmailSenderTriggerSchema, + }, + { + filename: 'custom-email-sender-admin-create-user', + schema: CustomEmailSenderTriggerSchema, + }, + { + filename: 'define-auth-challenge-first-call', + schema: DefineAuthChallengeTriggerSchema, + }, + { + filename: 'create-auth-challenge-first-call', + schema: CreateAuthChallengeTriggerSchema, + }, + { + filename: 'verify-auth-challenge-response', + schema: VerifyAuthChallengeTriggerSchema, + }, + ])( + 'parses the $filename event captured from a user pool', + ({ filename, schema }) => { + // Prepare + const event = getTestEvent({ eventsPath: 'cognito', filename }); + + // Act + const result = schema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + } + ); + it('parses a valid pre-signup event', () => { // Prepare const event = structuredClone(baseEvent); @@ -230,6 +277,7 @@ describe('Schemas: Cognito User Pool', () => { it('parses a valid custom message event with custom email sender', () => { // Prepare const event = structuredClone(baseEvent); + delete event.response; event.triggerSource = 'CustomEmailSender_SignUp'; event.request = { type: 'customEmailSenderRequestV1', @@ -261,6 +309,7 @@ describe('Schemas: Cognito User Pool', () => { it('parses a valid custom message event with custom SMS sender', () => { // Prepare const event = structuredClone(baseEvent); + delete event.response; event.triggerSource = 'CustomSMSSender_SignUp'; event.request = { type: 'customSMSSenderRequestV1', From 4072df8f78bc14fb3eed790d2ebcfacf867ad2d9 Mon Sep 17 00:00:00 2001 From: Vishwak Thatikonda Date: Mon, 5 Oct 2026 12:25:39 -0700 Subject: [PATCH 2/2] test(parser): derive the captured Cognito events from the base fixture Address review feedback: replace the eight fixture files with variants derived from the existing base fixture in the test, following the pattern of the AppSync schema tests. --- .../create-auth-challenge-first-call.json | 26 ---- ...custom-email-sender-admin-create-user.json | 22 ---- .../custom-email-sender-forgot-password.json | 22 ---- .../define-auth-challenge-first-call.json | 25 ---- ...st-confirmation-admin-confirm-sign-up.json | 20 --- ...-confirmation-confirm-forgot-password.json | 20 --- .../cognito/pre-signup-admin-create-user.json | 25 ---- .../verify-auth-challenge-response.json | 26 ---- .../parser/tests/unit/schema/cognito.test.ts | 116 +++++++++++++++--- 9 files changed, 101 insertions(+), 201 deletions(-) delete mode 100644 packages/parser/tests/events/cognito/create-auth-challenge-first-call.json delete mode 100644 packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json delete mode 100644 packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json delete mode 100644 packages/parser/tests/events/cognito/define-auth-challenge-first-call.json delete mode 100644 packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json delete mode 100644 packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json delete mode 100644 packages/parser/tests/events/cognito/pre-signup-admin-create-user.json delete mode 100644 packages/parser/tests/events/cognito/verify-auth-challenge-response.json diff --git a/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json b/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json deleted file mode 100644 index 4a54eebe59..0000000000 --- a/packages/parser/tests/events/cognito/create-auth-challenge-first-call.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "example-client-id" - }, - "triggerSource": "CreateAuthChallenge_Authentication", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "challengeName": "CUSTOM_CHALLENGE", - "session": [] - }, - "response": { - "publicChallengeParameters": null, - "privateChallengeParameters": null, - "challengeMetadata": null - } -} diff --git a/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json b/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json deleted file mode 100644 index e32b4096c4..0000000000 --- a/packages/parser/tests/events/cognito/custom-email-sender-admin-create-user.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "CLIENT_ID_NOT_APPLICABLE" - }, - "triggerSource": "CustomEmailSender_AdminCreateUser", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "type": "customEmailSenderRequestV1", - "code": "AYADeIZczazd30Tm9/+4", - "clientMetadata": null - } -} diff --git a/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json b/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json deleted file mode 100644 index 06ccd7d465..0000000000 --- a/packages/parser/tests/events/cognito/custom-email-sender-forgot-password.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "example-client-id" - }, - "triggerSource": "CustomEmailSender_ForgotPassword", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "type": "customEmailSenderRequestV1", - "code": "AYADeIZczazd30Tm9/+4", - "clientMetadata": null - } -} diff --git a/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json b/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json deleted file mode 100644 index 8f55a85b4d..0000000000 --- a/packages/parser/tests/events/cognito/define-auth-challenge-first-call.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "example-client-id" - }, - "triggerSource": "DefineAuthChallenge_Authentication", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "session": [] - }, - "response": { - "challengeName": null, - "issueTokens": null, - "failAuthentication": null - } -} diff --git a/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json b/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json deleted file mode 100644 index 1d00659f72..0000000000 --- a/packages/parser/tests/events/cognito/post-confirmation-admin-confirm-sign-up.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": null - }, - "triggerSource": "PostConfirmation_ConfirmSignUp", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json b/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json deleted file mode 100644 index d6c7066602..0000000000 --- a/packages/parser/tests/events/cognito/post-confirmation-confirm-forgot-password.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "example-client-id" - }, - "triggerSource": "PostConfirmation_ConfirmForgotPassword", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - } - }, - "response": {} -} diff --git a/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json b/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json deleted file mode 100644 index 98b8aaaab3..0000000000 --- a/packages/parser/tests/events/cognito/pre-signup-admin-create-user.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "CLIENT_ID_NOT_APPLICABLE" - }, - "triggerSource": "PreSignUp_AdminCreateUser", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "validationData": null - }, - "response": { - "autoConfirmUser": false, - "autoVerifyEmail": false, - "autoVerifyPhone": false - } -} diff --git a/packages/parser/tests/events/cognito/verify-auth-challenge-response.json b/packages/parser/tests/events/cognito/verify-auth-challenge-response.json deleted file mode 100644 index 511567081a..0000000000 --- a/packages/parser/tests/events/cognito/verify-auth-challenge-response.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "version": "1", - "region": "eu-west-1", - "userPoolId": "eu-west-1_EXAMPLE", - "userName": "user1", - "callerContext": { - "awsSdkVersion": "aws-sdk-unknown-unknown", - "clientId": "example-client-id" - }, - "triggerSource": "VerifyAuthChallengeResponse_Authentication", - "request": { - "userAttributes": { - "sub": "11111111-2222-3333-4444-555555555555", - "email_verified": "true", - "cognito:user_status": "CONFIRMED", - "email": "user@example.com" - }, - "privateChallengeParameters": { - "answer": "42" - }, - "challengeAnswer": "42" - }, - "response": { - "answerCorrect": null - } -} diff --git a/packages/parser/tests/unit/schema/cognito.test.ts b/packages/parser/tests/unit/schema/cognito.test.ts index 0566b1ff58..4cef95ccfd 100644 --- a/packages/parser/tests/unit/schema/cognito.test.ts +++ b/packages/parser/tests/unit/schema/cognito.test.ts @@ -13,7 +13,7 @@ import { PreTokenGenerationTriggerSchemaV1, VerifyAuthChallengeTriggerSchema, } from '../../../src/schemas/cognito.js'; -import { getTestEvent } from '../helpers/utils.js'; +import { getTestEvent, omit } from '../helpers/utils.js'; describe('Schemas: Cognito User Pool', () => { const baseEvent = getTestEvent({ @@ -21,45 +21,131 @@ describe('Schemas: Cognito User Pool', () => { filename: 'base', }); - it.each([ + // Shapes captured from a live user pool, derived from the base event + const userAttributes = { + sub: '11111111-2222-3333-4444-555555555555', + email_verified: 'true', + 'cognito:user_status': 'CONFIRMED', + email: 'user@example.com', + }; + const adminCallerContext = { + awsSdkVersion: 'aws-sdk-unknown-unknown', + clientId: 'CLIENT_ID_NOT_APPLICABLE', + }; + const customEmailSenderRequest = { + userAttributes, + type: 'customEmailSenderRequestV1', + code: 'AYADeIZczazd30Tm9/+4', + clientMetadata: null, + }; + const capturedEvents = [ { - filename: 'pre-signup-admin-create-user', + name: 'PreSignUp_AdminCreateUser', schema: PreSignupTriggerSchema, + event: { + ...baseEvent, + callerContext: adminCallerContext, + triggerSource: 'PreSignUp_AdminCreateUser', + request: { userAttributes, validationData: null }, + response: { + autoConfirmUser: false, + autoVerifyEmail: false, + autoVerifyPhone: false, + }, + }, }, { - filename: 'post-confirmation-confirm-forgot-password', + name: 'PostConfirmation_ConfirmForgotPassword', schema: PostConfirmationTriggerSchema, + event: { + ...baseEvent, + triggerSource: 'PostConfirmation_ConfirmForgotPassword', + request: { userAttributes }, + }, }, { - filename: 'post-confirmation-admin-confirm-sign-up', + name: 'PostConfirmation_ConfirmSignUp (admin-confirm-sign-up)', schema: PostConfirmationTriggerSchema, + event: { + ...baseEvent, + callerContext: { + awsSdkVersion: 'aws-sdk-unknown-unknown', + clientId: null, + }, + triggerSource: 'PostConfirmation_ConfirmSignUp', + request: { userAttributes }, + }, }, { - filename: 'custom-email-sender-forgot-password', + name: 'CustomEmailSender_ForgotPassword', schema: CustomEmailSenderTriggerSchema, + event: { + ...omit(['response'], baseEvent), + triggerSource: 'CustomEmailSender_ForgotPassword', + request: customEmailSenderRequest, + }, }, { - filename: 'custom-email-sender-admin-create-user', + name: 'CustomEmailSender_AdminCreateUser', schema: CustomEmailSenderTriggerSchema, + event: { + ...omit(['response'], baseEvent), + callerContext: adminCallerContext, + triggerSource: 'CustomEmailSender_AdminCreateUser', + request: customEmailSenderRequest, + }, }, { - filename: 'define-auth-challenge-first-call', + name: 'DefineAuthChallenge_Authentication (first call)', schema: DefineAuthChallengeTriggerSchema, + event: { + ...baseEvent, + triggerSource: 'DefineAuthChallenge_Authentication', + request: { userAttributes, session: [] }, + response: { + challengeName: null, + issueTokens: null, + failAuthentication: null, + }, + }, }, { - filename: 'create-auth-challenge-first-call', + name: 'CreateAuthChallenge_Authentication (first call)', schema: CreateAuthChallengeTriggerSchema, + event: { + ...baseEvent, + triggerSource: 'CreateAuthChallenge_Authentication', + request: { + userAttributes, + challengeName: 'CUSTOM_CHALLENGE', + session: [], + }, + response: { + publicChallengeParameters: null, + privateChallengeParameters: null, + challengeMetadata: null, + }, + }, }, { - filename: 'verify-auth-challenge-response', + name: 'VerifyAuthChallengeResponse_Authentication', schema: VerifyAuthChallengeTriggerSchema, + event: { + ...baseEvent, + triggerSource: 'VerifyAuthChallengeResponse_Authentication', + request: { + userAttributes, + privateChallengeParameters: { answer: '42' }, + challengeAnswer: '42', + }, + response: { answerCorrect: null }, + }, }, - ])( - 'parses the $filename event captured from a user pool', - ({ filename, schema }) => { - // Prepare - const event = getTestEvent({ eventsPath: 'cognito', filename }); + ]; + it.each(capturedEvents)( + 'parses a $name event captured from a user pool', + ({ schema, event }) => { // Act const result = schema.parse(event);