@tracepanel/js 0.3.3 → 0.4.0

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 (74) hide show
  1. package/README.md +71 -4
  2. package/dist/agent.d.ts +25 -2
  3. package/dist/agent.js +75 -24
  4. package/dist/agent.js.map +1 -1
  5. package/dist/body.d.ts +32 -0
  6. package/dist/body.js +314 -0
  7. package/dist/body.js.map +1 -0
  8. package/dist/browser.d.ts +2 -2
  9. package/dist/browser.js +15 -7
  10. package/dist/browser.js.map +1 -1
  11. package/dist/bullmq.d.ts +76 -1
  12. package/dist/bullmq.js +215 -6
  13. package/dist/bullmq.js.map +1 -1
  14. package/dist/bun.js +81 -11
  15. package/dist/bun.js.map +1 -1
  16. package/dist/config.d.ts +20 -0
  17. package/dist/config.js +13 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/console.d.ts +5 -0
  20. package/dist/console.js +16 -0
  21. package/dist/console.js.map +1 -1
  22. package/dist/express.js +94 -23
  23. package/dist/express.js.map +1 -1
  24. package/dist/headers.js +54 -8
  25. package/dist/headers.js.map +1 -1
  26. package/dist/inspector.d.ts +9 -0
  27. package/dist/inspector.js +47 -0
  28. package/dist/inspector.js.map +1 -0
  29. package/dist/locals.d.ts +51 -0
  30. package/dist/locals.js +269 -0
  31. package/dist/locals.js.map +1 -0
  32. package/dist/loggers.d.ts +50 -0
  33. package/dist/loggers.js +201 -0
  34. package/dist/loggers.js.map +1 -0
  35. package/dist/model.d.ts +23 -2
  36. package/dist/model.js.map +1 -1
  37. package/dist/next-widget.d.ts +13 -2
  38. package/dist/next-widget.js +16 -6
  39. package/dist/next-widget.js.map +1 -1
  40. package/dist/next.d.ts +6 -0
  41. package/dist/next.js +63 -2
  42. package/dist/next.js.map +1 -1
  43. package/dist/nuxt-plugin.d.ts +1 -0
  44. package/dist/nuxt-plugin.js +6 -0
  45. package/dist/nuxt-plugin.js.map +1 -1
  46. package/dist/processor.d.ts +23 -2
  47. package/dist/processor.js +65 -17
  48. package/dist/processor.js.map +1 -1
  49. package/dist/profile.d.ts +63 -0
  50. package/dist/profile.js +300 -0
  51. package/dist/profile.js.map +1 -0
  52. package/dist/proxy.d.ts +22 -0
  53. package/dist/proxy.js +72 -0
  54. package/dist/proxy.js.map +1 -0
  55. package/dist/request.d.ts +61 -0
  56. package/dist/request.js +244 -0
  57. package/dist/request.js.map +1 -0
  58. package/dist/runtime.d.ts +9 -0
  59. package/dist/runtime.js.map +1 -1
  60. package/dist/session.d.ts +10 -0
  61. package/dist/session.js +45 -0
  62. package/dist/session.js.map +1 -0
  63. package/dist/setup.js +10 -1
  64. package/dist/setup.js.map +1 -1
  65. package/dist/stack.d.ts +27 -3
  66. package/dist/stack.js +106 -9
  67. package/dist/stack.js.map +1 -1
  68. package/dist/vite.d.ts +1 -1
  69. package/dist/vite.js +2 -45
  70. package/dist/vite.js.map +1 -1
  71. package/dist/widget.d.ts +24 -0
  72. package/dist/widget.js +66 -3
  73. package/dist/widget.js.map +1 -1
  74. package/package.json +17 -5
