@descryy/runtime-database-observation 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/index.d.ts +8 -6
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/mysql-row-collector.d.ts +33 -19
  6. package/dist/mysql-row-collector.d.ts.map +1 -1
  7. package/dist/mysql-row-collector.js +480 -26
  8. package/dist/mysql-row-collector.js.map +1 -1
  9. package/dist/postgres-log-parser.d.ts +15 -29
  10. package/dist/postgres-log-parser.d.ts.map +1 -1
  11. package/dist/postgres-log-parser.js +103 -32
  12. package/dist/postgres-log-parser.js.map +1 -1
  13. package/dist/postgres-log-source.d.ts +4 -0
  14. package/dist/postgres-log-source.d.ts.map +1 -1
  15. package/dist/postgres-log-source.js +196 -36
  16. package/dist/postgres-log-source.js.map +1 -1
  17. package/dist/postgres-query-collector.d.ts.map +1 -1
  18. package/dist/postgres-query-collector.js +43 -13
  19. package/dist/postgres-query-collector.js.map +1 -1
  20. package/dist/postgres-row-collector.d.ts +7 -0
  21. package/dist/postgres-row-collector.d.ts.map +1 -1
  22. package/dist/postgres-row-collector.js +112 -17
  23. package/dist/postgres-row-collector.js.map +1 -1
  24. package/dist/prisma-instrumentation.d.ts +20 -0
  25. package/dist/prisma-instrumentation.d.ts.map +1 -0
  26. package/dist/prisma-instrumentation.js +99 -0
  27. package/dist/prisma-instrumentation.js.map +1 -0
  28. package/dist/query-collector.d.ts +2 -0
  29. package/dist/query-collector.d.ts.map +1 -1
  30. package/dist/query-collector.js +38 -13
  31. package/dist/query-collector.js.map +1 -1
  32. package/dist/query-line-parser.d.ts.map +1 -1
  33. package/dist/query-line-parser.js +2 -1
  34. package/dist/query-line-parser.js.map +1 -1
  35. package/dist/query-marker.d.ts +10 -1
  36. package/dist/query-marker.d.ts.map +1 -1
  37. package/dist/query-marker.js +2 -0
  38. package/dist/query-marker.js.map +1 -1
  39. package/dist/row-capture-policy.d.ts +31 -0
  40. package/dist/row-capture-policy.d.ts.map +1 -0
  41. package/dist/row-capture-policy.js +95 -0
  42. package/dist/row-capture-policy.js.map +1 -0
  43. package/dist/smoke.d.ts.map +1 -1
  44. package/dist/smoke.js +2 -0
  45. package/dist/smoke.js.map +1 -1
  46. package/dist/sqlite-instrumentation.js +9 -2
  47. package/dist/sqlite-instrumentation.js.map +1 -1
  48. package/dist/sqlite-row-snapshot.d.ts +4 -0
  49. package/dist/sqlite-row-snapshot.d.ts.map +1 -1
  50. package/dist/sqlite-row-snapshot.js +153 -25
  51. package/dist/sqlite-row-snapshot.js.map +1 -1
  52. package/dist/table-extraction.d.ts.map +1 -1
  53. package/dist/table-extraction.js +124 -5
  54. package/dist/table-extraction.js.map +1 -1
  55. package/package.json +9 -8
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-query-collector.js","sourceRoot":"","sources":["../src/postgres-query-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgres-query-collector.js","sourceRoot":"","sources":["../src/postgres-query-collector.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@
36
36
  * refuses by name, same as a failed precondition check.
37
37
  */
38
38
  import type { Collector } from "@descryy/runtime-contracts";
39
+ import { type RowCapturePolicy } from "./row-capture-policy.ts";
39
40
  /** The narrow slice of `pg`'s `Client` this module calls — same shape `live-schema.ts` uses, small enough to be satisfied by a test double with no real database involved. */
40
41
  export interface PgRowClient {
41
42
  connect(): Promise<void>;
@@ -43,7 +44,9 @@ export interface PgRowClient {
43
44
  rows: readonly Record<string, unknown>[];
44
45
  }>;
45
46
  end(): Promise<void>;
47
+ on?(event: "error", listener: (error: Error) => void): unknown;
46
48
  }
