1import * as Effect from "effect/Effect";
2import * as SqlClient from "effect/sql/SqlClient";
3
4export default Effect.gen(function* () {
5 const sql = yield* SqlClient.SqlClient;
6
7 // Kept out of schedule_json so they never decode into the read model.
8 yield* sql`ALTER TABLE scheduled_tasks ADD COLUMN webhook_token TEXT`;
9 yield* sql`ALTER TABLE scheduled_tasks ADD COLUMN webhook_secret TEXT`;
10
11 yield* sql`
12 CREATE TABLE IF NOT EXISTS scheduled_task_webhook_deliveries (
13 delivery_id TEXT PRIMARY KEY,
14 task_id TEXT NOT NULL,
15 received_at TEXT NOT NULL,
16 method TEXT NOT NULL,
17 query TEXT NOT NULL,
18 headers_json TEXT NOT NULL,
19 body TEXT NOT NULL,
20 body_bytes INTEGER NOT NULL,
21 body_truncated INTEGER NOT NULL,
22 outcome TEXT NOT NULL,
23 signature_verified INTEGER NOT NULL,
24 missing_fields_json TEXT NOT NULL,
25 rendered_prompt TEXT,
26 error TEXT
27 )
28 `;
29
30 yield* sql`
31 CREATE INDEX IF NOT EXISTS idx_scheduled_task_webhook_deliveries_task
32 ON scheduled_task_webhook_deliveries(task_id, received_at)
33 `;
34});