From e1990258f18c3a82913ce343ee112eb01c4e46e7 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 9 May 2024 11:30:28 +0800 Subject: [PATCH 1/2] send analytic events for each digest channel --- packages/api/src/jobs/ai/create_digest.ts | 19 ++++++++++++++++--- packages/api/src/utils/analytics.ts | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/api/src/jobs/ai/create_digest.ts b/packages/api/src/jobs/ai/create_digest.ts index 5f2ad7988..5a4245d61 100644 --- a/packages/api/src/jobs/ai/create_digest.ts +++ b/packages/api/src/jobs/ai/create_digest.ts @@ -28,6 +28,7 @@ import { findUserAndPersonalization, sendPushNotifications, } from '../../services/user' +import { analytics } from '../../utils/analytics' import { enqueueSendEmail } from '../../utils/createTask' import { wordsCount } from '../../utils/helpers' import { logger } from '../../utils/logger' @@ -716,15 +717,27 @@ const sendToChannels = async ( deduplicateChannels.map(async (channel) => { switch (channel) { case 'push': - return sendPushNotification(user.id, digest) + await sendPushNotification(user.id, digest) + break case 'email': - return sendEmail(user, digest, deduplicateChannels) + await sendEmail(user, digest, deduplicateChannels) + break case 'library': - return moveDigestToLibrary(user, digest) + await moveDigestToLibrary(user, digest) + break default: logger.error('Unknown channel', { channel }) return } + + analytics.capture({ + distinctId: user.id, + event: 'digest_created', + properties: { + channel, + digestId: digest.id, + }, + }) }) ) } diff --git a/packages/api/src/utils/analytics.ts b/packages/api/src/utils/analytics.ts index d59b1622a..fa87a3166 100644 --- a/packages/api/src/utils/analytics.ts +++ b/packages/api/src/utils/analytics.ts @@ -30,6 +30,7 @@ class PostHogClient implements AnalyticClient { properties: { ...properties, client, + env: env.server.apiEnv, }, }) } From 17708915d9a0b628f528b65ca843576cc303d926 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 9 May 2024 11:46:01 +0800 Subject: [PATCH 2/2] wrap content in element --- packages/api/src/jobs/ai/create_digest.ts | 30 +++++++++++++---------- packages/api/src/utils/usernamePolicy.ts | 1 - 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/api/src/jobs/ai/create_digest.ts b/packages/api/src/jobs/ai/create_digest.ts index 5a4245d61..58db0768e 100644 --- a/packages/api/src/jobs/ai/create_digest.ts +++ b/packages/api/src/jobs/ai/create_digest.ts @@ -675,19 +675,23 @@ export const moveDigestToLibrary = async (user: User, digest: Digest) => { const chapters = digest.chapters ?? [] const html = ` -
- ${chapters - .map( - (chapter) => ` -
-

${chapter.title} (${chapter.wordCount} words)

-
- ${chapter.summary} -
-
` - ) - .join('')} -
` + + +
+ ${chapters + .map( + (chapter) => ` +
+

${chapter.title} (${chapter.wordCount} words)

+
+ ${chapter.summary} +
+
` + ) + .join('')} +
+ + ` const previewImage = await findThumbnail(chapters) diff --git a/packages/api/src/utils/usernamePolicy.ts b/packages/api/src/utils/usernamePolicy.ts index 5cd0466a1..46f46ce14 100644 --- a/packages/api/src/utils/usernamePolicy.ts +++ b/packages/api/src/utils/usernamePolicy.ts @@ -172,7 +172,6 @@ const RESERVED_NAMES = new Set([ 'xmpp', 'yaml', 'yml', - 'digest', ]) export const validateUsername = (username: string): boolean => {