Openstatus www.openstatus.dev

๐Ÿ› analytics (#124)

authored by

Thibault Le Ouay and committed by
GitHub
eb179c59 e9573348

+23 -24
+5 -7
packages/analytics/src/type.ts
··· 1 1 export type AnalyticsEvents = 2 2 | { 3 3 event: "User Created"; 4 - properties: { 5 - email: string; 6 - }; 4 + userId: string; 5 + email: string; 7 6 } 8 7 | { 9 8 event: "Monitor Created"; 10 - properties: { url: string; periodicity: string }; 9 + url: string; 10 + periodicity: string; 11 11 } 12 12 | { 13 13 event: "Page Created"; 14 - properties: { 15 - slug: string; 16 - }; 14 + slug: string; 17 15 } 18 16 | { event: "User Signed In" };
+15 -10
packages/api/src/router/clerk/webhook.ts
··· 30 30 .values({ 31 31 tenantId: opts.input.data.data.id, 32 32 }) 33 - .returning({ id: user.id }) 33 + .returning() 34 34 .get(); 35 35 36 36 const slug = generateSlug(2); ··· 55 55 react: WelcomeEmail(), 56 56 }); 57 57 58 - await analytics.identify(userResult.id, { 58 + await analytics.identify(String(userResult.id), { 59 59 email: opts.input.data.data.email_addresses[0].email_address, 60 + userId: userResult.id, 60 61 }); 61 62 await trackAnalytics({ 62 63 event: "User Created", 63 - properties: { 64 - email: opts.input.data.data.email_addresses[0].email_address, 65 - }, 64 + userId: String(userResult.id), 65 + email: opts.input.data.data.email_addresses[0].email_address, 66 66 }); 67 67 } 68 68 }), ··· 74 74 userSignedIn: webhookProcedure.mutation(async (opts) => { 75 75 if (opts.input.data.type === "session.created") { 76 76 const currentUser = await opts.ctx.db 77 - .select({ id: user.id }) 78 - .from(user) 79 - .where(eq(user.tenantId, opts.input.data.data.user_id)) 80 - .get(); 81 - await analytics.identify(currentUser.id ); 77 + .select({ id: user.id }) 78 + .from(user) 79 + .where(eq(user.tenantId, opts.input.data.data.user_id)) 80 + .get(); 81 + // Then it's the new user it might be null 82 + if (!currentUser) return; 83 + 84 + await analytics.identify(String(currentUser.id), { 85 + userId: currentUser.id, 86 + }); 82 87 await trackAnalytics({ event: "User Signed In" }); 83 88 } 84 89 }),
+2 -4
packages/api/src/router/monitor.ts
··· 81 81 }); 82 82 await trackAnalytics({ 83 83 event: "Monitor Created", 84 - properties: { 85 - url: newMonitor.url, 86 - periodicity: newMonitor.periodicity, 87 - }, 84 + url: newMonitor.url, 85 + periodicity: newMonitor.periodicity, 88 86 }); 89 87 }), 90 88
+1 -3
packages/api/src/router/page.ts
··· 84 84 }); 85 85 await trackAnalytics({ 86 86 event: "Page Created", 87 - properties: { 88 - slug: newPage.slug, 89 - }, 87 + slug: newPage.slug, 90 88 }); 91 89 }), 92 90