mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-03 17:09:58 -06:00
Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com> Co-authored-by: Matthias Nannt <mail@matthiasnannt.com>
63 lines
1.6 KiB
TypeScript
63 lines
1.6 KiB
TypeScript
import { PostHog } from "posthog-node";
|
|
import { TOrganizationBillingPlan, TOrganizationBillingPlanLimits } from "@formbricks/types/organizations";
|
|
import { cache } from "./cache";
|
|
import { env } from "./env";
|
|
|
|
const enabled =
|
|
process.env.NODE_ENV === "production" &&
|
|
env.NEXT_PUBLIC_POSTHOG_API_HOST &&
|
|
env.NEXT_PUBLIC_POSTHOG_API_KEY;
|
|
|
|
export const capturePosthogEnvironmentEvent = async (
|
|
environmentId: string,
|
|
eventName: string,
|
|
properties: any = {}
|
|
) => {
|
|
if (
|
|
!enabled ||
|
|
typeof env.NEXT_PUBLIC_POSTHOG_API_HOST !== "string" ||
|
|
typeof env.NEXT_PUBLIC_POSTHOG_API_KEY !== "string"
|
|
) {
|
|
return;
|
|
}
|
|
try {
|
|
const client = new PostHog(env.NEXT_PUBLIC_POSTHOG_API_KEY, {
|
|
host: env.NEXT_PUBLIC_POSTHOG_API_HOST,
|
|
});
|
|
client.capture({
|
|
distinctId: environmentId,
|
|
event: eventName,
|
|
groups: { environment: environmentId },
|
|
properties,
|
|
});
|
|
await client.shutdown();
|
|
} catch (error) {
|
|
console.error("error sending posthog event:", error);
|
|
}
|
|
};
|
|
|
|
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) {
|
|
console.error(error);
|
|
throw error;
|
|
}
|
|
},
|
|
[`sendPlanLimitsReachedEventToPosthogWeekly-${billing.plan}-${environmentId}`],
|
|
{
|
|
revalidate: 60 * 60 * 24 * 7, // 7 days
|
|
}
|
|
)();
|