Files
formbricks/packages/lib/posthogServer.ts
Shubham Palriwala d33304e3ad feat: pricing & payments v2 for formbricks cloud (#2648)
Co-authored-by: pandeymangg <anshuman.pandey9999@gmail.com>
Co-authored-by: Matthias Nannt <mail@matthiasnannt.com>
2024-06-14 13:17:33 +00:00

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
}
)();