From 5f34b3e653769e30dd258afd2a54da402f806c22 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 17:14:54 -0300 Subject: [PATCH 01/13] Add events for `EmailVerification` entity --- src/common/interfaces/event.interface.ts | 31 +++++++++++++++++++ src/common/serializers/event.serializer.ts | 13 ++++++++ .../email-verification.interface.ts | 27 ++++++++++++++++ src/user-management/interfaces/index.ts | 1 + .../email-verification.serializer.ts | 26 ++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 src/user-management/interfaces/email-verification.interface.ts create mode 100644 src/user-management/serializers/email-verification.serializer.ts diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 51b333c3a..e8cfc7053 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -13,6 +13,10 @@ import { User, UserResponse, } from '../../user-management/interfaces'; +import { + EmailVerification, + EmailVerificationResponse, +} from '../../user-management/interfaces/email-verification.interface'; import { OrganizationMembership, OrganizationMembershipResponse, @@ -28,6 +32,29 @@ interface EventResponseBase { created_at: string; } +export interface AuthenticationEmailVerificationFailedEvent extends EventBase { + event: 'authentication.email_verification_failed'; + data: EmailVerification; +} + +export interface AuthenticationEmailVerificationFailedEventResponse + extends EventResponseBase { + event: 'authentication.email_verification_failed'; + data: EmailVerificationResponse; +} + +export interface AuthenticationEmailVerificationSucceededEvent + extends EventBase { + event: 'authentication.email_verification_succeeded'; + data: EmailVerification; +} + +export interface AuthenticationEmailVerificationSucceededEventResponse + extends EventResponseBase { + event: 'authentication.email_verification_succeeded'; + data: EmailVerificationResponse; +} + export interface ConnectionActivatedEvent extends EventBase { event: 'connection.activated'; data: Connection; @@ -257,6 +284,8 @@ export interface SessionCreatedEventResponse extends EventResponseBase { } export type Event = + | AuthenticationEmailVerificationFailedEvent + | AuthenticationEmailVerificationSucceededEvent | ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent @@ -280,6 +309,8 @@ export type Event = | SessionCreatedEvent; export type EventResponse = + | AuthenticationEmailVerificationFailedEventResponse + | AuthenticationEmailVerificationSucceededEventResponse | ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index ba0957cf9..22995d12b 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -8,6 +8,7 @@ import { } from '../../directory-sync/serializers'; import { deserializeConnection } from '../../sso/serializers'; import { deserializeUser } from '../../user-management/serializers'; +import { deserializeEmailVerification } from '../../user-management/serializers/email-verification.serializer'; import { deserializeOrganizationMembership } from '../../user-management/serializers/organization-membership.serializer'; import { deserializeSession } from '../../user-management/serializers/session.serializer'; import { Event, EventBase, EventResponse } from '../interfaces'; @@ -19,6 +20,18 @@ export const deserializeEvent = (event: EventResponse): Event => { }; switch (event.event) { + case 'authentication.email_verification_failed': + return { + ...eventBase, + event: event.event, + data: deserializeEmailVerification(event.data), + }; + case 'authentication.email_verification_succeeded': + return { + ...eventBase, + event: event.event, + data: deserializeEmailVerification(event.data), + }; case 'connection.activated': case 'connection.deactivated': case 'connection.deleted': diff --git a/src/user-management/interfaces/email-verification.interface.ts b/src/user-management/interfaces/email-verification.interface.ts new file mode 100644 index 000000000..287f08c97 --- /dev/null +++ b/src/user-management/interfaces/email-verification.interface.ts @@ -0,0 +1,27 @@ +type EmailVerificationStatus = + | { + status: 'succeeded'; + } + | { + status: 'failed'; + error: { + code: string; + message: string; + }; + }; + +export type EmailVerification = { + object: 'email_verification'; + email: string; + ipAddress: string | null; + userAgent: string | null; + userId: string | null; +} & EmailVerificationStatus; + +export type EmailVerificationResponse = { + object: 'email_verification'; + email: string; + ip_address: string | null; + user_agent: string | null; + user_id: string | null; +} & EmailVerificationStatus; diff --git a/src/user-management/interfaces/index.ts b/src/user-management/interfaces/index.ts index ba04d6835..5ce3bfb57 100644 --- a/src/user-management/interfaces/index.ts +++ b/src/user-management/interfaces/index.ts @@ -4,6 +4,7 @@ export * from './authenticate-with-code-options.interface'; export * from './authenticate-with-refresh-token-options.interface'; export * from './authenticate-with-totp-options.interface'; export * from './authentication-response.interface'; +export * from './email-verification.interface'; export * from './reset-password-options.interface'; export * from './send-password-reset-email-options.interface'; export * from './create-user-options.interface'; diff --git a/src/user-management/serializers/email-verification.serializer.ts b/src/user-management/serializers/email-verification.serializer.ts new file mode 100644 index 000000000..6185c90e9 --- /dev/null +++ b/src/user-management/serializers/email-verification.serializer.ts @@ -0,0 +1,26 @@ +import { EmailVerification, EmailVerificationResponse } from '../interfaces'; + +export const deserializeEmailVerification = ( + emailVerification: EmailVerificationResponse, +): EmailVerification => { + const commonProperties = { + object: 'email_verification', + email: emailVerification.email, + ipAddress: emailVerification.ip_address, + userAgent: emailVerification.user_agent, + userId: emailVerification.user_id, + } as const; + + if (emailVerification.status === 'failed') { + return { + ...commonProperties, + status: emailVerification.status, + error: emailVerification.error, + }; + } + + return { + ...commonProperties, + status: emailVerification.status, + }; +}; From 278f3c838e5f58160369dfc2d1b136360ef9f065 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 17:29:05 -0300 Subject: [PATCH 02/13] Move event interfaces to a separate module --- src/common/interfaces/event.interface.ts | 6 ++---- ...tion.interface.ts => authentication-events.interface.ts} | 6 +++--- src/user-management/interfaces/index.ts | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) rename src/user-management/interfaces/{email-verification.interface.ts => authentication-events.interface.ts} (84%) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index e8cfc7053..9881c64be 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -8,15 +8,13 @@ import { } from '../../directory-sync/interfaces'; import { Connection, ConnectionResponse } from '../../sso/interfaces'; import { + EmailVerification, + EmailVerificationResponse, Session, SessionResponse, User, UserResponse, } from '../../user-management/interfaces'; -import { - EmailVerification, - EmailVerificationResponse, -} from '../../user-management/interfaces/email-verification.interface'; import { OrganizationMembership, OrganizationMembershipResponse, diff --git a/src/user-management/interfaces/email-verification.interface.ts b/src/user-management/interfaces/authentication-events.interface.ts similarity index 84% rename from src/user-management/interfaces/email-verification.interface.ts rename to src/user-management/interfaces/authentication-events.interface.ts index 287f08c97..2edf22452 100644 --- a/src/user-management/interfaces/email-verification.interface.ts +++ b/src/user-management/interfaces/authentication-events.interface.ts @@ -1,4 +1,4 @@ -type EmailVerificationStatus = +type EventStatus = | { status: 'succeeded'; } @@ -16,7 +16,7 @@ export type EmailVerification = { ipAddress: string | null; userAgent: string | null; userId: string | null; -} & EmailVerificationStatus; +} & EventStatus; export type EmailVerificationResponse = { object: 'email_verification'; @@ -24,4 +24,4 @@ export type EmailVerificationResponse = { ip_address: string | null; user_agent: string | null; user_id: string | null; -} & EmailVerificationStatus; +} & EventStatus; diff --git a/src/user-management/interfaces/index.ts b/src/user-management/interfaces/index.ts index 5ce3bfb57..c0bcbc2bb 100644 --- a/src/user-management/interfaces/index.ts +++ b/src/user-management/interfaces/index.ts @@ -1,10 +1,10 @@ +export * from './authentication-events.interface'; export * from './authenticate-with-magic-auth-options.interface'; export * from './authenticate-with-password-options.interface'; export * from './authenticate-with-code-options.interface'; export * from './authenticate-with-refresh-token-options.interface'; export * from './authenticate-with-totp-options.interface'; export * from './authentication-response.interface'; -export * from './email-verification.interface'; export * from './reset-password-options.interface'; export * from './send-password-reset-email-options.interface'; export * from './create-user-options.interface'; From 0c3e2b10dc0d20413e8d70558b8649e124bb28fd Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 18:51:54 -0300 Subject: [PATCH 03/13] Add common interface for authentication events --- src/common/serializers/event.serializer.ts | 6 ++--- .../authentication-event.interface.ts | 24 +++++++++++++++++ .../authentication-events.interface.ts | 27 ------------------- src/user-management/interfaces/index.ts | 2 +- .../authentication-event.serializer.ts | 12 +++++++++ .../email-verification.serializer.ts | 26 ------------------ 6 files changed, 40 insertions(+), 57 deletions(-) create mode 100644 src/user-management/interfaces/authentication-event.interface.ts delete mode 100644 src/user-management/interfaces/authentication-events.interface.ts create mode 100644 src/user-management/serializers/authentication-event.serializer.ts delete mode 100644 src/user-management/serializers/email-verification.serializer.ts diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index 22995d12b..40421e8cb 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -8,7 +8,7 @@ import { } from '../../directory-sync/serializers'; import { deserializeConnection } from '../../sso/serializers'; import { deserializeUser } from '../../user-management/serializers'; -import { deserializeEmailVerification } from '../../user-management/serializers/email-verification.serializer'; +import { deserializeAuthenticationEvent } from '../../user-management/serializers/authentication-event.serializer'; import { deserializeOrganizationMembership } from '../../user-management/serializers/organization-membership.serializer'; import { deserializeSession } from '../../user-management/serializers/session.serializer'; import { Event, EventBase, EventResponse } from '../interfaces'; @@ -24,13 +24,13 @@ export const deserializeEvent = (event: EventResponse): Event => { return { ...eventBase, event: event.event, - data: deserializeEmailVerification(event.data), + data: deserializeAuthenticationEvent(event.data), }; case 'authentication.email_verification_succeeded': return { ...eventBase, event: event.event, - data: deserializeEmailVerification(event.data), + data: deserializeAuthenticationEvent(event.data), }; case 'connection.activated': case 'connection.deactivated': diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts new file mode 100644 index 000000000..69a7f7b5a --- /dev/null +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -0,0 +1,24 @@ +interface AuthenticationEventError { + code: string; + message: string; +} + +type AuthenticationEventType = 'email_verification' | 'magic_auth' | 'mfa' | 'oauth' | 'password' | 'sso' + +export interface AuthenticationEvent { + type: AuthenticationEventType; + email: string; + ipAddress: string | null; + userAgent: string | null; + userId: string | null; + error?: AuthenticationEventError; +} + +export interface AuthenticationEventResponse { + type: AuthenticationEventType; + email: string; + ip_address: string | null; + user_agent: string | null; + user_id: string | null; + error?: AuthenticationEventError; +} diff --git a/src/user-management/interfaces/authentication-events.interface.ts b/src/user-management/interfaces/authentication-events.interface.ts deleted file mode 100644 index 2edf22452..000000000 --- a/src/user-management/interfaces/authentication-events.interface.ts +++ /dev/null @@ -1,27 +0,0 @@ -type EventStatus = - | { - status: 'succeeded'; - } - | { - status: 'failed'; - error: { - code: string; - message: string; - }; - }; - -export type EmailVerification = { - object: 'email_verification'; - email: string; - ipAddress: string | null; - userAgent: string | null; - userId: string | null; -} & EventStatus; - -export type EmailVerificationResponse = { - object: 'email_verification'; - email: string; - ip_address: string | null; - user_agent: string | null; - user_id: string | null; -} & EventStatus; diff --git a/src/user-management/interfaces/index.ts b/src/user-management/interfaces/index.ts index c0bcbc2bb..fc8f1349e 100644 --- a/src/user-management/interfaces/index.ts +++ b/src/user-management/interfaces/index.ts @@ -1,4 +1,4 @@ -export * from './authentication-events.interface'; +export * from './authentication-event.interface'; export * from './authenticate-with-magic-auth-options.interface'; export * from './authenticate-with-password-options.interface'; export * from './authenticate-with-code-options.interface'; diff --git a/src/user-management/serializers/authentication-event.serializer.ts b/src/user-management/serializers/authentication-event.serializer.ts new file mode 100644 index 000000000..a5ff678a5 --- /dev/null +++ b/src/user-management/serializers/authentication-event.serializer.ts @@ -0,0 +1,12 @@ +import { AuthenticationEvent, AuthenticationEventResponse } from "../interfaces"; + +export const deserializeAuthenticationEvent = ( + authenticationEvent: AuthenticationEventResponse, +): AuthenticationEvent => ({ + type: authenticationEvent.type, + email: authenticationEvent.email, + ipAddress: authenticationEvent.ip_address, + userAgent: authenticationEvent.user_agent, + userId: authenticationEvent.user_id, + error: authenticationEvent.error, +}); diff --git a/src/user-management/serializers/email-verification.serializer.ts b/src/user-management/serializers/email-verification.serializer.ts deleted file mode 100644 index 6185c90e9..000000000 --- a/src/user-management/serializers/email-verification.serializer.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { EmailVerification, EmailVerificationResponse } from '../interfaces'; - -export const deserializeEmailVerification = ( - emailVerification: EmailVerificationResponse, -): EmailVerification => { - const commonProperties = { - object: 'email_verification', - email: emailVerification.email, - ipAddress: emailVerification.ip_address, - userAgent: emailVerification.user_agent, - userId: emailVerification.user_id, - } as const; - - if (emailVerification.status === 'failed') { - return { - ...commonProperties, - status: emailVerification.status, - error: emailVerification.error, - }; - } - - return { - ...commonProperties, - status: emailVerification.status, - }; -}; From f8af2e4badd2752bdefb1745f0b7991cef9502d9 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 18:55:44 -0300 Subject: [PATCH 04/13] Pass event type as generic argument --- src/common/interfaces/event.interface.ts | 12 +++++----- .../authentication-event.interface.ts | 22 +++++++++++++------ .../authentication-event.serializer.ts | 14 ++++++++---- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 9881c64be..43ced3c24 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -8,8 +8,8 @@ import { } from '../../directory-sync/interfaces'; import { Connection, ConnectionResponse } from '../../sso/interfaces'; import { - EmailVerification, - EmailVerificationResponse, + AuthenticationEvent, + AuthenticationEventResponse, Session, SessionResponse, User, @@ -32,25 +32,25 @@ interface EventResponseBase { export interface AuthenticationEmailVerificationFailedEvent extends EventBase { event: 'authentication.email_verification_failed'; - data: EmailVerification; + data: AuthenticationEvent<'email_verification'>; } export interface AuthenticationEmailVerificationFailedEventResponse extends EventResponseBase { event: 'authentication.email_verification_failed'; - data: EmailVerificationResponse; + data: AuthenticationEventResponse<'email_verification'>; } export interface AuthenticationEmailVerificationSucceededEvent extends EventBase { event: 'authentication.email_verification_succeeded'; - data: EmailVerification; + data: AuthenticationEvent<'email_verification'>; } export interface AuthenticationEmailVerificationSucceededEventResponse extends EventResponseBase { event: 'authentication.email_verification_succeeded'; - data: EmailVerificationResponse; + data: AuthenticationEventResponse<'email_verification'>; } export interface ConnectionActivatedEvent extends EventBase { diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index 69a7f7b5a..a40bf489d 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -3,22 +3,30 @@ interface AuthenticationEventError { message: string; } -type AuthenticationEventType = 'email_verification' | 'magic_auth' | 'mfa' | 'oauth' | 'password' | 'sso' +export type AuthenticationEventType = + | 'email_verification' + | 'magic_auth' + | 'mfa' + | 'oauth' + | 'password' + | 'sso'; -export interface AuthenticationEvent { - type: AuthenticationEventType; +export interface AuthenticationEvent { + type: T; email: string; ipAddress: string | null; userAgent: string | null; userId: string | null; error?: AuthenticationEventError; -} +} -export interface AuthenticationEventResponse { - type: AuthenticationEventType; +export interface AuthenticationEventResponse< + T extends AuthenticationEventType, +> { + type: T; email: string; ip_address: string | null; user_agent: string | null; user_id: string | null; error?: AuthenticationEventError; -} +} diff --git a/src/user-management/serializers/authentication-event.serializer.ts b/src/user-management/serializers/authentication-event.serializer.ts index a5ff678a5..afd240a6b 100644 --- a/src/user-management/serializers/authentication-event.serializer.ts +++ b/src/user-management/serializers/authentication-event.serializer.ts @@ -1,8 +1,14 @@ -import { AuthenticationEvent, AuthenticationEventResponse } from "../interfaces"; +import { + AuthenticationEvent, + AuthenticationEventResponse, + AuthenticationEventType, +} from '../interfaces'; -export const deserializeAuthenticationEvent = ( - authenticationEvent: AuthenticationEventResponse, -): AuthenticationEvent => ({ +export const deserializeAuthenticationEvent = < + T extends AuthenticationEventType, +>( + authenticationEvent: AuthenticationEventResponse, +): AuthenticationEvent => ({ type: authenticationEvent.type, email: authenticationEvent.email, ipAddress: authenticationEvent.ip_address, From 58dc61081dfd28e5d74b2cb1feba96877dd47612 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:07:52 -0300 Subject: [PATCH 05/13] Add `authentication.mfa` events --- src/common/interfaces/event.interface.ts | 26 ++++++++++++++++++++++ src/common/serializers/event.serializer.ts | 4 +++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 43ced3c24..674039713 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -53,6 +53,28 @@ export interface AuthenticationEmailVerificationSucceededEventResponse data: AuthenticationEventResponse<'email_verification'>; } +export interface AuthenticationMfaSucceededEvent extends EventBase { + event: 'authentication.mfa_succeeded'; + data: AuthenticationEvent<'mfa'>; +} + +export interface AuthenticationMfaSucceededEventResponse + extends EventResponseBase { + event: 'authentication.mfa_succeeded'; + data: AuthenticationEventResponse<'mfa'>; +} + +export interface AuthenticationMfaFailedEvent extends EventBase { + event: 'authentication.mfa_failed'; + data: AuthenticationEvent<'mfa'>; +} + +export interface AuthenticationMfaFailedEventResponse + extends EventResponseBase { + event: 'authentication.mfa_failed'; + data: AuthenticationEventResponse<'mfa'>; +} + export interface ConnectionActivatedEvent extends EventBase { event: 'connection.activated'; data: Connection; @@ -284,6 +306,8 @@ export interface SessionCreatedEventResponse extends EventResponseBase { export type Event = | AuthenticationEmailVerificationFailedEvent | AuthenticationEmailVerificationSucceededEvent + | AuthenticationMfaFailedEvent + | AuthenticationMfaSucceededEvent | ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent @@ -309,6 +333,8 @@ export type Event = export type EventResponse = | AuthenticationEmailVerificationFailedEventResponse | AuthenticationEmailVerificationSucceededEventResponse + | AuthenticationMfaFailedEventResponse + | AuthenticationMfaSucceededEventResponse | ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index 40421e8cb..0ce9e0d78 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -21,12 +21,14 @@ export const deserializeEvent = (event: EventResponse): Event => { switch (event.event) { case 'authentication.email_verification_failed': + case 'authentication.email_verification_succeeded': return { ...eventBase, event: event.event, data: deserializeAuthenticationEvent(event.data), }; - case 'authentication.email_verification_succeeded': + case 'authentication.mfa_failed': + case 'authentication.mfa_succeeded': return { ...eventBase, event: event.event, From fc91eb46ff2f664888843ed82a52bbc8c206f903 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:14:40 -0300 Subject: [PATCH 06/13] Add OAuth authentication events --- src/common/interfaces/event.interface.ts | 32 ++++++++++++++++++++++ src/common/serializers/event.serializer.ts | 7 +++++ 2 files changed, 39 insertions(+) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 674039713..0379d071f 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -75,6 +75,34 @@ export interface AuthenticationMfaFailedEventResponse data: AuthenticationEventResponse<'mfa'>; } +export interface AuthenticationOAuthFailedEventResponse + extends EventResponseBase { + event: 'authentication.oauth_failed'; + data: AuthenticationEventResponse<'oauth'>; +} + +export interface AuthenticationOAuthSucceededEvent extends EventBase { + event: 'authentication.oauth_succeeded'; + data: AuthenticationEvent<'oauth'>; +} + +export interface AuthenticationOAuthSucceededEventResponse + extends EventResponseBase { + event: 'authentication.oauth_succeeded'; + data: AuthenticationEventResponse<'oauth'>; +} + +export interface AuthenticationOAuthFailedEvent extends EventBase { + event: 'authentication.oauth_failed'; + data: AuthenticationEvent<'oauth'>; +} + +export interface AuthenticationOAuthFailedEventResponse + extends EventResponseBase { + event: 'authentication.oauth_failed'; + data: AuthenticationEventResponse<'oauth'>; +} + export interface ConnectionActivatedEvent extends EventBase { event: 'connection.activated'; data: Connection; @@ -308,6 +336,8 @@ export type Event = | AuthenticationEmailVerificationSucceededEvent | AuthenticationMfaFailedEvent | AuthenticationMfaSucceededEvent + | AuthenticationOAuthFailedEvent + | AuthenticationOAuthSucceededEvent | ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent @@ -335,6 +365,8 @@ export type EventResponse = | AuthenticationEmailVerificationSucceededEventResponse | AuthenticationMfaFailedEventResponse | AuthenticationMfaSucceededEventResponse + | AuthenticationOAuthFailedEventResponse + | AuthenticationOAuthSucceededEventResponse | ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index 0ce9e0d78..09496451f 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -34,6 +34,13 @@ export const deserializeEvent = (event: EventResponse): Event => { event: event.event, data: deserializeAuthenticationEvent(event.data), }; + case 'authentication.oauth_failed': + case 'authentication.oauth_succeeded': + return { + ...eventBase, + event: event.event, + data: deserializeAuthenticationEvent(event.data), + }; case 'connection.activated': case 'connection.deactivated': case 'connection.deleted': From da36218c655bd17e1eba48b97b84dea97733b19d Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Mon, 25 Mar 2024 19:17:38 -0300 Subject: [PATCH 07/13] Add SSO authentication events --- src/common/interfaces/event.interface.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 0379d071f..1e7518cfe 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -103,6 +103,30 @@ export interface AuthenticationOAuthFailedEventResponse data: AuthenticationEventResponse<'oauth'>; } +export interface AuthenticationSSOSucceededEvent extends EventBase { + event: 'authentication.sso_succeeded'; + data: AuthenticationEvent<'sso'>; +} + +export interface AuthenticationSSOSucceededEventResponse + extends EventResponseBase { + event: 'authentication.sso_succeeded'; + data: AuthenticationEventResponse<'sso'>; +} + + +export interface AuthenticationSSOFailedEvent extends EventBase { + event: 'authentication.sso_failed'; + data: AuthenticationEvent<'sso'>; +} + +export interface AuthenticationSSOFailedEventResponse + extends EventResponseBase { + event: 'authentication.sso_failed'; + data: AuthenticationEventResponse<'sso'>; +} + + export interface ConnectionActivatedEvent extends EventBase { event: 'connection.activated'; data: Connection; From 39fdd375ae77605facb75fe92876b675fc9fc351 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 26 Mar 2024 14:47:30 -0300 Subject: [PATCH 08/13] Introduce payloads per type --- .../authentication-event.interface.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index a40bf489d..fa38c6d95 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -3,22 +3,25 @@ interface AuthenticationEventError { message: string; } -export type AuthenticationEventType = - | 'email_verification' - | 'magic_auth' - | 'mfa' - | 'oauth' - | 'password' - | 'sso'; +interface AuthenticationEventTypes { + 'sso': {}, + 'password': {}, + 'oauth': {}, + 'mfa': {}, + 'magic_auth': {}, + 'email_verification': {}, +} + +export type AuthenticationEventType = keyof AuthenticationEventTypes; -export interface AuthenticationEvent { +export type AuthenticationEvent = { type: T; email: string; ipAddress: string | null; userAgent: string | null; userId: string | null; error?: AuthenticationEventError; -} +} & Partial> export interface AuthenticationEventResponse< T extends AuthenticationEventType, From 6c82febbdaa1de7ebe6978d98b5966ac0af97a51 Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 26 Mar 2024 15:46:55 -0300 Subject: [PATCH 09/13] Update types and cover all authentication events --- src/common/interfaces/event.interface.ts | 108 +++++++++++++----- src/common/serializers/event.serializer.ts | 16 +-- .../authentication-event.interface.ts | 33 +++--- .../authentication-event.serializer.ts | 9 +- 4 files changed, 101 insertions(+), 65 deletions(-) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 1e7518cfe..8c3c0e0e1 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -32,100 +32,136 @@ interface EventResponseBase { export interface AuthenticationEmailVerificationFailedEvent extends EventBase { event: 'authentication.email_verification_failed'; - data: AuthenticationEvent<'email_verification'>; + data: AuthenticationEvent; } export interface AuthenticationEmailVerificationFailedEventResponse extends EventResponseBase { event: 'authentication.email_verification_failed'; - data: AuthenticationEventResponse<'email_verification'>; + data: AuthenticationEventResponse; } export interface AuthenticationEmailVerificationSucceededEvent extends EventBase { event: 'authentication.email_verification_succeeded'; - data: AuthenticationEvent<'email_verification'>; + data: AuthenticationEvent; } export interface AuthenticationEmailVerificationSucceededEventResponse extends EventResponseBase { event: 'authentication.email_verification_succeeded'; - data: AuthenticationEventResponse<'email_verification'>; + data: AuthenticationEventResponse; } -export interface AuthenticationMfaSucceededEvent extends EventBase { - event: 'authentication.mfa_succeeded'; - data: AuthenticationEvent<'mfa'>; +export interface AuthenticationMagicAuthFailedEvent extends EventBase { + event: 'authentication.magic_auth_failed'; + data: AuthenticationEvent; } -export interface AuthenticationMfaSucceededEventResponse +export interface AuthenticationMagicAuthFailedEventResponse extends EventResponseBase { - event: 'authentication.mfa_succeeded'; - data: AuthenticationEventResponse<'mfa'>; + event: 'authentication.magic_auth_failed'; + data: AuthenticationEventResponse; +} + +export interface AuthenticationMagicAuthSucceededEvent extends EventBase { + event: 'authentication.magic_auth_succeeded'; + data: AuthenticationEvent; +} + +export interface AuthenticationMagicAuthSucceededEventResponse + extends EventResponseBase { + event: 'authentication.magic_auth_succeeded'; + data: AuthenticationEventResponse; } export interface AuthenticationMfaFailedEvent extends EventBase { event: 'authentication.mfa_failed'; - data: AuthenticationEvent<'mfa'>; + data: AuthenticationEvent; } export interface AuthenticationMfaFailedEventResponse extends EventResponseBase { event: 'authentication.mfa_failed'; - data: AuthenticationEventResponse<'mfa'>; + data: AuthenticationEventResponse; +} + +export interface AuthenticationMfaSucceededEvent extends EventBase { + event: 'authentication.mfa_succeeded'; + data: AuthenticationEvent; +} + +export interface AuthenticationMfaSucceededEventResponse + extends EventResponseBase { + event: 'authentication.mfa_succeeded'; + data: AuthenticationEventResponse; +} + +export interface AuthenticationOAuthFailedEvent extends EventBase { + event: 'authentication.oauth_failed'; + data: AuthenticationEvent; } export interface AuthenticationOAuthFailedEventResponse extends EventResponseBase { event: 'authentication.oauth_failed'; - data: AuthenticationEventResponse<'oauth'>; + data: AuthenticationEventResponse; } export interface AuthenticationOAuthSucceededEvent extends EventBase { event: 'authentication.oauth_succeeded'; - data: AuthenticationEvent<'oauth'>; + data: AuthenticationEvent; } export interface AuthenticationOAuthSucceededEventResponse extends EventResponseBase { event: 'authentication.oauth_succeeded'; - data: AuthenticationEventResponse<'oauth'>; + data: AuthenticationEventResponse; } -export interface AuthenticationOAuthFailedEvent extends EventBase { - event: 'authentication.oauth_failed'; - data: AuthenticationEvent<'oauth'>; +export interface AuthenticationPasswordFailedEvent extends EventBase { + event: 'authentication.password_failed'; + data: AuthenticationEvent; } -export interface AuthenticationOAuthFailedEventResponse +export interface AuthenticationPasswordFailedEventResponse extends EventResponseBase { - event: 'authentication.oauth_failed'; - data: AuthenticationEventResponse<'oauth'>; + event: 'authentication.password_failed'; + data: AuthenticationEventResponse; } -export interface AuthenticationSSOSucceededEvent extends EventBase { - event: 'authentication.sso_succeeded'; - data: AuthenticationEvent<'sso'>; +export interface AuthenticationPasswordSucceededEvent extends EventBase { + event: 'authentication.password_succeeded'; + data: AuthenticationEvent; } -export interface AuthenticationSSOSucceededEventResponse +export interface AuthenticationPasswordSucceededEventResponse extends EventResponseBase { - event: 'authentication.sso_succeeded'; - data: AuthenticationEventResponse<'sso'>; + event: 'authentication.password_succeeded'; + data: AuthenticationEventResponse; } - export interface AuthenticationSSOFailedEvent extends EventBase { event: 'authentication.sso_failed'; - data: AuthenticationEvent<'sso'>; + data: AuthenticationEvent; } export interface AuthenticationSSOFailedEventResponse extends EventResponseBase { event: 'authentication.sso_failed'; - data: AuthenticationEventResponse<'sso'>; + data: AuthenticationEventResponse; +} + +export interface AuthenticationSSOSucceededEvent extends EventBase { + event: 'authentication.sso_succeeded'; + data: AuthenticationEvent; } +export interface AuthenticationSSOSucceededEventResponse + extends EventResponseBase { + event: 'authentication.sso_succeeded'; + data: AuthenticationEventResponse; +} export interface ConnectionActivatedEvent extends EventBase { event: 'connection.activated'; @@ -362,6 +398,12 @@ export type Event = | AuthenticationMfaSucceededEvent | AuthenticationOAuthFailedEvent | AuthenticationOAuthSucceededEvent + | AuthenticationSSOFailedEvent + | AuthenticationSSOSucceededEvent + | AuthenticationPasswordFailedEvent + | AuthenticationPasswordSucceededEvent + | AuthenticationMagicAuthFailedEvent + | AuthenticationMagicAuthSucceededEvent | ConnectionActivatedEvent | ConnectionDeactivatedEvent | ConnectionDeletedEvent @@ -387,10 +429,16 @@ export type Event = export type EventResponse = | AuthenticationEmailVerificationFailedEventResponse | AuthenticationEmailVerificationSucceededEventResponse + | AuthenticationMagicAuthFailedEventResponse + | AuthenticationMagicAuthSucceededEventResponse | AuthenticationMfaFailedEventResponse | AuthenticationMfaSucceededEventResponse | AuthenticationOAuthFailedEventResponse | AuthenticationOAuthSucceededEventResponse + | AuthenticationPasswordFailedEventResponse + | AuthenticationPasswordSucceededEventResponse + | AuthenticationSSOFailedEventResponse + | AuthenticationSSOSucceededEventResponse | ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse | ConnectionDeletedEventResponse diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index 09496451f..c278294ad 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -22,20 +22,16 @@ export const deserializeEvent = (event: EventResponse): Event => { switch (event.event) { case 'authentication.email_verification_failed': case 'authentication.email_verification_succeeded': - return { - ...eventBase, - event: event.event, - data: deserializeAuthenticationEvent(event.data), - }; + case 'authentication.magic_auth_failed': + case 'authentication.magic_auth_succeeded': case 'authentication.mfa_failed': case 'authentication.mfa_succeeded': - return { - ...eventBase, - event: event.event, - data: deserializeAuthenticationEvent(event.data), - }; case 'authentication.oauth_failed': case 'authentication.oauth_succeeded': + case 'authentication.password_failed': + case 'authentication.password_succeeded': + case 'authentication.sso_failed': + case 'authentication.sso_succeeded': return { ...eventBase, event: event.event, diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index fa38c6d95..b8b243ffd 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -3,31 +3,26 @@ interface AuthenticationEventError { message: string; } -interface AuthenticationEventTypes { - 'sso': {}, - 'password': {}, - 'oauth': {}, - 'mfa': {}, - 'magic_auth': {}, - 'email_verification': {}, -} - -export type AuthenticationEventType = keyof AuthenticationEventTypes; +export type AuthenticationEventType = + | 'sso' + | 'password' + | 'oauth' + | 'mfa' + | 'magic_auth' + | 'email_verification'; -export type AuthenticationEvent = { - type: T; - email: string; +export type AuthenticationEvent = { + type: AuthenticationEventType; + email?: string; ipAddress: string | null; userAgent: string | null; userId: string | null; error?: AuthenticationEventError; -} & Partial> +}; -export interface AuthenticationEventResponse< - T extends AuthenticationEventType, -> { - type: T; - email: string; +export interface AuthenticationEventResponse { + type: AuthenticationEventType; + email?: string; ip_address: string | null; user_agent: string | null; user_id: string | null; diff --git a/src/user-management/serializers/authentication-event.serializer.ts b/src/user-management/serializers/authentication-event.serializer.ts index afd240a6b..7a7cd8ac3 100644 --- a/src/user-management/serializers/authentication-event.serializer.ts +++ b/src/user-management/serializers/authentication-event.serializer.ts @@ -1,14 +1,11 @@ import { AuthenticationEvent, AuthenticationEventResponse, - AuthenticationEventType, } from '../interfaces'; -export const deserializeAuthenticationEvent = < - T extends AuthenticationEventType, ->( - authenticationEvent: AuthenticationEventResponse, -): AuthenticationEvent => ({ +export const deserializeAuthenticationEvent = ( + authenticationEvent: AuthenticationEventResponse, +): AuthenticationEvent => ({ type: authenticationEvent.type, email: authenticationEvent.email, ipAddress: authenticationEvent.ip_address, From e40ed8505430009206230bf59c13e8d22860bc1e Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:32:26 -0300 Subject: [PATCH 10/13] Fix email type --- .../interfaces/authentication-event.interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index b8b243ffd..7885b6f4d 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -13,7 +13,7 @@ export type AuthenticationEventType = export type AuthenticationEvent = { type: AuthenticationEventType; - email?: string; + email?: string | null; ipAddress: string | null; userAgent: string | null; userId: string | null; @@ -22,7 +22,7 @@ export type AuthenticationEvent = { export interface AuthenticationEventResponse { type: AuthenticationEventType; - email?: string; + email?: string | null; ip_address: string | null; user_agent: string | null; user_id: string | null; From b972c1d387293bf5f43e724968cf00421ccc667c Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:45:23 -0300 Subject: [PATCH 11/13] Update nullable properties --- .../interfaces/authentication-event.interface.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index 7885b6f4d..ed4b6ac25 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -22,9 +22,9 @@ export type AuthenticationEvent = { export interface AuthenticationEventResponse { type: AuthenticationEventType; - email?: string | null; + email: string | null; ip_address: string | null; user_agent: string | null; user_id: string | null; - error?: AuthenticationEventError; + error: AuthenticationEventError | null; } From ef843cd60019a33579cb2ad138ebcfb94c46600d Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:51:35 -0300 Subject: [PATCH 12/13] Add `status` to authentication event type --- .../interfaces/authentication-event.interface.ts | 16 ++++++++++------ .../authentication-event.serializer.ts | 5 +++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/user-management/interfaces/authentication-event.interface.ts b/src/user-management/interfaces/authentication-event.interface.ts index ed4b6ac25..0254958b6 100644 --- a/src/user-management/interfaces/authentication-event.interface.ts +++ b/src/user-management/interfaces/authentication-event.interface.ts @@ -3,7 +3,7 @@ interface AuthenticationEventError { message: string; } -export type AuthenticationEventType = +type AuthenticationEventType = | 'sso' | 'password' | 'oauth' @@ -11,20 +11,24 @@ export type AuthenticationEventType = | 'magic_auth' | 'email_verification'; +type AuthenticationEventStatus = 'failed' | 'succeeded'; + export type AuthenticationEvent = { - type: AuthenticationEventType; - email?: string | null; + email: string | null; + error?: AuthenticationEventError; ipAddress: string | null; + status: AuthenticationEventStatus; + type: AuthenticationEventType; userAgent: string | null; userId: string | null; - error?: AuthenticationEventError; }; export interface AuthenticationEventResponse { - type: AuthenticationEventType; email: string | null; + error?: AuthenticationEventError; ip_address: string | null; + status: AuthenticationEventStatus; + type: AuthenticationEventType; user_agent: string | null; user_id: string | null; - error: AuthenticationEventError | null; } diff --git a/src/user-management/serializers/authentication-event.serializer.ts b/src/user-management/serializers/authentication-event.serializer.ts index 7a7cd8ac3..49fc33892 100644 --- a/src/user-management/serializers/authentication-event.serializer.ts +++ b/src/user-management/serializers/authentication-event.serializer.ts @@ -6,10 +6,11 @@ import { export const deserializeAuthenticationEvent = ( authenticationEvent: AuthenticationEventResponse, ): AuthenticationEvent => ({ - type: authenticationEvent.type, email: authenticationEvent.email, + error: authenticationEvent.error, ipAddress: authenticationEvent.ip_address, + status: authenticationEvent.status, + type: authenticationEvent.type, userAgent: authenticationEvent.user_agent, userId: authenticationEvent.user_id, - error: authenticationEvent.error, }); From 4217b6ef8acca9598f688396649ce4d3f00c3074 Mon Sep 17 00:00:00 2001 From: Blair Lunceford <74257063+blairlunceford@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:47:35 -0600 Subject: [PATCH 13/13] Remove failed auth events that aren't supported yet --- src/common/interfaces/event.interface.ts | 52 ---------------------- src/common/serializers/event.serializer.ts | 6 +-- src/user-management/serializers/index.ts | 1 + 3 files changed, 2 insertions(+), 57 deletions(-) diff --git a/src/common/interfaces/event.interface.ts b/src/common/interfaces/event.interface.ts index 8a092f253..dd8683419 100644 --- a/src/common/interfaces/event.interface.ts +++ b/src/common/interfaces/event.interface.ts @@ -46,17 +46,6 @@ interface EventResponseBase { created_at: string; } -export interface AuthenticationEmailVerificationFailedEvent extends EventBase { - event: 'authentication.email_verification_failed'; - data: AuthenticationEvent; -} - -export interface AuthenticationEmailVerificationFailedEventResponse - extends EventResponseBase { - event: 'authentication.email_verification_failed'; - data: AuthenticationEventResponse; -} - export interface AuthenticationEmailVerificationSucceededEvent extends EventBase { event: 'authentication.email_verification_succeeded'; @@ -91,17 +80,6 @@ export interface AuthenticationMagicAuthSucceededEventResponse data: AuthenticationEventResponse; } -export interface AuthenticationMfaFailedEvent extends EventBase { - event: 'authentication.mfa_failed'; - data: AuthenticationEvent; -} - -export interface AuthenticationMfaFailedEventResponse - extends EventResponseBase { - event: 'authentication.mfa_failed'; - data: AuthenticationEventResponse; -} - export interface AuthenticationMfaSucceededEvent extends EventBase { event: 'authentication.mfa_succeeded'; data: AuthenticationEvent; @@ -113,17 +91,6 @@ export interface AuthenticationMfaSucceededEventResponse data: AuthenticationEventResponse; } -export interface AuthenticationOAuthFailedEvent extends EventBase { - event: 'authentication.oauth_failed'; - data: AuthenticationEvent; -} - -export interface AuthenticationOAuthFailedEventResponse - extends EventResponseBase { - event: 'authentication.oauth_failed'; - data: AuthenticationEventResponse; -} - export interface AuthenticationOAuthSucceededEvent extends EventBase { event: 'authentication.oauth_succeeded'; data: AuthenticationEvent; @@ -157,17 +124,6 @@ export interface AuthenticationPasswordSucceededEventResponse data: AuthenticationEventResponse; } -export interface AuthenticationSSOFailedEvent extends EventBase { - event: 'authentication.sso_failed'; - data: AuthenticationEvent; -} - -export interface AuthenticationSSOFailedEventResponse - extends EventResponseBase { - event: 'authentication.sso_failed'; - data: AuthenticationEventResponse; -} - export interface AuthenticationSSOSucceededEvent extends EventBase { event: 'authentication.sso_succeeded'; data: AuthenticationEvent; @@ -533,13 +489,9 @@ export interface SessionCreatedEventResponse extends EventResponseBase { } export type Event = - | AuthenticationEmailVerificationFailedEvent | AuthenticationEmailVerificationSucceededEvent - | AuthenticationMfaFailedEvent | AuthenticationMfaSucceededEvent - | AuthenticationOAuthFailedEvent | AuthenticationOAuthSucceededEvent - | AuthenticationSSOFailedEvent | AuthenticationSSOSucceededEvent | AuthenticationPasswordFailedEvent | AuthenticationPasswordSucceededEvent @@ -579,17 +531,13 @@ export type Event = | OrganizationDeletedEvent; export type EventResponse = - | AuthenticationEmailVerificationFailedEventResponse | AuthenticationEmailVerificationSucceededEventResponse | AuthenticationMagicAuthFailedEventResponse | AuthenticationMagicAuthSucceededEventResponse - | AuthenticationMfaFailedEventResponse | AuthenticationMfaSucceededEventResponse - | AuthenticationOAuthFailedEventResponse | AuthenticationOAuthSucceededEventResponse | AuthenticationPasswordFailedEventResponse | AuthenticationPasswordSucceededEventResponse - | AuthenticationSSOFailedEventResponse | AuthenticationSSOSucceededEventResponse | ConnectionActivatedEventResponse | ConnectionDeactivatedEventResponse diff --git a/src/common/serializers/event.serializer.ts b/src/common/serializers/event.serializer.ts index d36f5c17e..84a7f875e 100644 --- a/src/common/serializers/event.serializer.ts +++ b/src/common/serializers/event.serializer.ts @@ -8,8 +8,8 @@ import { } from '../../directory-sync/serializers'; import { deserializeOrganization } from '../../organizations/serializers'; import { deserializeConnection } from '../../sso/serializers'; -import { deserializeAuthenticationEvent } from '../../user-management/serializers/authentication-event.serializer'; import { + deserializeAuthenticationEvent, deserializeEmailVerificationEvent, deserializeInvitationEvent, deserializeMagicAuthEvent, @@ -28,17 +28,13 @@ export const deserializeEvent = (event: EventResponse): Event => { }; switch (event.event) { - case 'authentication.email_verification_failed': case 'authentication.email_verification_succeeded': case 'authentication.magic_auth_failed': case 'authentication.magic_auth_succeeded': - case 'authentication.mfa_failed': case 'authentication.mfa_succeeded': - case 'authentication.oauth_failed': case 'authentication.oauth_succeeded': case 'authentication.password_failed': case 'authentication.password_succeeded': - case 'authentication.sso_failed': case 'authentication.sso_succeeded': return { ...eventBase, diff --git a/src/user-management/serializers/index.ts b/src/user-management/serializers/index.ts index d55b67608..f4eb1989d 100644 --- a/src/user-management/serializers/index.ts +++ b/src/user-management/serializers/index.ts @@ -3,6 +3,7 @@ export * from './authenticate-with-magic-auth-options.serializer'; export * from './authenticate-with-password-options.serializer'; export * from './authenticate-with-refresh-token.options.serializer'; export * from './authenticate-with-totp-options.serializer'; +export * from './authentication-event.serializer'; export * from './authentication-response.serializer'; export * from './create-magic-auth-options.serializer'; export * from './create-password-reset-options.serializer';