aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared/queues.ts
diff options
context:
space:
mode:
authorMohamed Bassem <me@mbassem.com>2025-04-27 00:02:20 +0100
committerGitHub <noreply@github.com>2025-04-27 00:02:20 +0100
commit136f126296af65f50da598d084d1485c0e40437a (patch)
tree2725c7932ebbcb9b48b5af98eb9b72329a400260 /packages/shared/queues.ts
parentca47be7fe7be128f459c37614a04902a873fe289 (diff)
downloadkarakeep-136f126296af65f50da598d084d1485c0e40437a.tar.zst
feat: Implement generic rule engine (#1318)
* Add schema for the new rule engine * Add rule engine backend logic * Implement the worker logic and event firing * Implement the UI changesfor the rule engine * Ensure that when a referenced list or tag are deleted, the corresponding event/action is * Dont show smart lists in rule engine events * Add privacy validations for attached tag and list ids * Move the rules logic into a models
Diffstat (limited to 'packages/shared/queues.ts')
-rw-r--r--packages/shared/queues.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/packages/shared/queues.ts b/packages/shared/queues.ts
index 624f2bca..571df568 100644
--- a/packages/shared/queues.ts
+++ b/packages/shared/queues.ts
@@ -3,6 +3,7 @@ import { buildDBClient, migrateDB, SqliteQueue } from "liteque";
import { z } from "zod";
import serverConfig from "./config";
+import { zRuleEngineEventSchema } from "./types/rules";
const QUEUE_DB_PATH = path.join(serverConfig.dataDir, "queue.db");
@@ -193,3 +194,30 @@ export async function triggerWebhook(
operation,
});
}
+
+// RuleEgine worker
+export const zRuleEngineRequestSchema = z.object({
+ bookmarkId: z.string(),
+ events: z.array(zRuleEngineEventSchema),
+});
+export type ZRuleEngineRequest = z.infer<typeof zRuleEngineRequestSchema>;
+export const RuleEngineQueue = new SqliteQueue<ZRuleEngineRequest>(
+ "rule_engine_queue",
+ queueDB,
+ {
+ defaultJobArgs: {
+ numRetries: 1,
+ },
+ keepFailedJobs: false,
+ },
+);
+
+export async function triggerRuleEngineOnEvent(
+ bookmarkId: string,
+ events: z.infer<typeof zRuleEngineEventSchema>[],
+) {
+ await RuleEngineQueue.enqueue({
+ events,
+ bookmarkId,
+ });
+}