diff --git a/apps/builder/src/pages/api/auth/[...nextauth].ts b/apps/builder/src/pages/api/auth/[...nextauth].ts index 1225755c5..6defcbae9 100644 --- a/apps/builder/src/pages/api/auth/[...nextauth].ts +++ b/apps/builder/src/pages/api/auth/[...nextauth].ts @@ -20,6 +20,7 @@ import got from 'got' import { env } from '@typebot.io/env' import * as Sentry from '@sentry/nextjs' import { getIp } from '@typebot.io/lib/getIp' +import { trackEvents } from '@typebot.io/lib/telemetry/trackEvents' const providers: Provider[] = [] @@ -218,11 +219,18 @@ const updateLastActivityDate = async (user: User) => { first.getMonth() === second.getMonth() && first.getDate() === second.getDate() - if (!datesAreOnSameDay(user.lastActivityAt, new Date())) + if (!datesAreOnSameDay(user.lastActivityAt, new Date())) { await prisma.user.updateMany({ where: { id: user.id }, data: { lastActivityAt: new Date() }, }) + await trackEvents([ + { + name: 'User logged in', + userId: user.id, + }, + ]) + } } const getUserGroups = async (account: Account): Promise => { diff --git a/packages/lib/telemetry/trackEvents.ts b/packages/lib/telemetry/trackEvents.ts index f93d8770c..5308cddc7 100644 --- a/packages/lib/telemetry/trackEvents.ts +++ b/packages/lib/telemetry/trackEvents.ts @@ -52,6 +52,12 @@ export const trackEvents = async (events: TelemetryEvent[]) => { properties: event.name === 'User updated' ? { $set: event.data } + : event.name === 'User logged in' + ? { + $set: { + lastActivityAt: new Date().toISOString(), + }, + } : 'data' in event ? event.data : undefined, diff --git a/packages/schemas/features/telemetry.ts b/packages/schemas/features/telemetry.ts index 93a527d17..2e9c94e60 100644 --- a/packages/schemas/features/telemetry.ts +++ b/packages/schemas/features/telemetry.ts @@ -37,6 +37,12 @@ const userCreatedEventSchema = userEvent.merge( }) ) +const userLoggedInEventSchema = userEvent.merge( + z.object({ + name: z.literal('User logged in'), + }) +) + const userUpdatedEventSchema = userEvent.merge( z.object({ name: z.literal('User updated'), @@ -173,6 +179,7 @@ export const clientSideEvents = [removedBrandingEventSchema] as const export const eventSchema = z.discriminatedUnion('name', [ workspaceCreatedEventSchema, userCreatedEventSchema, + userLoggedInEventSchema, typebotCreatedEventSchema, publishedTypebotEventSchema, subscriptionUpdatedEventSchema,