diff --git a/packages/api/src/middleware/tracking.ts b/packages/api/src/middleware/tracking.ts index 1e671e8cf..405a4527a 100644 --- a/packages/api/src/middleware/tracking.ts +++ b/packages/api/src/middleware/tracking.ts @@ -52,6 +52,9 @@ class Tracker { sql`coalesce((data->'lastSeen')::bigint, 0) < ${lastSeen}`, ], { lastSeen }, + // lastSeen is best-effort: the record may have been deleted since the + // token was last seen, so a no-op update is not an error. + { throwIfEmpty: false }, ); } catch (err) { console.log( diff --git a/packages/api/src/store/table.ts b/packages/api/src/store/table.ts index 2806945bd..0be206120 100644 --- a/packages/api/src/store/table.ts +++ b/packages/api/src/store/table.ts @@ -251,7 +251,11 @@ export default class Table { } if (res.rowCount < 1 && throwIfEmpty) { - throw new NotFoundError(`${this.name} id=${doc.id} not found`); + // When query is an array of SQL conditions, doc may not contain an id. + // Fall back to a generic message to avoid misleading "id=undefined" errors. + const idHint = + typeof query === "string" ? query : (doc as any).id ?? "(unknown)"; + throw new NotFoundError(`${this.name} id=${idHint} not found`); } return res; }