package/README.md CHANGED
@@ -122,6 +122,19 @@ export default function RootLayout({ children }) {
122
122
  A request's handler is its page or route handler, named by its route
123
123
  (`/api/books/[id]`).
124
124
 
125
+ In development the app's server also serves the console at `/__tracepanel__/`
126
+ on its own origin, for this machine only, and the badge loads from there.
127
+ `<Tracepanel />` records the pages in the browser too, as the Vite plugin
128
+ does (see below). It takes the same options:
129
+
130
+ ```tsx
131
+ <Tracepanel browser={{ service: "shop-web", propagateTo: ["http://127.0.0.1:8000"] }} />
132
+ ```
133
+
134
+ The recording is inline in `<head>`, so it wraps `fetch` before the app's
135
+ scripts run, even a client that keeps `fetch` from when it is made
136
+ (`openapi-fetch`). `browser={false}` leaves it out.
137
+
125
138
  ### Nuxt
126
139
 
127
140
  Add the module and start `nuxt dev` with Tracepanel loaded, so it hooks the
@@ -212,10 +225,35 @@ page's, such as a dev server's client.
212
225
 
213
226
  ## What it records
214
227
 
215
- - HTTP requests, with the route and the handler that served them.
228
+ - HTTP requests, with the route and the handler that served them, and what
229
+ each one carried: its headers, query and cookies, the body as far as the
230
+ app read it, and the response's headers. Values under names such as
231
+ `password`, `token`, `session` or `csrf` are masked, and they never leave
232
+ your machine. A body is what the app read, up to 16 KB: in Express and
233
+ Nest what a body parser read (`req.body`, an upload's files by name and
234
+ size); in Next.js, Nuxt and under `withTracepanel()` the bytes the app's
235
+ own reads took from the request's stream, a copy of their start kept as
236
+ they pass. JSON and forms have their secrets masked, text is cut at
237
+ 16 KB, and binary bodies are left out. A multipart form keeps its fields
238
+ and its files by name and size, never their contents, however large the
239
+ upload. JSON or a URL-encoded form past 16 KB is left out, since its
240
+ secrets can't be masked from a part of it. A body the app never reads is
241
+ not recorded, and Tracepanel never reads it or waits for it.
242
+ - The request's session as the handler left it: express-session's or
243
+ cookie-session's `req.session` in Express and Nest, and in Nuxt the
244
+ sessions h3's `useSession()` read (nuxt-auth-utils' among them). Each
245
+ value is text, masked under a sensitive name and below one, and
246
+ nuxt-auth-utils' `secure` data always is. Next.js and Bun have no
247
+ session of their own, and a sealed cookie (iron-session, Auth.js) takes
248
+ the app's secret to read, so none is recorded there: `setUser()` names
249
+ the signed-in user instead.
250
+ - A form's POST that redirects to another page: the panel on that page
251
+ lists the POST before it.
216
252
  - SQL from `pg` and `mysql2` (and so Drizzle, Knex, Sequelize, TypeORM and
217
253
  Prisma's driver adapters), with the line of your code that ran each
218
- statement. Prisma's operations show as steps.
254
+ statement. A statement no code of yours made, such as a session store's,
255
+ names the library code that asked for it, past the driver and the ORM;
256
+ so do Redis and MongoDB commands. Prisma's operations show as steps.
219
257
  - Transactions: BEGIN … COMMIT (or ROLLBACK) on a `pg` client or a `mysql2`
220
258
  connection, with its statements and the calls made inside it, and its
221
259
  savepoints.
@@ -224,8 +262,24 @@ page's, such as a dev server's client.
224
262
  - Outgoing HTTP calls: `fetch()`, and `node:http` clients such as axios, on
225
263
  Node and on Bun.
226
264
  - BullMQ: each job a worker runs is a task, each job the app adds a step.
227
- - `console` calls made during a request, and Nest's `Logger`.
228
- - Errors thrown in a handler, with your frames and their source.
265
+ While a job is in flight, the console's Tasks page lists it under Now:
266
+ queued, running in its worker, or waiting for its next attempt, and the
267
+ workers that run them.
268
+ - Logs made during a request: `console` calls, Nest's `Logger`, and pino's
269
+ and winston's loggers, with their fields and the error they carry.
270
+ - Errors thrown in a handler, with your frames, their source and their
271
+ local variables. Node's inspector reads the variables as the error is
272
+ thrown, in your own frames only, while a request runs; a value under a
273
+ name such as `password` or `token` is masked, and a long one is cut. A
274
+ caller waiting on an `await` has none. Each error read costs about a
275
+ millisecond, at most 50 a second; a process under a debugger
276
+ (`--inspect`) is left alone.
277
+ - Where a request's time goes in code, for the console's flame graph, when
278
+ it asks: the panel's Profile toggle, or an `X-Tracepanel-Profile: 1`
279
+ header. V8's profiler samples the whole process, and one event loop runs
280
+ every request at once, so a profile keeps the samples taken while its
281
+ request was the only one running, and counts the rest
282
+ (`tracepanel.dropped_samples`). Time spent waiting on I/O is not in it.
229
283
  - The caller's trace, when a request carries a W3C `traceparent`: the agent
230
284
  links the two.
231
285
 
@@ -276,6 +330,11 @@ Environment variables, as in the Python SDK:
276
330
  | `TRACEPANEL_LONG_TRANSACTION_MS` | `500` | a long transaction |
277
331
  | `TRACEPANEL_QUEUE_WAIT_MS` | `1000` | a task that waited long for a worker |
278
332
  | `TRACEPANEL_LARGE_RESULT_ROWS` | `1000` | a query without a LIMIT that read too many rows |
333
+ | `TRACEPANEL_CAPTURE_REQUEST` | on | `0` stops keeping each request's headers, query, cookies and body |
334
+ | `TRACEPANEL_CAPTURE_LOCALS` | on | `0` stops reading an error's local variables |
335
+ | `TRACEPANEL_PROFILE` | off | `1` profiles every trace, not only a request that asks |
336
+ | `TRACEPANEL_PROFILE_ENABLED` | on | `0` profiles nothing, and the console offers no Profile toggle |
337
+ | `TRACEPANEL_PROFILE_INTERVAL_MS` | `1` | how often a profiled trace is sampled |
279
338
 
280
339
  ## Command line
281
340
 
@@ -285,6 +344,14 @@ Environment variables, as in the Python SDK:
285
344
  | `tracepanel dev` | runs the agent in the foreground, with the console on http://127.0.0.1:8765/ |
286
345
  | `tracepanel mcp` | gives an AI coding agent your traces over MCP |
287
346
 
347
+ ## Documentation
348
+
349
+ The documentation is at
350
+ [tracepanel.dev/docs/javascript](https://tracepanel.dev/docs/javascript):
351
+ installing, the integrations, the browser recording, settings and the command
352
+ line. The panel, the console and the issues are the same in every framework,
353
+ under [tracepanel.dev/docs](https://tracepanel.dev/docs).
354
+
288
355
  ## License
289
356
 
290
357
  Licensed under the [MIT License](LICENSE).
package/dist/agent.d.ts CHANGED
@@ -19,20 +19,43 @@ export declare class ConsoleUrl {
19
19
  private url;
20
20
  private checked;
21
21
  constructor(storeDir: string);
22
- get(): string;
22
+ /** `fresh`: read now, as a proxy to the console does for each request (a new agent listens on a new port). */
23
+ get(fresh?: boolean): string;
23
24
  }
24
- /** Batches traces to the agent in the background; a full queue drops a trace rather than slow a request down. */
25
+ /**
26
+ * A task event: a job queued, started, retried or finished, or a worker's heartbeat, with what that step knows (see
27
+ * bullmq.ts). The console's Live list of tasks in flight is made of them, before a task's trace exists.
28
+ */
29
+ export type TaskEvent = Record<string, unknown>;
30
+ /** Say in the hello that this app sends `name` (`live_tasks`). */
31
+ export declare function sends(name: string): void;
32
+ /**
33
+ * The first line to the agent: it finds the issues with this project's limits. What the app offers the console, said
34
+ * here only: it can EXPLAIN a query on its database, its traces hold what each request carried while that is kept,
35
+ * and a request that asks is profiled while profiling is on (the console's Profile toggle shows then); and what it
36
+ * sends besides traces (`live_tasks`).
37
+ */
38
+ export declare function hello(config: Config): Record<string, unknown>;
39
+ /**
40
+ * Batches traces and task events to the agent in the background; a full queue drops one rather than slow a request
41
+ * down.
42
+ */
25
43
  export declare class Sender {
26
44
  private readonly config;
27
45
  private readonly starter;
28
46
  private queue;
47
+ private events;
29
48
  private timer;
30
49
  private socket;
31
50
  private connecting;
32
51
  private retryAt;
33
52
  private warned;
53
+ /** What the connection's hello said the app sends: a module that sends more loaded after it (bullmq) reconnects. */
54
+ private said;
34
55
  constructor(config: Config, starter: Starter);
35
56
  submit(trace: Trace): void;
57
+ /** A task event, sent with the next batch: not counted with the traces, and dropped while no agent answers. */
58
+ submitEvent(event: TaskEvent): void;
36
59
  private flushSoon;
37
60
  private flush;
38
61
  private connection;
package/dist/agent.js CHANGED
@@ -1,12 +1,14 @@
1
1
  // Traces go to the project's agent, which finds their issues, keeps them and serves the console. Its addresses are in
2
2
  // <store>/agent.addr and console.addr. The wire: a hello line, then frames of a 4-byte big-endian length and a JSON
3
- // array of traces. The agent starts on demand, as the other SDKs start it, and outlives the app's restarts.
3
+ // array of traces, or an object of task events (`{"tasks": [...]}`: a queue's jobs while they are in flight). The
4
+ // agent starts on demand, as the other SDKs start it, and outlives the app's restarts.
4
5
  import { spawn } from "node:child_process";
5
6
  import { closeSync, mkdirSync, openSync, readFileSync, rmSync } from "node:fs";
6
7
  import { createRequire } from "node:module";
7
8
  import { connect } from "node:net";
8
9
  import { join } from "node:path";
9
10
  import { explain } from "./explain.js";
11
+ import { available as canProfile } from "./profile.js";
10
12
  const PROTOCOL = 1;
11
13
  const QUEUE_SIZE = 1000;
12
14
  const BATCH_SIZE = 50;
@@ -111,27 +113,60 @@ export class ConsoleUrl {
111
113
  constructor(storeDir) {
112
114
  this.storeDir = storeDir;
113
115
  }
114
- get() {
116
+ /** `fresh`: read now, as a proxy to the console does for each request (a new agent listens on a new port). */
117
+ get(fresh = false) {
115
118
  const configured = process.env.TRACEPANEL_CONSOLE_URL;
116
119
  if (configured)
117
120
  return configured.endsWith("/") ? configured : `${configured}/`;
118
- if (!this.url || Date.now() - this.checked > CONSOLE_CHECK_MS) {
121
+ if (fresh || !this.url || Date.now() - this.checked > CONSOLE_CHECK_MS) {
119
122
  this.checked = Date.now();
120
123
  this.url = readAddress(join(this.storeDir, "console.addr"));
121
124
  }
122
125
  return this.url;
123
126
  }
124
127
  }
125
- /** Batches traces to the agent in the background; a full queue drops a trace rather than slow a request down. */
128
+ /** What the integrations send the agent beyond traces (`live_tasks`: BullMQ's task events), as they say on load. */
129
+ const SENDS = new Set();
130
+ /** Say in the hello that this app sends `name` (`live_tasks`). */
131
+ export function sends(name) {
132
+ SENDS.add(name);
133
+ }
134
+ /**
135
+ * The first line to the agent: it finds the issues with this project's limits. What the app offers the console, said
136
+ * here only: it can EXPLAIN a query on its database, its traces hold what each request carried while that is kept,
137
+ * and a request that asks is profiled while profiling is on (the console's Profile toggle shows then); and what it
138
+ * sends besides traces (`live_tasks`).
139
+ */
140
+ export function hello(config) {
141
+ return {
142
+ protocol: PROTOCOL,
143
+ max_traces: config.maxTraces,
144
+ thresholds: config.thresholds,
145
+ service: config.service,
146
+ capabilities: [
147
+ "explain",
148
+ ...(config.captureRequest ? ["request"] : []),
149
+ ...(config.profileEnabled && canProfile() ? ["profile"] : []),
150
+ ...[...SENDS].sort(),
151
+ ],
152
+ };
153
+ }
154
+ /**
155
+ * Batches traces and task events to the agent in the background; a full queue drops one rather than slow a request
156
+ * down.
157
+ */
126
158
  export class Sender {
127
159
  config;
128
160
  starter;
129
161
  queue = [];
162
+ events = [];
130
163
  timer;
131
164
  socket;
132
165
  connecting;
133
166
  retryAt = 0;
134
167
  warned = false;
168
+ /** What the connection's hello said the app sends: a module that sends more loaded after it (bullmq) reconnects. */
169
+ said = "";
135
170
  constructor(config, starter) {
136
171
  this.config = config;
137
172
  this.starter = starter;
@@ -145,6 +180,16 @@ export class Sender {
145
180
  else
146
181
  this.flushSoon(BATCH_WAIT_MS);
147
182
  }
183
+ /** A task event, sent with the next batch: not counted with the traces, and dropped while no agent answers. */
184
+ submitEvent(event) {
185
+ if (this.events.length >= QUEUE_SIZE)
186
+ return;
187
+ this.events.push(event);
188
+ if (this.events.length >= BATCH_SIZE)
189
+ this.flushSoon(0);
190
+ else
191
+ this.flushSoon(BATCH_WAIT_MS);
192
+ }
148
193
  flushSoon(delay) {
149
194
  if (this.timer && delay > 0)
150
195
  return;
@@ -157,19 +202,25 @@ export class Sender {
157
202
  }
158
203
  async flush() {
159
204
  const batch = this.queue.splice(0, BATCH_SIZE);
160
- if (batch.length === 0)
205
+ const events = this.events.splice(0, BATCH_SIZE);
206
+ if (batch.length === 0 && events.length === 0)
161
207
  return;
162
208
  const socket = await this.connection();
163
209
  if (!socket)
164
210
  return;
165
- const data = Buffer.from(JSON.stringify(batch));
166
- const length = Buffer.alloc(4);
167
- length.writeUInt32BE(data.length);
168
- socket.write(Buffer.concat([length, data]));
169
- if (this.queue.length > 0)
211
+ if (batch.length > 0)
212
+ writeFrame(socket, batch);
213
+ if (events.length > 0)
214
+ writeFrame(socket, { tasks: events });
215
+ if (this.queue.length > 0 || this.events.length > 0)
170
216
  this.flushSoon(0);
171
217
  }
172
218
  async connection() {
219
+ if (this.socket && !this.socket.destroyed && this.said !== saying(this.config)) {
220
+ // The hello is the one place the app says what it sends: a new connection says it again.
221
+ this.socket.destroy();
222
+ this.socket = undefined;
223
+ }
173
224
  if (this.socket && !this.socket.destroyed)
174
225
  return this.socket;
175
226
  if (Date.now() < this.retryAt)
@@ -220,16 +271,8 @@ export class Sender {
220
271
  socket.setTimeout(500, fail);
221
272
  socket.once("error", fail);
222
273
  socket.once("connect", () => {
223
- // The agent finds the issues with this project's limits.
224
- // It can EXPLAIN a query on the app's database for the console.
225
- const hello = {
226
- protocol: PROTOCOL,
227
- max_traces: this.config.maxTraces,
228
- thresholds: this.config.thresholds,
229
- service: this.config.service,
230
- capabilities: ["explain"],
231
- };
232
- socket.write(`${JSON.stringify(hello)}\n`);
274
+ this.said = saying(this.config);
275
+ socket.write(`${JSON.stringify(hello(this.config))}\n`);
233
276
  });
234
277
  let received = Buffer.alloc(0);
235
278
  socket.on("data", function onData(chunk) {
@@ -255,6 +298,17 @@ export class Sender {
255
298
  });
256
299
  }
257
300
  }
301
+ /** What a hello says the app sends, to tell when it says more. */
302
+ function saying(config) {
303
+ return JSON.stringify(hello(config).capabilities);
304
+ }
305
+ /** One frame: a 4-byte big-endian length, then the JSON. */
306
+ function writeFrame(socket, payload) {
307
+ const data = Buffer.from(JSON.stringify(payload));
308
+ const length = Buffer.alloc(4);
309
+ length.writeUInt32BE(data.length);
310
+ socket.write(Buffer.concat([length, data]));
311
+ }
258
312
  function hostPort(value) {
259
313
  const at = value.lastIndexOf(":");
260
314
  return { host: value.slice(0, at).replace(/^\[|\]$/g, ""), port: Number(value.slice(at + 1)) };
@@ -289,10 +343,7 @@ async function answer(socket, request) {
289
343
  catch (error) {
290
344
  reply = { answer: request.id, error: error instanceof Error ? error.message : String(error) };
291
345
  }
292
- const data = Buffer.from(JSON.stringify(reply));
293
- const length = Buffer.alloc(4);
294
- length.writeUInt32BE(data.length);
295
346
  if (!socket.destroyed)
296
- socket.write(Buffer.concat([length, data]));
347
+ writeFrame(socket, reply);
297
348
  }
298
349
  //# sourceMappingURL=agent.js.map
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/body.d.ts ADDED
@@ -0,0 +1,32 @@
1
+ import type { IncomingMessage } from "node:http";
2
+ import type { Attrs } from "./model.js";
3
+ /** What the app read of a request's body, kept as it passed: its start, its size, and whether it read it all. */
4
+ export declare class BodyTap {
5
+ private readonly contentType;
6
+ private readonly kept;
7
+ private size;
8
+ private ended;
9
+ private readonly form;
10
+ constructor(contentType: string);
11
+ /** A piece of the body on its way to the app. */
12
+ feed(chunk: unknown): void;
13
+ /** The app read the body to its end. */
14
+ end(): void;
15
+ /** http.request.body, as far as the app read it. */
16
+ attrs(): Attrs;
17
+ }
18
+ /**
19
+ * A Node request whose body pieces pass the tap on their way to the app: every reader of a stream (a `data`
20
+ * listener, `read()`, async iteration, `pipe()`) gets them through its `emit("data")`. The tap is the request's from
21
+ * then on (`tapOf`). A framework that puts another stream's `emit` on the request (Next.js does, for a body a
22
+ * middleware read too) gets it tapped as well.
23
+ */
24
+ export declare function tapIncoming(req: IncomingMessage): BodyTap;
25
+ /** The tap on a Node request's body, if it has one. */
26
+ export declare function tapOf(req: IncomingMessage | undefined): BodyTap | undefined;
27
+ /**
28
+ * A fetch Request whose body passes the tap on its way to the handler: `request.body` and its readers (`text()`,
29
+ * `json()`, `formData()`, ...) read through it, piece by piece as the handler pulls them. The request stays the one
30
+ * the server made (Bun's `params` and `cookies` with it); `clone()` is its own, untapped.
31
+ */
32
+ export declare function tapRequest(request: Request): BodyTap | undefined;