Skip to content

Commit

Permalink
Add events for EmailVerification entity
Browse files Browse the repository at this point in the history
  • Loading branch information
LauraBeatris committed Mar 25, 2024
1 parent cfbb941 commit 59676c0
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/common/interfaces/event.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ import {
User,
UserResponse,
} from '../../user-management/interfaces';
import {
EmailVerification,
EmailVerificationResponse,
} from '../../user-management/interfaces/email-verification.interface';
import {
OrganizationMembership,
OrganizationMembershipResponse,
Expand All @@ -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;
Expand Down Expand Up @@ -257,6 +284,8 @@ export interface SessionCreatedEventResponse extends EventResponseBase {
}

export type Event =
| AuthenticationEmailVerificationFailedEvent
| AuthenticationEmailVerificationSucceededEvent
| ConnectionActivatedEvent
| ConnectionDeactivatedEvent
| ConnectionDeletedEvent
Expand All @@ -280,6 +309,8 @@ export type Event =
| SessionCreatedEvent;

export type EventResponse =
| AuthenticationEmailVerificationFailedEventResponse
| AuthenticationEmailVerificationSucceededEventResponse
| ConnectionActivatedEventResponse
| ConnectionDeactivatedEventResponse
| ConnectionDeletedEventResponse
Expand Down
13 changes: 13 additions & 0 deletions src/common/serializers/event.serializer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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':
Expand Down
27 changes: 27 additions & 0 deletions src/user-management/interfaces/email-verification.interface.ts
Original file line number Diff line number Diff line change
@@ -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;
1 change: 1 addition & 0 deletions src/user-management/interfaces/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
26 changes: 26 additions & 0 deletions src/user-management/serializers/email-verification.serializer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { EmailVerification, EmailVerificationResponse } from '../interfaces';

export const deserializeEmailVerification = (
emailVerification: EmailVerificationResponse,
): EmailVerification => {
const common = {
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 {
...common,
status: emailVerification.status,
error: emailVerification.error,
};
}

return {
...common,
status: emailVerification.status,
};
};

0 comments on commit 59676c0

Please sign in to comment.