From 963ac7111f67cf255e52d5325c776f7eaa0eaebc Mon Sep 17 00:00:00 2001 From: Marios Antonoudiou Date: Sun, 6 Jul 2025 20:23:54 +0300 Subject: [PATCH] Make capturing according to serverless --- package-lock.json | 18 ++++++++++++++++++ package.json | 1 + server/api/tasks/generate-content.post.ts | 10 +--------- server/api/tasks/remove-athlete.post.ts | 4 ++-- server/plugins/posthog.ts | 13 +++++++------ server/routes/auth/strava.ts | 4 ++-- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f58182..db9e124 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@nuxt/image": "^1.10.0", "@nuxt/ui": "3.0.2", "@vee-validate/nuxt": "^4.15.0", + "@vercel/functions": "^2.2.3", "@vueuse/nuxt": "^13.0.0", "destr": "^2.0.5", "drizzle-orm": "^0.41.0", @@ -3872,6 +3873,23 @@ "pathe": "^2.0.1" } }, + "node_modules/@vercel/functions": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vercel/functions/-/functions-2.2.3.tgz", + "integrity": "sha512-Z6xwsxM/57/92PLW2HoLLmVw4+Nb5OZzMzDA4qfkksWgG1k5dGV7kvP1TDEOlW3WHjqWtfPJBcd61dE2p0mbxQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-web-identity": "*" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-web-identity": { + "optional": true + } + } + }, "node_modules/@vercel/nft": { "version": "0.29.2", "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.2.tgz", diff --git a/package.json b/package.json index 7125754..7b95960 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@nuxt/image": "^1.10.0", "@nuxt/ui": "3.0.2", "@vee-validate/nuxt": "^4.15.0", + "@vercel/functions": "^2.2.3", "@vueuse/nuxt": "^13.0.0", "destr": "^2.0.5", "drizzle-orm": "^0.41.0", diff --git a/server/api/tasks/generate-content.post.ts b/server/api/tasks/generate-content.post.ts index d54787d..4a1b3e4 100644 --- a/server/api/tasks/generate-content.post.ts +++ b/server/api/tasks/generate-content.post.ts @@ -54,15 +54,7 @@ export default defineEventHandler(async (event) => { }); }); - posthog.identify({ - distinctId: String(user.id), - properties: { - name: user.name, - country: user.country, - }, - }); - - posthog.capture({ + posthog.captureImmediate({ distinctId: String(user.id), event: "content generated", properties: { diff --git a/server/api/tasks/remove-athlete.post.ts b/server/api/tasks/remove-athlete.post.ts index 046c513..7d462f5 100644 --- a/server/api/tasks/remove-athlete.post.ts +++ b/server/api/tasks/remove-athlete.post.ts @@ -20,7 +20,7 @@ export default defineEventHandler(async (event) => { }, }); - posthog.identify({ + posthog.identifyImmediate({ distinctId: String(user!.id), properties: { name: user!.name, @@ -32,7 +32,7 @@ export default defineEventHandler(async (event) => { .delete(tables.users) .where(eq(tables.users.id, get(body, "object_id"))); - posthog.capture({ + posthog.captureImmediate({ distinctId: get(body, "object_id"), event: "user deleted", }); diff --git a/server/plugins/posthog.ts b/server/plugins/posthog.ts index edf8686..1eb4aea 100644 --- a/server/plugins/posthog.ts +++ b/server/plugins/posthog.ts @@ -1,23 +1,24 @@ import { PostHog } from "posthog-node"; - +import { waitUntil } from "@vercel/functions"; export default defineNitroPlugin((nitroApp) => { const runtimeConfig = useRuntimeConfig(); const posthog = new PostHog(runtimeConfig.public.posthogPublicKey, { host: runtimeConfig.public.posthogHost, - defaults: runtimeConfig.public.posthogDefaults, + flushAt: 1, + flushInterval: 0, }); nitroApp.hooks.hook("request", (event) => { event.context.posthog = posthog; }); - nitroApp.hooks.hook("beforeResponse", async () => { - await posthog.shutdown(); + nitroApp.hooks.hook("beforeResponse", () => { + waitUntil(posthog.shutdown()); }); - nitroApp.hooks.hook("close", async () => { - await posthog.shutdown(); + nitroApp.hooks.hook("close", () => { + waitUntil(posthog.shutdown()); }); }); diff --git a/server/routes/auth/strava.ts b/server/routes/auth/strava.ts index c3b2d08..ec01350 100644 --- a/server/routes/auth/strava.ts +++ b/server/routes/auth/strava.ts @@ -82,7 +82,7 @@ export default defineOAuthStravaEventHandler({ user: userPayload, }); - posthog.identify({ + posthog.identifyImmediate({ distinctId: String(user!.id), properties: { name: user!.name, @@ -90,7 +90,7 @@ export default defineOAuthStravaEventHandler({ }, }); - posthog.capture({ + posthog.captureImmediate({ distinctId: String(user!.id), event: "user logged in", });