49
+ export declare const MAX_ROW_CHANGES_PER_STOP = 50000;
47
50
  export interface PostgresRowChangeCollectorOptions {
48
51
  readonly connectionString: string;
49
52
  /** Which owned system this collector's evidence should be attributed to (plan §16.7). */
@@ -51,6 +54,9 @@ export interface PostgresRowChangeCollectorOptions {
51
54
  readonly processId?: string;
52
55
  /** Test/advanced seam — defaults to a real `pg.Client` loaded dynamically. */
53
56
  readonly clientFactory?: (connectionString: string) => Promise<PgRowClient> | PgRowClient;
57
+ readonly rowCapture?: RowCapturePolicy;
58
+ readonly connectTimeoutMs?: number;
59
+ readonly stopQueryTimeoutMs?: number;
54
60
  }
55
61
  type PgClientConstructor = new (config: unknown) => PgRowClient;
56
62
  /**
@@ -64,6 +70,7 @@ type PgClientConstructor = new (config: unknown) => PgRowClient;
64
70
  export declare function pgClientConstructor(loaded: unknown): PgClientConstructor;
65
71
  /** Exported for this package's release smoke hook (`smoke.ts`), which must exercise the real default path, not a helper it calls. */
66
72
  export declare function defaultClientFactory(connectionString: string): Promise<PgRowClient>;
73
+ export declare function makeSlotName(processId: string): string;
67
74
  export declare function createPostgresRowChangeCollector(options: PostgresRowChangeCollectorOptions): Collector;
68
75
  export {};
69
76
  //# sourceMappingURL=postgres-row-collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-row-collector.d.ts","sourceRoot":"","sources":["../src/postgres-row-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAmF,MAAM,4BAA4B,CAAC;AAK7I,8KAA8K;AAC9K,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;IACxG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;CAC3F;AAMD,KAAK,mBAAmB,GAAG,KAAK,MAAM,EAAE,OAAO,KAAK,WAAW,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,mBAAmB,CAOxE;AAED,qIAAqI;AACrI,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAOzF;AAaD,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iCAAiC,GAAG,SAAS,CAsMtG"}
1
+ {"version":3,"file":"postgres-row-collector.d.ts","sourceRoot":"","sources":["../src/postgres-row-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAmF,MAAM,4BAA4B,CAAC;AAI7I,OAAO,EAA0D,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAExH,8KAA8K;AAC9K,MAAM,WAAW,WAAW;IAC1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;IACxG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;CAChE;AAED,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAuB/C,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC;IAC1F,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAMD,KAAK,mBAAmB,GAAG,KAAK,MAAM,EAAE,OAAO,KAAK,WAAW,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,mBAAmB,CAOxE;AAED,qIAAqI;AACrI,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAazF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUtD;AAcD,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,iCAAiC,GAAG,SAAS,CAsQtG"}
@@ -43,8 +43,30 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
43
43
  }
44
44
  return path;
45
45
  };
46
+ import { createHash, randomBytes } from "node:crypto";
46
47
  import { parseTestDecodingLine } from "./postgres-decoding-parser.js";
47
48
  import { COLLECTOR_VERSION } from "./collector-version.js";
49
+ import { mergeTruncated, mergeWithheld, resolveRowCapturePolicy } from "./row-capture-policy.js";
50
+ export const MAX_ROW_CHANGES_PER_STOP = 50_000;
51
+ const DEFAULT_CONNECT_TIMEOUT_MS = 10_000;
52
+ const DEFAULT_STOP_QUERY_TIMEOUT_MS = 30_000;
53
+ const STATEMENT_TIMEOUT_MS = 30_000;
54
+ const DROP_SLOT_TIMEOUT_MS = 5_000;
55
+ const MAX_SLOT_NAME_BYTES = 63;
56
+ const SLOT_NAME_PREFIX = "descry_rowcap_";
57
+ const SLOT_NAME_READABLE_CHARS = 16;
58
+ class OperationTimeoutError extends Error {
59
+ }
60
+ function withinTimeout(work, timeoutMs, message) {
61
+ let timer;
62
+ const expired = new Promise((_, reject) => {
63
+ timer = setTimeout(() => reject(new OperationTimeoutError(message)), timeoutMs);
64
+ });
65
+ return Promise.race([work, expired]).finally(() => clearTimeout(timer));
66
+ }
67
+ function describeError(error) {
68
+ return error instanceof Error ? `${error.name}: ${error.message}` : String(error);
69
+ }
48
70
  const EVENT_TYPE = "DATABASE_QUERY";
