diff --git a/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts b/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts index 50d0c5431..6214d0436 100644 --- a/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts +++ b/apps/webapp/app/presenters/v3/ScheduleListPresenter.server.ts @@ -1,11 +1,10 @@ import { Prisma, RuntimeEnvironmentType } from "@trigger.dev/database"; import { ScheduleListFilters } from "~/components/runs/v3/ScheduleFilters"; -import { PrismaClient, prisma, sqlDatabaseSchema } from "~/db.server"; +import { sqlDatabaseSchema } from "~/db.server"; import { displayableEnvironment } from "~/models/runtimeEnvironment.server"; -import { getUsername } from "~/utils/username"; +import { getCurrentPlan, getLimit, getLimits } from "~/services/platform.v3.server"; import { calculateNextScheduledTimestamp } from "~/v3/utils/calculateNextSchedule.server"; import { BasePresenter } from "./basePresenter.server"; -import { getCurrentPlan } from "~/services/platform.v3.server"; type ScheduleListOptions = { projectId: string; @@ -245,11 +244,7 @@ export class ScheduleListPresenter extends BasePresenter { }; }); - let limit = 500; - const plan = await getCurrentPlan(project.organizationId); - if (plan?.v3Subscription.plan) { - limit = plan.v3Subscription.plan.limits.schedules.number; - } + const limit = await getLimit(project.organizationId, "schedules", 500); return { currentPage: page, diff --git a/apps/webapp/app/services/platform.v3.server.ts b/apps/webapp/app/services/platform.v3.server.ts index 514145971..dbb0d6564 100644 --- a/apps/webapp/app/services/platform.v3.server.ts +++ b/apps/webapp/app/services/platform.v3.server.ts @@ -1,4 +1,4 @@ -import { BillingClient, SetPlanBody, UsageSeriesParams } from "@trigger.dev/billing/v3"; +import { BillingClient, Limits, SetPlanBody, UsageSeriesParams } from "@trigger.dev/billing/v3"; import { Organization, Project } from "@trigger.dev/database"; import { redirect } from "remix-typedjson"; import { $replica } from "~/db.server"; @@ -59,6 +59,34 @@ export async function getCurrentPlan(orgId: string) { } } +export async function getLimits(orgId: string) { + const client = getClient(); + if (!client) return undefined; + try { + const result = await client.currentPlan(orgId); + if (!result.success) { + logger.error("Error getting limits", { orgId, error: result.error }); + return undefined; + } + + return result.v3Subscription?.plan?.limits; + } catch (e) { + logger.error("Error getting limits", { orgId, error: e }); + return undefined; + } +} + +export async function getLimit(orgId: string, limit: keyof Limits, fallback: number) { + const limits = await getLimits(orgId); + if (!limits) return fallback; + const result = limits[limit]; + + if (!result) return fallback; + if (typeof result === "number") return result; + if (typeof result === "object" && "number" in result) return result.number; + return fallback; +} + export async function customerPortalUrl(orgId: string, orgSlug: string) { const client = getClient(); if (!client) return undefined;