feat(auth): add publishing session created and session refreshed events

This commit is contained in:
Karol Sójko
2023-02-23 11:18:10 +01:00
parent f13944badc
commit 5b98924561
11 changed files with 198 additions and 11 deletions
@@ -1,14 +1,24 @@
import * as dayjs from 'dayjs'
import { inject, injectable } from 'inversify'
import { DomainEventPublisherInterface } from '@standardnotes/domain-events'
import { TimerInterface } from '@standardnotes/time'
import { Logger } from 'winston'
import TYPES from '../../Bootstrap/Types'
import { SessionServiceInterface } from '../Session/SessionServiceInterface'
import { DomainEventFactoryInterface } from '../Event/DomainEventFactoryInterface'
import { RefreshSessionTokenResponse } from './RefreshSessionTokenResponse'
import { RefreshSessionTokenDTO } from './RefreshSessionTokenDTO'
@injectable()
export class RefreshSessionToken {
constructor(@inject(TYPES.SessionService) private sessionService: SessionServiceInterface) {}
constructor(
@inject(TYPES.SessionService) private sessionService: SessionServiceInterface,
@inject(TYPES.DomainEventFactory) private domainEventFactory: DomainEventFactoryInterface,
@inject(TYPES.DomainEventPublisher) private domainEventPublisher: DomainEventPublisherInterface,
@inject(TYPES.Timer) private timer: TimerInterface,
@inject(TYPES.Logger) private logger: Logger,
) {}
async execute(dto: RefreshSessionTokenDTO): Promise<RefreshSessionTokenResponse> {
const session = await this.sessionService.getSessionFromToken(dto.accessToken)
@@ -28,7 +38,7 @@ export class RefreshSessionToken {
}
}
if (session.refreshExpiration < dayjs.utc().toDate()) {
if (session.refreshExpiration < this.timer.getUTCDate()) {
return {
success: false,
errorTag: 'expired-refresh-token',
@@ -38,6 +48,14 @@ export class RefreshSessionToken {
const sessionPayload = await this.sessionService.refreshTokens(session)
try {
await this.domainEventPublisher.publish(
this.domainEventFactory.createSessionRefreshedEvent({ userUuid: session.userUuid }),
)
} catch (error) {
this.logger.error(`Failed to publish session refreshed event: ${(error as Error).message}`)
}
return {
success: true,
sessionPayload,