mirror of
https://github.com/formbricks/formbricks.git
synced 2026-05-13 03:16:58 -05:00
562b9c5296
Co-authored-by: Matti Nannt <mail@matthiasnannt.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Piyush Gupta <56182734+gupta-piyush19@users.noreply.github.com> Co-authored-by: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com> Co-authored-by: victorvhs017 <115753265+victorvhs017@users.noreply.github.com> Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com> Co-authored-by: Piyush Gupta <piyushguptaa2z123@gmail.com> Co-authored-by: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Co-authored-by: Victor Santos <victor@formbricks.com> Co-authored-by: Dhruwang <dhruwangjariwala18@gmail.com> Co-authored-by: Vijay <vijayraghav22@gmail.com> Co-authored-by: Johannes <72809645+jobenjada@users.noreply.github.com> Co-authored-by: Johannes <johannes@formbricks.com> Co-authored-by: Peter Pesti-Varga <peter@lokin.hu> Co-authored-by: Piyush Jain <122745947+d3vb0ox@users.noreply.github.com> Co-authored-by: Jakob Schott <154420406+jakobsitory@users.noreply.github.com> Co-authored-by: Gulshan Kumar <gulshanbahadur002@gmail.com> Co-authored-by: Harsh Bhat <90265455+harshsbhat@users.noreply.github.com>
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { cache } from "@/lib/cache";
|
|
import { PostHog } from "posthog-node";
|
|
import { logger } from "@formbricks/logger";
|
|
import { TOrganizationBillingPlan, TOrganizationBillingPlanLimits } from "@formbricks/types/organizations";
|
|
import { IS_POSTHOG_CONFIGURED, IS_PRODUCTION, POSTHOG_API_HOST, POSTHOG_API_KEY } from "./constants";
|
|
|
|
const enabled = IS_PRODUCTION && IS_POSTHOG_CONFIGURED;
|
|
|
|
export const capturePosthogEnvironmentEvent = async (
|
|
environmentId: string,
|
|
eventName: string,
|
|
properties: any = {}
|
|
) => {
|
|
if (!enabled || typeof POSTHOG_API_HOST !== "string" || typeof POSTHOG_API_KEY !== "string") {
|
|
return;
|
|
}
|
|
try {
|
|
const client = new PostHog(POSTHOG_API_KEY, {
|
|
host: POSTHOG_API_HOST,
|
|
});
|
|
client.capture({
|
|
// workaround with a static string as exaplained in PostHog docs: https://posthog.com/docs/product-analytics/group-analytics
|
|
distinctId: "environmentEvents",
|
|
event: eventName,
|
|
groups: { environment: environmentId },
|
|
properties,
|
|
});
|
|
await client.shutdown();
|
|
} catch (error) {
|
|
logger.error(error, "error sending posthog event");
|
|
}
|
|
};
|
|
|
|
export const sendPlanLimitsReachedEventToPosthogWeekly = (
|
|
environmentId: string,
|
|
billing: {
|
|
plan: TOrganizationBillingPlan;
|
|
limits: TOrganizationBillingPlanLimits;
|
|
}
|
|
): Promise<string> =>
|
|
cache(
|
|
async () => {
|
|
try {
|
|
await capturePosthogEnvironmentEvent(environmentId, "plan limit reached", {
|
|
...billing,
|
|
});
|
|
return "success";
|
|
} catch (error) {
|
|
logger.error(error, "error sending plan limits reached event to posthog weekly");
|
|
throw error;
|
|
}
|
|
},
|
|
[`sendPlanLimitsReachedEventToPosthogWeekly-${billing.plan}-${environmentId}`],
|
|
{
|
|
revalidate: 60 * 60 * 24 * 7, // 7 days
|
|
}
|
|
)();
|