@tracepanel/js 0.0.0-stage → 0.2.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 (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +271 -2
  3. package/dist/agent.d.ts +42 -0
  4. package/dist/agent.js +249 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/api.d.ts +11 -0
  7. package/dist/api.js +34 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/browser.d.ts +25 -0
  10. package/dist/browser.js +438 -0
  11. package/dist/browser.js.map +1 -0
  12. package/dist/bullmq.d.ts +7 -0
  13. package/dist/bullmq.js +86 -0
  14. package/dist/bullmq.js.map +1 -0
  15. package/dist/bun.d.ts +15 -0
  16. package/dist/bun.js +114 -0
  17. package/dist/bun.js.map +1 -0
  18. package/dist/calls.d.ts +20 -0
  19. package/dist/calls.js +145 -0
  20. package/dist/calls.js.map +1 -0
  21. package/dist/cli.d.ts +2 -0
  22. package/dist/cli.js +39 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/config.d.ts +29 -0
  25. package/dist/config.js +48 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/console.d.ts +6 -0
  28. package/dist/console.js +44 -0
  29. package/dist/console.js.map +1 -0
  30. package/dist/express.d.ts +2 -0
  31. package/dist/express.js +77 -0
  32. package/dist/express.js.map +1 -0
  33. package/dist/frameworks.d.ts +2 -0
  34. package/dist/frameworks.js +39 -0
  35. package/dist/frameworks.js.map +1 -0
  36. package/dist/headers.d.ts +2 -0
  37. package/dist/headers.js +42 -0
  38. package/dist/headers.js.map +1 -0
  39. package/dist/index.d.ts +5 -0
  40. package/dist/index.js +3 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/logs.d.ts +8 -0
  43. package/dist/logs.js +54 -0
  44. package/dist/logs.js.map +1 -0
  45. package/dist/model.d.ts +57 -0
  46. package/dist/model.js +18 -0
  47. package/dist/model.js.map +1 -0
  48. package/dist/next-widget.d.ts +3 -0
  49. package/dist/next-widget.js +17 -0
  50. package/dist/next-widget.js.map +1 -0
  51. package/dist/next.d.ts +2 -0
  52. package/dist/next.js +16 -0
  53. package/dist/next.js.map +1 -0
  54. package/dist/nuxt-plugin.d.ts +24 -0
  55. package/dist/nuxt-plugin.js +39 -0
  56. package/dist/nuxt-plugin.js.map +1 -0
  57. package/dist/nuxt.d.ts +10 -0
  58. package/dist/nuxt.js +16 -0
  59. package/dist/nuxt.js.map +1 -0
  60. package/dist/processor.d.ts +105 -0
  61. package/dist/processor.js +482 -0
  62. package/dist/processor.js.map +1 -0
  63. package/dist/register.d.ts +1 -0
  64. package/dist/register.js +5 -0
  65. package/dist/register.js.map +1 -0
  66. package/dist/runtime.d.ts +17 -0
  67. package/dist/runtime.js +27 -0
  68. package/dist/runtime.js.map +1 -0
  69. package/dist/setup.d.ts +10 -0
  70. package/dist/setup.js +99 -0
  71. package/dist/setup.js.map +1 -0
  72. package/dist/sql.d.ts +3 -0
  73. package/dist/sql.js +18 -0
  74. package/dist/sql.js.map +1 -0
  75. package/dist/stack.d.ts +13 -0
  76. package/dist/stack.js +66 -0
  77. package/dist/stack.js.map +1 -0
  78. package/dist/vite.d.ts +36 -0
  79. package/dist/vite.js +139 -0
  80. package/dist/vite.js.map +1 -0
  81. package/dist/widget.d.ts +26 -0
  82. package/dist/widget.js +70 -0
  83. package/dist/widget.js.map +1 -0
  84. package/package.json +125 -4
@@ -0,0 +1,482 @@
1
+ // The span processor: the app traces itself with OpenTelemetry (its HTTP server, Express, its database driver), and
2
+ // each request's spans become one Tracepanel trace, sent to the agent when the request's span ends.
3
+ import { createHash } from "node:crypto";
4
+ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
5
+ import { httpCall, isMongo, isRedis, mongoCall, redisCall } from "./calls.js";
6
+ import { withVersion } from "./frameworks.js";
7
+ import { micros, newId } from "./model.js";
8
+ import { fingerprint, spanName, statement } from "./sql.js";
9
+ import { frames, origin } from "./stack.js";
10
+ // A request's span can end after the response does (Express ends an async handler's span when its promise settles):
11
+ // the trace goes out this long after the request's span ends, with the spans that ended meanwhile.
12
+ const LATE_SPANS_MS = 25;
13
+ // A request whose root span never ends (the client went away mid-stream and the framework didn't end it) is dropped
14
+ // after this long, so the open traces don't grow for ever.
15
+ const ABANDONED_MS = 10 * 60 * 1000;
16
+ // Spans that are bookkeeping, not work: Express's middleware and routers, a driver's connection checkouts, and
17
+ // Nest's inner handler span (the same call as its request context span, which names the controller).
18
+ const SKIPPED_EXPRESS = new Set(["middleware", "router"]);
19
+ const SKIPPED_NEST = new Set(["handler", "app_creation"]);
20
+ // Next.js's own bookkeeping: finding and loading the route's modules, the first byte, metadata.
21
+ const SKIPPED_NEXT = new Set([
22
+ "NextNodeServer.findPageComponents",
23
+ "NextNodeServer.getLayoutOrPageModule",
24
+ "NextNodeServer.startResponse",
25
+ "NextNodeServer.clientComponentLoading",
26
+ "NextNodeServer.createComponentTree",
27
+ "LoadComponents.loadRouteModule",
28
+ "RouteModule.prepare",
29
+ "ResolveMetadata.generateMetadata",
30
+ ]);
31
+ // What runs a Next.js route: an app or pages render, a route handler, getServerSideProps.
32
+ const NEXT_HANDLERS = new Set([
33
+ "AppRender.getBodyResult",
34
+ "AppRouteRouteHandlers.runHandler",
35
+ "Render.getServerSideProps",
36
+ "Render.renderDocument",
37
+ ]);
38
+ // Next.js's requests for its own assets and dev tooling, not the app's.
39
+ const NEXT_INTERNAL = /^\/(_next|__nextjs)/;
40
+ // Prisma's own spans besides the operation: its SQL goes through the driver adapter's driver (pg, mysql2), recorded
41
+ // there; the rest is its query engine's bookkeeping.
42
+ const SKIPPED_NAMES = /^(pg\.connect|pg-pool\.connect|mysql2?\.connect|prisma:(?!client:operation$))/;
43
+ function attrsOf(span) {
44
+ return { ...span.attributes };
45
+ }
46
+ function first(attrs, ...keys) {
47
+ for (const key of keys) {
48
+ if (attrs[key] !== undefined)
49
+ return attrs[key];
50
+ }
51
+ return undefined;
52
+ }
53
+ function durationUs(span) {
54
+ const [seconds, nanos] = span.duration;
55
+ return Math.round(seconds * 1e6 + nanos / 1e3);
56
+ }
57
+ function startUs(span) {
58
+ const [seconds, nanos] = span.startTime;
59
+ return Math.round(seconds * 1e6 + nanos / 1e3);
60
+ }
61
+ function skipped(span) {
62
+ const attrs = attrsOf(span);
63
+ return (SKIPPED_EXPRESS.has(String(attrs["express.type"])) ||
64
+ SKIPPED_NEST.has(String(attrs["nestjs.type"])) ||
65
+ SKIPPED_NEXT.has(String(attrs["next.span_type"])) ||
66
+ SKIPPED_NAMES.test(span.name));
67
+ }
68
+ function statementOf(attrs) {
69
+ const text = first(attrs, "db.query.text", "db.statement");
70
+ return typeof text === "string" ? text : "";
71
+ }
72
+ export class TracepanelProcessor {
73
+ config;
74
+ sink;
75
+ /** The traces being built, by their root span's OTel id. */
76
+ open = new Map();
77
+ /**
78
+ * OTel span id → the trace it belongs to. Not the OTel trace id: a request the app makes to itself (fetch to its own
79
+ * API) carries the caller's trace id, and is a trace of its own all the same.
80
+ */
81
+ owner = new Map();
82
+ constructor(config, sink) {
83
+ this.config = config;
84
+ this.sink = sink;
85
+ }
86
+ onStart(span, _parentContext) {
87
+ const context = span.spanContext();
88
+ const parent = span.parentSpanContext;
89
+ let building = parent ? this.owner.get(parent.spanId) : undefined;
90
+ // A request that came with a traceparent (from another app, or this one calling itself) starts a trace here.
91
+ const local = !parent || (parent.isRemote === true && span.kind === SpanKind.SERVER);
92
+ if (local) {
93
+ // A request, or work outside one that trace() or a task queue started: tracepanel.kind says which.
94
+ const kind = attrsOf(span)["tracepanel.kind"];
95
+ if (span.kind !== SpanKind.SERVER && kind !== "command" && kind !== "task")
96
+ return;
97
+ if (NEXT_INTERNAL.test(String(first(attrsOf(span), "http.target", "url.path") ?? "")))
98
+ return;
99
+ this.dropAbandoned();
100
+ building = this.start();
101
+ if (kind === "command" || kind === "task")
102
+ building.trace.kind = kind;
103
+ building.rootSpanId = context.spanId;
104
+ const rootAttrs = attrsOf(span);
105
+ building.request = requestKey(first(rootAttrs, "http.request.method", "http.method"), first(rootAttrs, "http.target", "url.path"));
106
+ this.open.set(context.spanId, building);
107
+ }
108
+ if (!building)
109
+ return;
110
+ this.owner.set(context.spanId, building);
111
+ const found = origin(this.config.root);
112
+ if (found)
113
+ building.lastOrigin = found;
114
+ if (!local && parent && skipped(span)) {
115
+ building.ids.set(context.spanId, building.ids.get(parent.spanId) ?? null);
116
+ return;
117
+ }
118
+ const attrs = attrsOf(span);
119
+ if (attrs["express.type"] === "request_handler")
120
+ building.expressHandlers.add(context.spanId);
121
+ if (parent && attrs["nestjs.type"] === "request_context" && building.expressHandlers.has(parent.spanId)) {
122
+ // Nest's router is Express's route handler: the controller's span takes its place in the tree.
123
+ building.replaced.add(parent.spanId);
124
+ building.ids.set(parent.spanId, building.parents.get(parent.spanId) ?? null);
125
+ building.framework = "NestJS";
126
+ }
127
+ building.parents.set(context.spanId, parent && !local ? (building.ids.get(parent.spanId) ?? null) : null);
128
+ if (!parent && attrs["next.span_type"] === "BaseServer.handleRequest")
129
+ building.framework = "Next.js";
130
+ building.ids.set(context.spanId, newId());
131
+ building.origins.set(context.spanId, found ?? building.lastOrigin);
132
+ }
133
+ onEnd(span) {
134
+ if (process.env.TRACEPANEL_DEBUG) {
135
+ process.stderr.write(`[tracepanel] ${span.name} kind=${span.kind} parent=${span.parentSpanContext?.spanId ?? "-"} ${JSON.stringify(span.attributes)}\n`);
136
+ }
137
+ const context = span.spanContext();
138
+ const building = this.owner.get(context.spanId);
139
+ if (!building)
140
+ return;
141
+ const root = context.spanId === building.rootSpanId;
142
+ if (building.replaced.has(context.spanId))
143
+ return;
144
+ if (root || !skipped(span))
145
+ this.convert(building, span, root);
146
+ if (!root)
147
+ return;
148
+ setTimeout(() => {
149
+ this.close(building);
150
+ this.finish(building, span);
151
+ this.sink.submit(building.trace);
152
+ }, LATE_SPANS_MS).unref();
153
+ }
154
+ forceFlush() {
155
+ return Promise.resolve();
156
+ }
157
+ shutdown() {
158
+ return Promise.resolve();
159
+ }
160
+ /** The trace being built for the active request, with the current span's Tracepanel id. */
161
+ current() {
162
+ const span = trace.getActiveSpan();
163
+ if (!span)
164
+ return undefined;
165
+ const context = span.spanContext();
166
+ const building = this.owner.get(context.spanId);
167
+ return building ? { building, spanId: building.ids.get(context.spanId) ?? null } : undefined;
168
+ }
169
+ /** What the widget shows before the request's span ends: its id, its queries so far and their time. */
170
+ timing(request) {
171
+ const building = this.current()?.building ?? (request ? this.waiting(request) : undefined);
172
+ if (!building)
173
+ return undefined;
174
+ // A response's headers took it: another response to the same URL is another request's.
175
+ if (request)
176
+ building.answered = true;
177
+ return {
178
+ id: building.trace.id,
179
+ queries: building.queries,
180
+ dbMs: building.dbTime / 1000,
181
+ startedMs: building.startedMs,
182
+ };
183
+ }
184
+ dropAbandoned() {
185
+ const oldest = performance.now() - ABANDONED_MS;
186
+ for (const building of [...this.open.values()]) {
187
+ if (building.startedMs < oldest)
188
+ this.close(building);
189
+ }
190
+ }
191
+ /** The trace is done here: its spans no longer lead to it. */
192
+ close(building) {
193
+ this.open.delete(building.rootSpanId);
194
+ for (const spanId of building.ids.keys())
195
+ this.owner.delete(spanId);
196
+ }
197
+ /**
198
+ * The open trace of a request whose response goes out outside its context (Next.js streams a page from another
199
+ * async context): the latest one for this method and URL that no response has answered yet.
200
+ */
201
+ waiting(request) {
202
+ const key = requestKey(request.method, request.url);
203
+ let found;
204
+ for (const building of this.open.values()) {
205
+ if (building.request === key && !building.answered)
206
+ found = building;
207
+ }
208
+ return found;
209
+ }
210
+ /** An error a framework caught and answered with a 500 itself, without recording it on a span (Nitro). */
211
+ addError(error) {
212
+ const current = this.current();
213
+ if (!current)
214
+ return;
215
+ const thrown = error instanceof Error ? error : new Error(String(error));
216
+ // h3 wraps what the handler threw: the cause is the app's error.
217
+ const cause = thrown.cause instanceof Error ? thrown.cause : thrown;
218
+ current.building.trace.errors.push({
219
+ span_id: current.spanId,
220
+ time: Date.now() * 1000,
221
+ type: cause.name || "Error",
222
+ message: cause.message,
223
+ handled: false,
224
+ frames: frames(cause.stack ?? "", this.config.root),
225
+ chain: [],
226
+ });
227
+ }
228
+ addLog(log) {
229
+ const current = this.current();
230
+ current?.building.trace.logs.push({ ...log, span_id: current.spanId });
231
+ }
232
+ /** The framework the active request runs on, unless a more specific one (Nest on Express) already said so. */
233
+ setFramework(name) {
234
+ const current = this.current();
235
+ if (current && current.building.framework === "node:http")
236
+ current.building.framework = name;
237
+ }
238
+ /** The route pattern the framework matched, when the root span doesn't carry one (Nitro). */
239
+ setRoute(route) {
240
+ const current = this.current();
241
+ if (current)
242
+ current.building.route = route;
243
+ }
244
+ /** The framework the active request ran on, as the panel shows it. */
245
+ framework() {
246
+ return this.current()?.building.framework;
247
+ }
248
+ start() {
249
+ return {
250
+ trace: {
251
+ id: newId(),
252
+ kind: "http",
253
+ name: "",
254
+ start: 0,
255
+ duration: 0,
256
+ status: "ok",
257
+ attrs: {},
258
+ spans: [],
259
+ logs: [],
260
+ errors: [],
261
+ links: [],
262
+ issues: [],
263
+ },
264
+ ids: new Map(),
265
+ origins: new Map(),
266
+ queries: 0,
267
+ dbTime: 0,
268
+ framework: "node:http",
269
+ startedMs: performance.now(),
270
+ rootSpanId: "",
271
+ route: null,
272
+ request: "",
273
+ answered: false,
274
+ replaced: new Set(),
275
+ nestViews: new Set(),
276
+ expressHandlers: new Set(),
277
+ parents: new Map(),
278
+ lastOrigin: null,
279
+ };
280
+ }
281
+ /** A span as Tracepanel draws it: the request, a route handler (view), a statement (sql), an outgoing call. */
282
+ convert(building, span, root) {
283
+ const context = span.spanContext();
284
+ const id = building.ids.get(context.spanId);
285
+ if (!id)
286
+ return;
287
+ const parentId = root ? null : (building.ids.get(span.parentSpanContext?.spanId ?? "") ?? null);
288
+ if (!root && parentId === null)
289
+ return;
290
+ const attrs = attrsOf(span);
291
+ const converted = {
292
+ id,
293
+ parent_id: parentId,
294
+ kind: "function",
295
+ name: span.name,
296
+ start: startUs(span),
297
+ duration: durationUs(span),
298
+ status: span.status.code === SpanStatusCode.ERROR ? "error" : "ok",
299
+ attrs: {},
300
+ };
301
+ const codeOrigin = building.origins.get(context.spanId) ?? null;
302
+ const sql = isRedis(attrs) || isMongo(attrs) ? "" : statementOf(attrs);
303
+ if (root) {
304
+ converted.kind = { http: "http", task: "task.run", command: "command" }[building.trace.kind];
305
+ }
306
+ else if (attrs["express.type"] === "request_handler") {
307
+ converted.kind = "view";
308
+ converted.name = String(attrs["express.name"] ?? span.name);
309
+ building.trace.attrs["code.view"] = converted.name;
310
+ }
311
+ else if (NEXT_HANDLERS.has(String(attrs["next.span_type"]))) {
312
+ converted.kind = "view";
313
+ converted.name = String(first(attrs, "next.route", "next.page") ?? span.name);
314
+ building.trace.attrs["code.view"] = converted.name;
315
+ }
316
+ else if (attrs["nestjs.type"] === "request_context") {
317
+ converted.kind = "view";
318
+ converted.name = `${attrs["nestjs.controller"] ?? "Controller"}.${attrs["nestjs.callback"] ?? span.name}`;
319
+ building.trace.attrs["code.view"] = converted.name;
320
+ building.nestViews.add(id);
321
+ }
322
+ else if (attrs["tracepanel.span_kind"] === "task.enqueue") {
323
+ converted.kind = "task.enqueue";
324
+ converted.name = String(attrs["task.name"] ?? span.name);
325
+ converted.attrs = {
326
+ ...Object.fromEntries(Object.entries(attrs).filter(([key]) => key.startsWith("task."))),
327
+ "code.origin": codeOrigin,
328
+ };
329
+ }
330
+ else if (isRedis(attrs)) {
331
+ const call = redisCall(attrs, span.name);
332
+ converted.kind = "redis";
333
+ converted.name = call.name;
334
+ converted.attrs = { ...call.attrs, "code.origin": codeOrigin };
335
+ }
336
+ else if (isMongo(attrs)) {
337
+ const call = mongoCall(attrs, span.name);
338
+ converted.kind = "mongodb";
339
+ converted.name = call.name;
340
+ converted.attrs = { ...call.attrs, "code.origin": codeOrigin };
341
+ }
342
+ else if (span.name === "prisma:client:operation") {
343
+ converted.name = `prisma ${attrs.model ? `${attrs.model}.` : ""}${attrs.method ?? "operation"}`;
344
+ converted.attrs = { "code.origin": codeOrigin };
345
+ }
346
+ else if (sql) {
347
+ converted.kind = "sql";
348
+ converted.name = spanName(sql);
349
+ converted.attrs = this.sqlAttrs(attrs, sql, codeOrigin);
350
+ building.queries += 1;
351
+ building.dbTime += converted.duration;
352
+ }
353
+ else if (span.kind === SpanKind.CLIENT && first(attrs, "http.request.method", "http.method")) {
354
+ const call = httpCall(attrs);
355
+ converted.kind = "http.client";
356
+ converted.name = call.name;
357
+ // The traceparent the call carried names this span: the agent links the callee's trace to it.
358
+ converted.attrs = { ...call.attrs, "w3c.span_id": context.spanId, "code.origin": codeOrigin };
359
+ }
360
+ else {
361
+ converted.attrs = { ...attrs, "code.origin": codeOrigin };
362
+ }
363
+ building.trace.spans.push(converted);
364
+ this.collectErrors(building, span, id);
365
+ }
366
+ sqlAttrs(attrs, sql, codeOrigin) {
367
+ const system = String(first(attrs, "db.system.name", "db.system") ?? "");
368
+ // pg reports the parameters with enhancedDatabaseReporting: the same statement with the same values is a
369
+ // duplicate, the same statement with other values an N+1 candidate.
370
+ const values = first(attrs, "db.postgresql.values", "db.query.parameter");
371
+ return {
372
+ "db.client": system === "postgresql" ? "pg" : system,
373
+ "db.system": system,
374
+ "db.vendor": system,
375
+ "db.alias": "default",
376
+ "db.statement": statement(sql),
377
+ "db.fingerprint": fingerprint(sql),
378
+ "db.params_hash": values === undefined ? null : createHash("sha1").update(JSON.stringify(values)).digest("hex").slice(0, 12),
379
+ "db.many": false,
380
+ "code.origin": codeOrigin,
381
+ };
382
+ }
383
+ /** Exceptions the instrumentation recorded on a span: the request's errors, with their frames. */
384
+ collectErrors(building, span, spanId) {
385
+ for (const event of span.events) {
386
+ if (event.name !== "exception")
387
+ continue;
388
+ const attrs = event.attributes ?? {};
389
+ const [seconds, nanos] = event.time;
390
+ building.trace.errors.push({
391
+ span_id: spanId,
392
+ time: Math.round(seconds * 1e6 + nanos / 1e3),
393
+ type: String(attrs["exception.type"] ?? "Error"),
394
+ message: String(attrs["exception.message"] ?? ""),
395
+ handled: false,
396
+ frames: frames(String(attrs["exception.stacktrace"] ?? ""), this.config.root),
397
+ chain: [],
398
+ });
399
+ }
400
+ }
401
+ /** The trace from its root span: name, timing, the request's attributes. */
402
+ finish(building, root) {
403
+ if (building.trace.kind !== "http") {
404
+ this.finishWork(building, root);
405
+ return;
406
+ }
407
+ const attrs = attrsOf(root);
408
+ const method = String(first(attrs, "http.request.method", "http.method") ?? "GET");
409
+ const path = String(first(attrs, "url.path", "http.target") ?? "/").split("?")[0];
410
+ const route = first(attrs, "http.route", "next.route") ?? building.route;
411
+ const status = Number(first(attrs, "http.response.status_code", "http.status_code") ?? 0);
412
+ const tr = building.trace;
413
+ if (status > 0 && status < 500) {
414
+ // Nest throws NotFoundException and the like to answer 404, 422…: an answer, not an error.
415
+ tr.errors = tr.errors.filter((error) => !building.nestViews.has(error.span_id ?? ""));
416
+ }
417
+ tr.name = `${method} ${typeof route === "string" && route ? route : path}`;
418
+ tr.start = startUs(root);
419
+ tr.duration = durationUs(root);
420
+ if (status >= 500 || root.status.code === SpanStatusCode.ERROR || tr.errors.length > 0)
421
+ tr.status = "error";
422
+ const rootSpan = tr.spans.find((span) => span.parent_id === null);
423
+ if (rootSpan)
424
+ rootSpan.name = tr.name;
425
+ tr.attrs = {
426
+ ...tr.attrs,
427
+ "http.method": method,
428
+ "http.path": path,
429
+ "http.route": typeof route === "string" ? route : null,
430
+ "http.status_code": status,
431
+ "service.name": this.config.service,
432
+ "service.role": "web",
433
+ "telemetry.sdk.language": "nodejs",
434
+ "process.runtime.name": process.versions.bun ? "bun" : "node",
435
+ "process.runtime.version": process.versions.bun ?? process.versions.node,
436
+ "tracepanel.framework": withVersion(building.framework),
437
+ // The W3C ids: the agent links this trace to the one that called it, in another app or process.
438
+ "w3c.trace_id": root.spanContext().traceId,
439
+ };
440
+ if (root.parentSpanContext?.isRemote)
441
+ tr.attrs["w3c.parent_span_id"] = root.parentSpanContext.spanId;
442
+ }
443
+ /** A command (trace()) or a task (a queue's job): named as it was started, its task.* attributes kept. */
444
+ finishWork(building, root) {
445
+ const attrs = attrsOf(root);
446
+ const tr = building.trace;
447
+ tr.name = String(attrs["tracepanel.name"] ?? root.name);
448
+ tr.start = startUs(root);
449
+ tr.duration = durationUs(root);
450
+ if (root.status.code === SpanStatusCode.ERROR || tr.errors.length > 0)
451
+ tr.status = "error";
452
+ const rootSpan = tr.spans.find((span) => span.parent_id === null);
453
+ if (rootSpan) {
454
+ rootSpan.name = tr.name;
455
+ rootSpan.attrs = {};
456
+ }
457
+ const own = Object.fromEntries(Object.entries(attrs).filter(([key]) => key.startsWith("task.")));
458
+ tr.attrs = {
459
+ ...tr.attrs,
460
+ ...own,
461
+ "service.name": this.config.service,
462
+ "service.role": tr.kind === "task" ? "worker" : "command",
463
+ "telemetry.sdk.language": "nodejs",
464
+ "process.runtime.name": process.versions.bun ? "bun" : "node",
465
+ "process.runtime.version": process.versions.bun ?? process.versions.node,
466
+ "w3c.trace_id": root.spanContext().traceId,
467
+ };
468
+ }
469
+ }
470
+ function requestKey(method, target) {
471
+ return `${String(method ?? "GET").toUpperCase()} ${String(target ?? "/")}`;
472
+ }
473
+ /** `Node 26 · Express`: what the panel shows next to its logo. */
474
+ export function runtimeLabel(framework) {
475
+ const bun = process.versions.bun;
476
+ const named = withVersion(framework, 2);
477
+ if (bun)
478
+ return `Bun ${bun.split(".").slice(0, 2).join(".")} · ${named}`;
479
+ return `Node ${process.versions.node.split(".")[0]} · ${named}`;
480
+ }
481
+ export { micros };
482
+ //# sourceMappingURL=processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ // `node --import @tracepanel/js/register app.js`: OpenTelemetry for the app, with Tracepanel's span processor. Loaded
2
+ // before the app, it can instrument both CommonJS and ES modules (the ESM loader hook goes in first).
3
+ import { start } from "./setup.js";
4
+ start();
5
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,sGAAsG;AAEtG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ConsoleUrl, Starter } from "./agent.js";
2
+ import { type Config } from "./config.js";
3
+ import { TracepanelProcessor } from "./processor.js";
4
+ import { type Badge, type BadgeRequest } from "./widget.js";
5
+ export interface Runtime {
6
+ config: Config;
7
+ processor: TracepanelProcessor;
8
+ starter: Starter;
9
+ console: ConsoleUrl;
10
+ /**
11
+ * The active request's headers and script tag. On the shared object so that code bundled apart from the SDK's
12
+ * OpenTelemetry (a Next.js layout) can read it without importing any of it.
13
+ */
14
+ badge(request: BadgeRequest): Badge | undefined;
15
+ }
16
+ /** The process's Tracepanel, made on first use; undefined outside development. */
17
+ export declare function runtime(): Runtime | undefined;
@@ -0,0 +1,27 @@
1
+ // The one Tracepanel of the process: register.ts sets it up, the framework modules use it.
2
+ import { ConsoleUrl, Sender, Starter } from "./agent.js";
3
+ import { loadConfig } from "./config.js";
4
+ import { TracepanelProcessor } from "./processor.js";
5
+ import { badge } from "./widget.js";
6
+ const KEY = Symbol.for("tracepanel.runtime");
7
+ /** The process's Tracepanel, made on first use; undefined outside development. */
8
+ export function runtime() {
9
+ const holder = globalThis;
10
+ if (holder[KEY])
11
+ return holder[KEY];
12
+ const config = loadConfig();
13
+ if (!config.enabled)
14
+ return undefined;
15
+ const starter = new Starter(config.storeDir);
16
+ const processor = new TracepanelProcessor(config, new Sender(config, starter));
17
+ const made = {
18
+ config,
19
+ processor,
20
+ starter,
21
+ console: new ConsoleUrl(config.storeDir),
22
+ badge: (request) => badge(made, request),
23
+ };
24
+ holder[KEY] = made;
25
+ return made;
26
+ }
27
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAE3F,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAiC,KAAK,EAAE,MAAM,aAAa,CAAC;AAcnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAG7C,kFAAkF;AAClF,MAAM,UAAU,OAAO;IACrB,MAAM,MAAM,GAAG,UAAoB,CAAC;IACpC,IAAI,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAY;QACpB,MAAM;QACN,SAAS;QACT,OAAO;QACP,OAAO,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;KACzC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type Runtime } from "./runtime.js";
2
+ export interface Options {
3
+ /**
4
+ * Node's HTTP server spans, the request's root. Off where the framework makes its own root span (Next.js), which
5
+ * would otherwise sit under another.
6
+ */
7
+ httpServer?: boolean;
8
+ }
9
+ /** Sets up tracing once per process; undefined when Tracepanel is off (production). */
10
+ export declare function start(options?: Options): Runtime | undefined;