chore: adjustments to data flow 67de59c5
Steve · 2026-01-14 09:23 3 file(s) · +24 −7
packages/server/src/routes/webhook.ts +22 −5
1 1
import { Hono } from "hono";
2 2
import type { Bindings, TapEvent } from "../types";
3 -
import { resolvePds, parseAtUri, resolveViewUrl } from "../utils";
3 +
import { resolveViewUrl } from "../utils";
4 +
5 +
const STALE_OFFSET_HOURS = 24;
4 6
5 7
const webhook = new Hono<{ Bindings: Bindings }>();
6 8
64 66
            await db
65 67
              .prepare(
66 68
                `INSERT INTO resolved_documents (uri, did, rkey, title, path, site, content, text_content, published_at, view_url, resolved_at, stale_at)
67 -
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now', '+12 hours'))
69 +
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now', '+${STALE_OFFSET_HOURS} hours'))
68 70
                 ON CONFLICT(uri) DO UPDATE SET
69 -
                   title = ?, path = ?, site = ?, content = ?, text_content = ?, published_at = ?, view_url = ?, resolved_at = datetime('now'), stale_at = datetime('now', '+12 hours')`
71 +
                   title = ?, path = ?, site = ?, content = ?, text_content = ?, published_at = ?, view_url = ?, resolved_at = datetime('now'), stale_at = datetime('now', '+${STALE_OFFSET_HOURS} hours')`
70 72
              )
71 73
              .bind(
72 74
                uri,
89 91
              )
90 92
              .run();
91 93
          }
94 +
95 +
          // Queue for immediate full processing (verification, publication resolution, etc.)
96 +
          await c.env.RESOLUTION_QUEUE.send({
97 +
            did: record.did,
98 +
            collection: record.collection,
99 +
            rkey: record.rkey,
100 +
          });
92 101
        } else if (record.action === "delete") {
93 102
          await db
94 103
            .prepare(
189 198
            await db
190 199
              .prepare(
191 200
                `INSERT INTO resolved_documents (uri, did, rkey, title, path, site, content, text_content, published_at, view_url, resolved_at, stale_at)
192 -
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now', '+12 hours'))
201 +
                 VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), datetime('now', '+${STALE_OFFSET_HOURS} hours'))
193 202
                 ON CONFLICT(uri) DO UPDATE SET
194 -
                   title = ?, path = ?, site = ?, content = ?, text_content = ?, published_at = ?, view_url = ?, resolved_at = datetime('now'), stale_at = datetime('now', '+12 hours')`
203 +
                   title = ?, path = ?, site = ?, content = ?, text_content = ?, published_at = ?, view_url = ?, resolved_at = datetime('now'), stale_at = datetime('now', '+${STALE_OFFSET_HOURS} hours')`
195 204
              )
196 205
              .bind(
197 206
                uri,
214 223
              )
215 224
              .run();
216 225
          }
226 +
227 +
          // Queue for immediate full processing
228 +
          await c.env.RESOLUTION_QUEUE.send({
229 +
            did: event.did,
230 +
            collection: event.collection,
231 +
            rkey: event.rkey,
232 +
          });
233 +
217 234
          processed++;
218 235
        } else if (
219 236
          event.type === "delete" &&
packages/server/src/utils/document.ts +1 −1
204 204
    const verified = await verifyDocumentRecord(pubUrl, site, viewUrl, uri);
205 205
206 206
    // 7. Insert/update resolved_documents
207 -
    const STALE_OFFSET_HOURS = 12;
207 +
    const STALE_OFFSET_HOURS = 24;
208 208
209 209
    await db
210 210
      .prepare(
packages/server/wrangler.toml +1 −1
21 21
22 22
# Cron trigger to refresh stale documents
23 23
[triggers]
24 -
crons = ["*/15 * * * *"]  # Every 15 minutes
24 +
crons = ["0 * * * *"]  # Every hour (at minute 0)
25 25
26 26
# Environment variables (secrets should be set via wrangler secret)
27 27
# TAP_WEBHOOK_SECRET - Optional secret for webhook authentication