49
71
  /**
50
72
  * The `Client` constructor from a dynamically imported `pg`. `pg` is CommonJS,
@@ -69,11 +91,30 @@ export async function defaultClientFactory(connectionString) {
69
91
  // an ordinary dynamic import at runtime either way.
70
92
  const moduleName = "pg";
71
93
  const Client = pgClientConstructor(await import(__rewriteRelativeImportExtension(moduleName)));
72
- return new Client({ connectionString });
94
+ return new Client({
95
+ connectionString,
96
+ connectionTimeoutMillis: DEFAULT_CONNECT_TIMEOUT_MS,
97
+ statement_timeout: STATEMENT_TIMEOUT_MS,
98
+ query_timeout: STATEMENT_TIMEOUT_MS + 5_000,
99
+ keepAlive: true,
100
+ });
101
+ }
102
+ export function makeSlotName(processId) {
103
+ const readable = processId.toLowerCase().replace(/[^a-z0-9_]/g, "_").slice(0, SLOT_NAME_READABLE_CHARS);
104
+ const digest = createHash("sha256").update(processId).digest("hex").slice(0, 8);
105
+ const issuedAt = Date.now().toString(36);
106
+ const nonce = randomBytes(3).toString("hex");
107
+ const name = `${SLOT_NAME_PREFIX}${readable}_${digest}_${issuedAt}_${nonce}`;
108
+ if (name.length > MAX_SLOT_NAME_BYTES) {
109
+ throw new Error(`replication slot name "${name}" exceeds ${MAX_SLOT_NAME_BYTES} bytes`);
110
+ }
111
+ return name;
73
112
  }
74
- function makeSlotName(processId) {
75
- const safe = processId.replace(/[^a-zA-Z0-9_]/g, "_").slice(0, 40);
76
- return `descry_rowcap_${safe}_${Date.now()}_${Math.floor(Math.random() * 1_000_000)}`;
113
+ function isMissingSlotError(error) {
114
+ if (typeof error !== "object" || error === null)
115
+ return false;
116
+ const { code, message } = error;
117
+ return code === "42704" || (typeof message === "string" && /does not exist/i.test(message));
77
118
  }
78
119
  function replidentToCompleteness(code) {
79
120
  if (code === "f")
@@ -90,6 +131,12 @@ export function createPostgresRowChangeCollector(options) {
90
131
  let savedContext = null;
91
132
  let refusalReason = null;
92
133
  let identityByTable = new Map();
134
+ let connectionLost = null;
135
+ let startGeneration = 0;
136
+ const connectTimeoutMs = options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS;
137
+ const stopQueryTimeoutMs = options.stopQueryTimeoutMs ?? DEFAULT_STOP_QUERY_TIMEOUT_MS;
138
+ const policyResolution = resolveRowCapturePolicy(options.rowCapture);
139
+ const rowPolicy = policyResolution.ok ? policyResolution.policy : null;
93
140
  function computeCapabilities() {
94
141
  const unrelated = {
95
142
  availability: "unavailable",
@@ -99,9 +146,10 @@ export function createPostgresRowChangeCollector(options) {
99
146
  ? { availability: "unavailable", reason: refusalReason }
100
147
  : {
101
148
  availability: "available",
102
- reason: "row-level INSERT/UPDATE/DELETE via a temporary logical replication slot (test_decoding); " +
149
+ reason: `row-level INSERT/UPDATE/DELETE via a temporary logical replication slot${slot === null ? "" : ` "${slot}"`} (test_decoding); ` +
103
150
  "before-values are full only for tables with REPLICA IDENTITY FULL -- key-only or absent " +
104
- "otherwise, disclosed per row as beforeCompleteness.",
151
+ "otherwise, disclosed per row as beforeCompleteness. " +
152
+ (rowPolicy?.describe() ?? ""),
105
153
  };
106
154
  return {
107
155
  domObservation: unrelated,
@@ -117,7 +165,13 @@ export function createPostgresRowChangeCollector(options) {
117
165
  };
118
166
  }
119
167
  function emitRowChange(context, parsed, xid) {
168
+ if (rowPolicy !== null && !rowPolicy.allows(parsed.table, parsed.schema))
169
+ return;
120
170
  const completeness = identityByTable.get(`${parsed.schema}.${parsed.table}`) ?? "key-only";
171
+ const before = rowPolicy?.filterRow(parsed.before) ?? { row: parsed.before, withheld: [], truncated: [] };
172
+ const after = rowPolicy?.filterRow(parsed.after) ?? { row: parsed.after, withheld: [], truncated: [] };
173
+ const withheldColumns = mergeWithheld(before.withheld, after.withheld);
174
+ const truncatedColumns = mergeTruncated(before.truncated, after.truncated);
121
175
  context.emit({
122
176
  timestamp: new Date().toISOString(),
123
177
  source: "backend-process",
@@ -129,8 +183,10 @@ export function createPostgresRowChangeCollector(options) {
129
183
  schema: parsed.schema,
130
184
  table: parsed.table,
131
185
  op: parsed.op,
132
- before: parsed.before,
133
- after: parsed.after,
186
+ before: before.row,
187
+ after: after.row,
188
+ ...(withheldColumns.length > 0 ? { withheldColumns } : {}),
189
+ ...(truncatedColumns.length > 0 ? { truncatedColumns } : {}),
134
190
  xid: xid === undefined || xid === null ? null : String(xid),
135
191
  beforeCompleteness: completeness,
136
192
  },
@@ -173,14 +229,33 @@ export function createPostgresRowChangeCollector(options) {
173
229
  console.error(`[postgres-row-collector:${processId}] failed (${detail}) AND the failure could not be emitted: ${String(emitError)}`);
174
230
  }
175
231
  }
232
+ async function dropSlotExplicitly(activeClient, activeSlot) {
233
+ try {
234
+ await withinTimeout(activeClient.query("SELECT pg_drop_replication_slot($1)", [activeSlot]), DROP_SLOT_TIMEOUT_MS, `dropping the replication slot did not answer within ${DROP_SLOT_TIMEOUT_MS} ms`);
235
+ }
236
+ catch (error) {
237
+ if (isMissingSlotError(error))
238
+ return;
239
+ if (savedContext !== null) {
240
+ emitCollectorError(savedContext, `replication slot "${activeSlot}" could not be dropped explicitly (${describeError(error)}); it was created temporary and the server drops it when this connection closes`);
241
+ }
242
+ }
243
+ }
176
244
  async function closeClient() {
177
245
  if (client === null)
178
246
  return;
247
+ const closingClient = client;
248
+ const closingSlot = slot;
249
+ if (closingSlot !== null && connectionLost === null) {
250
+ await dropSlotExplicitly(closingClient, closingSlot);
251
+ }
179
252
  try {
180
- await client.end();
253
+ await closingClient.end();
181
254
  }
182
- catch {
183
- // Best-effort close -- the temporary slot drops on disconnect regardless.
255
+ catch (error) {
256
+ if (savedContext !== null) {
257
+ emitCollectorError(savedContext, `closing the database connection failed (${describeError(error)})`);
258
+ }
184
259
  }
185
260
  client = null;
186
261
  slot = null;
@@ -189,14 +264,28 @@ export function createPostgresRowChangeCollector(options) {
189
264
  collectorId: `postgres-row-collector:${processId}`,
190
265
  async start(context) {
191
266
  savedContext = context;
192
- let candidate;
267
+ if (!policyResolution.ok) {
268
+ refusalReason = policyResolution.reason;
269
+ return { available: false, reason: refusalReason };
270
+ }
271
+ let candidate = null;
272
+ connectionLost = null;
273
+ const generation = ++startGeneration;
193
274
  try {
194
275
  candidate = await clientFactory(options.connectionString);
195
- await candidate.connect();
276
+ const connecting = candidate;
277
+ connecting.on?.("error", (error) => {
278
+ if (generation !== startGeneration)
279
+ return;
280
+ connectionLost ??= describeError(error);
281
+ });
282
+ await withinTimeout(connecting.connect(), connectTimeoutMs, `did not connect within ${connectTimeoutMs} ms`);
196
283
  }
197
284
  catch (error) {
198
- const detail = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
285
+ const detail = error instanceof OperationTimeoutError ? error.message : describeError(error);
199
286
  refusalReason = `could not connect for row-level capture (${detail}); the query-text channel is unaffected.`;
287
+ if (candidate !== null)
288
+ await candidate.end().catch(() => undefined);
200
289
  return { available: false, reason: refusalReason };
201
290
  }
202
291
  client = candidate;
@@ -228,7 +317,7 @@ export function createPostgresRowChangeCollector(options) {
228
317
  identityByTable.set(`${String(r.schema)}.${String(r.table)}`, replidentToCompleteness(r.identity));
229
318
  }
230
319
  slot = makeSlotName(processId);
231
- await client.query("SELECT * FROM pg_create_logical_replication_slot($1, 'test_decoding', false, true)", [slot]);
320
+ await client.query("SELECT * FROM pg_create_logical_replication_slot($1, 'test_decoding', true)", [slot]);
232
321
  return { available: true };
233
322
  }
234
323
  catch (error) {
@@ -245,7 +334,13 @@ export function createPostgresRowChangeCollector(options) {
245
334
  const activeSlot = slot;
246
335
  const context = savedContext;
247
336
  try {
248
- const changes = await activeClient.query("SELECT xid, data FROM pg_logical_slot_get_changes($1, NULL, NULL)", [activeSlot]);
337
+ if (connectionLost !== null) {
338
+ throw new Error(`the database connection was lost during the run (${connectionLost}); row changes in this window were not captured`);
339
+ }
340
+ const changes = await withinTimeout(activeClient.query("SELECT xid, data FROM pg_logical_slot_get_changes($1, NULL, $2)", [activeSlot, MAX_ROW_CHANGES_PER_STOP]), stopQueryTimeoutMs, `the replication slot did not answer within ${stopQueryTimeoutMs} ms`);
341
+ if (changes.rows.length >= MAX_ROW_CHANGES_PER_STOP && context !== null) {
342
+ emitCollectorError(context, `the window held at least ${MAX_ROW_CHANGES_PER_STOP} row changes; only the first ${MAX_ROW_CHANGES_PER_STOP} were read and the rest were not captured`);
343
+ }
249
344
  for (const row of changes.rows) {
250
345
  const data = String(row.data ?? "");
251
346
  const xid = row.xid;
@@ -257,7 +352,7 @@ export function createPostgresRowChangeCollector(options) {
257
352
  }
258
353
  }
259
354
  catch (error) {
260
- const detail = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
355
+ const detail = error instanceof OperationTimeoutError || connectionLost !== null ? error.message : describeError(error);
261
356
  refusalReason = `could not read the replication slot: ${detail}`;
262
357
  if (context !== null)
263
358
  emitCollectorError(context, detail);
@@ -1 +1 @@
1
- {"version":3,"file":"postgres-row-collector.js","sourceRoot":"","sources":["../src/postgres-row-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgres-row-collector.js","sourceRoot":"","sources":["../src/postgres-row-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `--import`-loaded preload: observes the SQL Prisma runs. Prisma's query engine is native code
3
+ * of its own, so nothing that watches `node:sqlite` or a Node driver sees its statements.
4
+ *
5
+ * **Mechanism: Prisma's own tracing hook, not a patch.** A Prisma client looks for a tracing
6
+ * helper on `globalThis` (`V<major>_PRISMA_INSTRUMENTATION`, then `PRISMA_INSTRUMENTATION`) --
7
+ * the seam `@prisma/instrumentation` uses to feed OpenTelemetry. This preload puts a minimal
8
+ * helper there: it asks the engine to trace (a sampled `traceparent`), runs every operation's
9
+ * callback unchanged, and turns each `prisma:engine:db_query` span the engine hands back into one
10
+ * `QUERY_MARKER` line. Both hand-back methods are implemented: `dispatchEngineSpans` (Prisma 6+)
11
+ * and `createEngineSpan` (Prisma 5, which also needs `previewFeatures = ["tracing"]` in the
12
+ * schema before its client uses any helper -- not ours to edit, so without it nothing is seen,
13
+ * and the caller discloses that).
14
+ *
15
+ * **It never displaces the application's own tracing.** If the app installs a helper later
16
+ * (its own OpenTelemetry setup), that helper is kept and this one forwards to it, observing
17
+ * alongside. A span's outcome is not carried, so every line is `outcomeKnown: false`.
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=prisma-instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-instrumentation.d.ts","sourceRoot":"","sources":["../src/prisma-instrumentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * `--import`-loaded preload: observes the SQL Prisma runs. Prisma's query engine is native code
3
+ * of its own, so nothing that watches `node:sqlite` or a Node driver sees its statements.
4
+ *
5
+ * **Mechanism: Prisma's own tracing hook, not a patch.** A Prisma client looks for a tracing
6
+ * helper on `globalThis` (`V<major>_PRISMA_INSTRUMENTATION`, then `PRISMA_INSTRUMENTATION`) --
7
+ * the seam `@prisma/instrumentation` uses to feed OpenTelemetry. This preload puts a minimal
8
+ * helper there: it asks the engine to trace (a sampled `traceparent`), runs every operation's
9
+ * callback unchanged, and turns each `prisma:engine:db_query` span the engine hands back into one
10
+ * `QUERY_MARKER` line. Both hand-back methods are implemented: `dispatchEngineSpans` (Prisma 6+)
11
+ * and `createEngineSpan` (Prisma 5, which also needs `previewFeatures = ["tracing"]` in the
12
+ * schema before its client uses any helper -- not ours to edit, so without it nothing is seen,
13
+ * and the caller discloses that).
14
+ *
15
+ * **It never displaces the application's own tracing.** If the app installs a helper later
16
+ * (its own OpenTelemetry setup), that helper is kept and this one forwards to it, observing
17
+ * alongside. A span's outcome is not carried, so every line is `outcomeKnown: false`.
18
+ */
19
+ import { randomBytes } from "node:crypto";
20
+ import { QUERY_MARKER } from "./query-marker.js";
21
+ function emit(query) {
22
+ process.stdout.write(`${QUERY_MARKER} ${JSON.stringify(query)}\n`);
23
+ }
24
+ /** An OpenTelemetry HrTime (`[seconds, nanos]`) or a number of milliseconds, as milliseconds. */
25
+ function millis(time) {
26
+ if (Array.isArray(time) && typeof time[0] === "number" && typeof time[1] === "number")
27
+ return time[0] * 1000 + time[1] / 1e6;
28
+ return typeof time === "number" ? time : null;
29
+ }
30
+ /** One engine span onto a captured statement, or null for any span that is not a statement. */
31
+ function statementOf(span) {
32
+ if (typeof span !== "object" || span === null)
33
+ return null;
34
+ const s = span;
35
+ if (s["name"] !== "prisma:engine:db_query")
36
+ return null;
37
+ const attributes = (typeof s["attributes"] === "object" && s["attributes"] !== null ? s["attributes"] : {});
38
+ const sql = attributes["db.query.text"] ?? attributes["db.statement"];
39
+ if (typeof sql !== "string" || sql === "")
40
+ return null;
41
+ const start = millis(s["startTime"] ?? s["start_time"]);
42
+ const end = millis(s["endTime"] ?? s["end_time"]);
43
+ return { sql, method: "prisma", durationMs: start !== null && end !== null ? Math.max(0, end - start) : 0, success: true, error: null, outcomeKnown: false };
44
+ }
45
+ function observeSpans(spans) {
46
+ for (const span of spans ?? []) {
47
+ const statement = statementOf(span);
48
+ if (statement !== null)
49
+ emit(statement);
50
+ }
51
+ }
52
+ /** Ours, forwarding to `delegate` when the application installed its own. */
53
+ function helperOver(delegate) {
54
+ return {
55
+ isEnabled: () => true,
56
+ getTraceParent(context) {
57
+ const theirs = delegate();
58
+ // Theirs when present, so the app's own traces keep their ids; ours must be sampled
59
+ // (flags 01), or the engine records no spans.
60
+ if (theirs?.isEnabled() === true)
61
+ return theirs.getTraceParent(context);
62
+ return `00-${randomBytes(16).toString("hex")}-${randomBytes(8).toString("hex")}-01`;
63
+ },
64
+ getActiveContext: () => delegate()?.getActiveContext(),
65
+ runInChildSpan(nameOrOptions, callback) {
66
+ const theirs = delegate();
67
+ return theirs === undefined ? callback() : theirs.runInChildSpan(nameOrOptions, callback);
68
+ },
69
+ dispatchEngineSpans(spans) {
70
+ observeSpans(spans);
71
+ delegate()?.dispatchEngineSpans?.(spans);
72
+ },
73
+ createEngineSpan(event) {
74
+ observeSpans(event.spans);
75
+ delegate()?.createEngineSpan?.(event);
76
+ },
77
+ };
78
+ }
79
+ const PATCHED = Symbol.for("descry.database-observation.prisma-hooked");
80
+ const target = globalThis;
81
+ if (target[PATCHED] !== true) {
82
+ target[PATCHED] = true;
83
+ // Every major a client could look under, plus the unversioned key older clients read.
84
+ const keys = ["PRISMA_INSTRUMENTATION", ...[5, 6, 7, 8].map((major) => `V${major}_PRISMA_INSTRUMENTATION`)];
85
+ for (const key of keys) {
86
+ let appValue = target[key];
87
+ const ours = { helper: helperOver(() => appValue?.helper) };
88
+ Object.defineProperty(globalThis, key, {
89
+ configurable: true,
90
+ enumerable: false,
91
+ get: () => ours,
92
+ // The application's own instrumentation arriving later is kept, and forwarded to.
93
+ set(value) {
94
+ appValue = value;
95
+ },
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=prisma-instrumentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-instrumentation.js","sourceRoot":"","sources":["../src/prisma-instrumentation.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ import type { Collector } from "@descryy/runtime-contracts";
19
19
  import { type ProcessOutputSource } from "@descryy/runtime-backend-observation";
20
20
  /** Absolute path to the compiled preload, for a caller building `node --import <this> <app>`. Never imported directly -- loaded by Node itself, in the observed process, before that process's own code runs. */
21
21
  export declare const SQLITE_PRELOAD_MODULE_PATH: string;
22
+ /** The Prisma preload (`prisma-instrumentation.ts`), for a process whose database access goes through Prisma's own engine. Same `QUERY_MARKER` lines, read by the same collector. */
23
+ export declare const PRISMA_PRELOAD_MODULE_PATH: string;
22
24
  export interface DatabaseQueryCollectorOptions {
23
25
  readonly source: ProcessOutputSource;
24
26
  /** Which owned system this collector's evidence should be attributed to (plan §16.7). Null when not applicable. */
@@ -1 +1 @@
1
- {"version":3,"file":"query-collector.d.ts","sourceRoot":"","sources":["../src/query-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmF,MAAM,4BAA4B,CAAC;AAC7I,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAMvG,iNAAiN;AACjN,eAAO,MAAM,0BAA0B,QAAyE,CAAC;AAEjH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,mHAAmH;IACnH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyBD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,6BAA6B,GAAG,SAAS,CAgG9F"}
1
+ {"version":3,"file":"query-collector.d.ts","sourceRoot":"","sources":["../src/query-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAmF,MAAM,4BAA4B,CAAC;AAC7I,OAAO,EAA0E,KAAK,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAOxJ,iNAAiN;AACjN,eAAO,MAAM,0BAA0B,QAAyE,CAAC;AAEjH,qLAAqL;AACrL,eAAO,MAAM,0BAA0B,QAAyE,CAAC;AAEjH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,mHAAmH;IACnH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AA8BD,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,6BAA6B,GAAG,SAAS,CAqH9F"}
@@ -16,12 +16,15 @@
16
16
  * is real; this collector just isn't the one that calls it.
17
17
  */
18
18
  import { fileURLToPath } from "node:url";
19
- import { extractCorrelationIds } from "@descryy/runtime-backend-observation";
19
+ import { outputGapReason, outputGapEvidence, isOutputGap, extractCorrelationIds } from "@descryy/runtime-backend-observation";
20
20
  import { parseQueryLine } from "./query-line-parser.js";
21
21
  import { extractTargetTable } from "./table-extraction.js";
22
+ import { MAX_CAPTURED_STATEMENT_CHARS } from "./query-marker.js";
22
23
  import { COLLECTOR_VERSION } from "./collector-version.js";
23
24
  /** Absolute path to the compiled preload, for a caller building `node --import <this> <app>`. Never imported directly -- loaded by Node itself, in the observed process, before that process's own code runs. */
24
25
  export const SQLITE_PRELOAD_MODULE_PATH = fileURLToPath(new URL("./sqlite-instrumentation.js", import.meta.url));
26
+ /** The Prisma preload (`prisma-instrumentation.ts`), for a process whose database access goes through Prisma's own engine. Same `QUERY_MARKER` lines, read by the same collector. */
27
+ export const PRISMA_PRELOAD_MODULE_PATH = fileURLToPath(new URL("./prisma-instrumentation.js", import.meta.url));
25
28
  const EVENT_TYPE = "DATABASE_QUERY";
26
29
  function computeCapabilities() {
27
30
  const reason = "DatabaseQueryCollector observes DATABASE_QUERY events only.";
@@ -38,8 +41,12 @@ function computeCapabilities() {
38
41
  sourceMapping: status,
39
42
  stackCapture: status,
40
43
  processLifecycle: status,
41
- // RT-141 named this missing, deferred as RT-142 -- closed here (RT-146).
42
- databaseObservation: { availability: "available", reason: null },
44
+ databaseObservation: {
45
+ availability: "degraded",
46
+ reason: "queries are observed only through the node:sqlite and Prisma preloads; a process reaching its database through " +
47
+ "any other driver (pg, mysql2, better-sqlite3, Sequelize, Knex, TypeORM, or a non-Node runtime) produces no query " +
48
+ "evidence here, so an absence of queries is not evidence that none ran.",
49
+ },
43
50
  externalServiceObservation: { availability: "unavailable", reason: "DatabaseQueryCollector instruments node:sqlite only; outbound requests are ExternalRequestCollector's to observe (RT-146)." },
44
51
  };
45
52
  }
@@ -47,8 +54,11 @@ export function createDatabaseQueryCollector(options) {
47
54
  const capabilities = computeCapabilities();
48
55
  let consumeLoopDone;
49
56
  let consumptionFailure = null;
57
+ let droppedCharsTotal = 0;
50
58
  function emitCapturedQuery(query, context) {
51
- const { traceId, requestId } = extractCorrelationIds(query.sql);
59
+ const sqlTruncated = query.sql.length > MAX_CAPTURED_STATEMENT_CHARS || query.sqlTruncated === true;
60
+ const sql = query.sql.length > MAX_CAPTURED_STATEMENT_CHARS ? query.sql.slice(0, MAX_CAPTURED_STATEMENT_CHARS) : query.sql;
61
+ const { traceId, requestId } = extractCorrelationIds(sql);
52
62
  context.emit({
53
63
  timestamp: new Date().toISOString(),
54
64
  source: "backend-process",
@@ -56,12 +66,14 @@ export function createDatabaseQueryCollector(options) {
56
66
  process: options.source.processId,
57
67
  eventType: EVENT_TYPE,
58
68
  payload: {
59
- raw: query.sql,
69
+ raw: sql,
70
+ ...(sqlTruncated ? { rawTruncated: true } : {}),
60
71
  method: query.method,
61
72
  durationMs: query.durationMs,
62
73
  success: query.success,
63
74
  error: query.error,
64
- table: extractTargetTable(query.sql),
75
+ ...(query.outcomeKnown === false ? { outcomeKnown: false } : {}),
76
+ table: sqlTruncated ? null : extractTargetTable(sql),
65
77
  },
66
78
  traceId,
67
79
  requestId,
@@ -79,6 +91,17 @@ export function createDatabaseQueryCollector(options) {
79
91
  }
80
92
  async function consume(context) {
81
93
  for await (const line of options.source.lines) {
94
+ if (isOutputGap(line)) {
95
+ droppedCharsTotal += line.gap.droppedChars;
96
+ context.emit(outputGapEvidence({
97
+ collectorId: `database-query-collector:${options.source.processId}`,
98
+ collectorVersion: COLLECTOR_VERSION,
99
+ service: options.source.serviceName ?? options.service ?? null,
100
+ processId: options.source.processId,
101
+ droppedChars: line.gap.droppedChars,
102
+ }));
103
+ continue;
104
+ }
82
105
  const query = parseQueryLine(line.text);
83
106
  if (query !== null)
84
107
  emitCapturedQuery(query, context);
@@ -123,15 +146,17 @@ export function createDatabaseQueryCollector(options) {
123
146
  await consumeLoopDone;
124
147
  },
125
148
  capabilities() {
126
- if (consumptionFailure === null)
127
- return capabilities;
128
- return {
129
- ...capabilities,
130
- distributedTrace: {
149
+ if (consumptionFailure !== null) {
150
+ const stopped = {
131
151
  availability: "unavailable",
132
152
  reason: `consumption stopped early after an error (${consumptionFailure}); output after that point was never observed.`,
133
- },
134
- };
153
+ };
154
+ return { ...capabilities, distributedTrace: stopped, databaseObservation: stopped };
155
+ }
156
+ if (droppedCharsTotal > 0) {
157
+ return { ...capabilities, databaseObservation: { availability: "degraded", reason: outputGapReason(droppedCharsTotal) } };
158
+ }
159
+ return capabilities;
135
160
  },
136
161
  };
137
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-collector.js","sourceRoot":"","sources":["../src/query-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-collector.js","sourceRoot":"","sources":["../src/query-collector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query-line-parser.d.ts","sourceRoot":"","sources":["../src/query-line-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAc1F;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAUjE;AAED,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"query-line-parser.d.ts","sourceRoot":"","sources":["../src/query-line-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAe1F;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAUjE;AAED,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -16,7 +16,8 @@ function isCapturedQuery(value) {
16
16
  typeof v.method === "string" &&
17
17
  typeof v.durationMs === "number" &&
18
18
  typeof v.success === "boolean" &&
19
- (v.error === null || typeof v.error === "string"));
19
+ (v.error === null || typeof v.error === "string") &&
20
+ (v.outcomeKnown === undefined || v.outcomeKnown === false));
20
21
  }
21
22
  /**
22
23
  * `null` for a non-matching line AND for a line that starts with the