aboutsummaryrefslogtreecommitdiffstats
path: root/packages/trpc/models/webhooks.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-12-13 14:36:37 +0000
committerMohamed Bassem <me@mbassem.com>2025-12-13 14:36:37 +0000
commit74df8bd789ee2d56d0620e9852aa3eb7c48f0823 (patch)
treeda01c8de0736c0eb9a6662121014999cd23e99c7 /packages/trpc/models/webhooks.ts
parent697c853a7dac003b9636eb73433658ad89ec113e (diff)
downloadkarakeep-74df8bd789ee2d56d0620e9852aa3eb7c48f0823.tar.zst
feat: Add limits on number of rss feeds and webhooks per user
Diffstat (limited to 'packages/trpc/models/webhooks.ts')
-rw-r--r--packages/trpc/models/webhooks.ts17
1 files changed, 16 insertions, 1 deletions
diff --git a/packages/trpc/models/webhooks.ts b/packages/trpc/models/webhooks.ts
index d2d9c19c..12281ec7 100644
--- a/packages/trpc/models/webhooks.ts
+++ b/packages/trpc/models/webhooks.ts
@@ -1,8 +1,9 @@
import { TRPCError } from "@trpc/server";
-import { and, eq } from "drizzle-orm";
+import { and, count, eq } from "drizzle-orm";
import { z } from "zod";
import { webhooksTable } from "@karakeep/db/schema";
+import serverConfig from "@karakeep/shared/config";
import {
zNewWebhookSchema,
zUpdateWebhookSchema,
@@ -44,6 +45,20 @@ export class Webhook {
ctx: AuthedContext,
input: z.infer<typeof zNewWebhookSchema>,
): Promise<Webhook> {
+ // Check if user has reached the maximum number of webhooks
+ const [webhookCount] = await ctx.db
+ .select({ count: count() })
+ .from(webhooksTable)
+ .where(eq(webhooksTable.userId, ctx.user.id));
+
+ const maxWebhooks = serverConfig.webhook.maxWebhooksPerUser;
+ if (webhookCount.count >= maxWebhooks) {
+ throw new TRPCError({
+ code: "BAD_REQUEST",
+ message: `Maximum number of webhooks (${maxWebhooks}) reached`,
+ });
+ }
+
const [result] = await ctx.db
.insert(webhooksTable)
.values({