aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-03-07 09:22:11 +0000
committerMohamed Bassem <me@mbassem.com>2025-03-07 09:22:11 +0000
commit33293178db718236b51263c4bca0d4d146fa757a (patch)
treefb11951d05ba71d6b2fd3ebdd782fc77a44cee67
parent6bbfb8c6caf03ae2e9a0b8772a1f2e35db0c429c (diff)
downloadkarakeep-33293178db718236b51263c4bca0d4d146fa757a.tar.zst
feat: Add support for 'ai tagged' as a webhook trigger. Fixes #1092
-rw-r--r--apps/workers/openaiWorker.ts4
-rw-r--r--packages/db/schema.ts3
-rw-r--r--packages/shared/queues.ts2
-rw-r--r--packages/shared/types/webhooks.ts7
4 files changed, 12 insertions, 4 deletions
diff --git a/apps/workers/openaiWorker.ts b/apps/workers/openaiWorker.ts
index f8a775e6..64e36b82 100644
--- a/apps/workers/openaiWorker.ts
+++ b/apps/workers/openaiWorker.ts
@@ -20,6 +20,7 @@ import { buildImagePrompt, buildTextPrompt } from "@hoarder/shared/prompts";
import {
OpenAIQueue,
triggerSearchReindex,
+ triggerWebhook,
zOpenAIRequestSchema,
} from "@hoarder/shared/queues";
@@ -440,6 +441,9 @@ async function runOpenAI(job: DequeuedJob<ZOpenAIRequest>) {
await connectTags(bookmarkId, tags, bookmark.userId);
+ // Trigger a webhook
+ await triggerWebhook(bookmarkId, "ai tagged");
+
// Update the search index
await triggerSearchReindex(bookmarkId);
}
diff --git a/packages/db/schema.ts b/packages/db/schema.ts
index 111081b8..ae694fc8 100644
--- a/packages/db/schema.ts
+++ b/packages/db/schema.ts
@@ -404,7 +404,7 @@ export const webhooksTable = sqliteTable(
.references(() => users.id, { onDelete: "cascade" }),
events: text("events", { mode: "json" })
.notNull()
- .$type<("created" | "edited" | "crawled")[]>(),
+ .$type<("created" | "edited" | "crawled" | "ai tagged")[]>(),
token: text("token"),
},
(bl) => [index("webhooks_userId_idx").on(bl.userId)],
@@ -536,7 +536,6 @@ export const bookmarksInListsRelations = relations(
}),
);
-
export const webhooksRelations = relations(webhooksTable, ({ one }) => ({
user: one(users, {
fields: [webhooksTable.userId],
diff --git a/packages/shared/queues.ts b/packages/shared/queues.ts
index 5484ffb2..624f2bca 100644
--- a/packages/shared/queues.ts
+++ b/packages/shared/queues.ts
@@ -170,7 +170,7 @@ export const AssetPreprocessingQueue =
// Webhook worker
export const zWebhookRequestSchema = z.object({
bookmarkId: z.string(),
- operation: z.enum(["crawled", "created", "edited"]),
+ operation: z.enum(["crawled", "created", "edited", "ai tagged"]),
});
export type ZWebhookRequest = z.infer<typeof zWebhookRequestSchema>;
export const WebhookQueue = new SqliteQueue<ZWebhookRequest>(
diff --git a/packages/shared/types/webhooks.ts b/packages/shared/types/webhooks.ts
index 8d425ad9..819951ce 100644
--- a/packages/shared/types/webhooks.ts
+++ b/packages/shared/types/webhooks.ts
@@ -3,7 +3,12 @@ import { z } from "zod";
const MAX_WEBHOOK_URL_LENGTH = 500;
const MAX_WEBHOOK_TOKEN_LENGTH = 100;
-export const zWebhookEventSchema = z.enum(["created", "edited", "crawled"]);
+export const zWebhookEventSchema = z.enum([
+ "created",
+ "edited",
+ "crawled",
+ "ai tagged",
+]);
export type ZWebhookEvent = z.infer<typeof zWebhookEventSchema>;
export const zWebhookSchema = z.object({