mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-18 10:27:41 -06:00
Add jsVersion & sessionCreated event to Telemetry (#720)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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. */
|
||||
|
||||
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user