Add jsVersion & sessionCreated event to Telemetry (#720)

This commit is contained in:
Matti Nannt
2023-08-21 11:30:00 +02:00
committed by GitHub
parent 754bdfbca7
commit 4de85eb365
4 changed files with 17 additions and 0 deletions

View File

@@ -6,11 +6,16 @@ import { getEnvironment } from "@formbricks/lib/services/environment";
import { createPerson, getPerson } from "@formbricks/lib/services/person";
import { getProductByEnvironmentId } from "@formbricks/lib/services/product";
import { createSession, extendSession, getSession } from "@formbricks/lib/services/session";
import { captureTelemetry } from "@formbricks/lib/telemetry";
import { TJsState, ZJsSyncInput } from "@formbricks/types/v1/js";
import { TPerson } from "@formbricks/types/v1/people";
import { TSession } from "@formbricks/types/v1/sessions";
import { NextResponse } from "next/server";
const captureNewSessionTelemetry = async (jsVersion?: string): Promise<void> => {
await captureTelemetry("session created", { jsVersion: jsVersion ?? "unknown" });
};
export async function OPTIONS(): Promise<NextResponse> {
return responses.successResponse({}, true);
}
@@ -53,6 +58,8 @@ export async function POST(req: Request): Promise<NextResponse> {
getProductByEnvironmentId(environmentId),
]);
captureNewSessionTelemetry(inputValidation.data.jsVersion);
// return state
const state: TJsState = {
person,
@@ -79,6 +86,9 @@ export async function POST(req: Request): Promise<NextResponse> {
getActionClasses(environmentId),
getProductByEnvironmentId(environmentId),
]);
captureNewSessionTelemetry(inputValidation.data.jsVersion);
// return state
const state: TJsState = {
person,
@@ -87,6 +97,7 @@ export async function POST(req: Request): Promise<NextResponse> {
noCodeActionClasses: noCodeActionClasses.filter((actionClass) => actionClass.type === "noCode"),
product,
};
return responses.successResponse({ ...state }, true);
}
// person & session exists
@@ -104,6 +115,7 @@ export async function POST(req: Request): Promise<NextResponse> {
}
// create a new session
session = await createSession(person.id);
captureNewSessionTelemetry(inputValidation.data.jsVersion);
} else {
// session exists
// check if person exists (should always exist, but just in case)
@@ -117,6 +129,7 @@ export async function POST(req: Request): Promise<NextResponse> {
if (session.expiresAt < new Date()) {
// create a new session
session = await createSession(person.id);
captureNewSessionTelemetry(inputValidation.data.jsVersion);
} else {
// extend session
session = await extendSession(sessionId);

View File

@@ -3,6 +3,7 @@ import { trackAction } from "./actions";
import { Config } from "./config";
import { NetworkError, Result, err, ok } from "./errors";
import { Logger } from "./logger";
import packageJson from "../../package.json";
const config = Config.getInstance();
const logger = Logger.getInstance();
@@ -19,6 +20,7 @@ const syncWithBackend = async (): Promise<Result<TJsState, NetworkError>> => {
environmentId: config.get().environmentId,
personId: config.get().state?.person.id,
sessionId: config.get().state?.session.id,
jsVersion: packageJson.version,
}),
});
if (!response.ok) {

View File

@@ -34,6 +34,7 @@
/* Module Resolution Options */
"moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
"resolveJsonModule": true /* Allow importing .json files */,
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */

View File

@@ -19,6 +19,7 @@ export const ZJsSyncInput = z.object({
environmentId: z.string().cuid2(),
personId: z.string().cuid2().optional(),
sessionId: z.string().cuid2().optional(),
jsVersion: z.string().optional(),
});
export type TJsSyncInput = z.infer<typeof ZJsSyncInput>;