@rootcat/node 0.1.0 → 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.
package/dist/sdk.js CHANGED
@@ -39,6 +39,8 @@ exports.curatedInstrumentations = curatedInstrumentations;
39
39
  exports.prismaInstrumentation = prismaInstrumentation;
40
40
  exports.current = current;
41
41
  exports.start = start;
42
+ exports.rootcatSpanProcessors = rootcatSpanProcessors;
43
+ exports.startAlongside = startAlongside;
42
44
  exports.otlpExporter = otlpExporter;
43
45
  // The SDK: one tracer provider with the call-site processor and a batching
44
46
  // OTLP/HTTP (protobuf) exporter to the host agent, the curated
@@ -59,6 +61,7 @@ const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
59
61
  const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node");
60
62
  const node_module_1 = require("node:module");
61
63
  const path = __importStar(require("node:path"));
64
+ const coexist_js_1 = require("./coexist.js");
62
65
  const config_js_1 = require("./config.js");
63
66
  const drizzle_js_1 = require("./drizzle.js");
64
67
  const esmhook_js_1 = require("./esmhook.js");
@@ -109,14 +112,16 @@ function redisStatement(command, args) {
109
112
  * curatedInstrumentations builds the instrumentation set the config
110
113
  * allows; sampling is the call-site gate they share with the processor.
111
114
  */
112
- function curatedInstrumentations(config, sampling = new processor_js_1.CallSiteSampling(config.callsiteSample, config.sampleRatio)) {
115
+ function curatedInstrumentations(config, sampling = new processor_js_1.CallSiteSampling(config.callsiteSample, config.sampleRatio), beside = false, http = true) {
113
116
  const want = (name) => !config.disabled.has(name);
114
117
  const list = [];
115
- if (want('http')) {
118
+ if (http && want('http')) {
116
119
  list.push(new instrumentation_http_1.HttpInstrumentation({}));
117
120
  }
118
121
  if (want('undici')) {
119
- list.push(new instrumentation_undici_1.UndiciInstrumentation({}));
122
+ // Beside Sentry, whose fetch instrumentation propagates first, the
123
+ // instrumentation adds no second set of headers (see propagatedOnce).
124
+ list.push(beside ? (0, coexist_js_1.propagatedOnce)(new instrumentation_undici_1.UndiciInstrumentation({})) : new instrumentation_undici_1.UndiciInstrumentation({}));
120
125
  }
121
126
  if (want('pg')) {
122
127
  list.push(new pg_js_1.PgInstrumentation({ sampling, depth: config.callsiteDepth }));
@@ -134,11 +139,14 @@ function curatedInstrumentations(config, sampling = new processor_js_1.CallSiteS
134
139
  if (want('mongodb')) {
135
140
  list.push(new instrumentation_mongodb_1.MongoDBInstrumentation({ enhancedDatabaseReporting: false }));
136
141
  }
142
+ // Redis commands are traced inside a traced operation only: a queue
143
+ // (BullMQ) polls Redis all the time outside any, which would otherwise
144
+ // be a trace per poll.
137
145
  if (want('ioredis')) {
138
- list.push(new instrumentation_ioredis_1.IORedisInstrumentation({ dbStatementSerializer: redisStatement }));
146
+ list.push(new instrumentation_ioredis_1.IORedisInstrumentation({ dbStatementSerializer: redisStatement, requireParentSpan: true }));
139
147
  }
140
148
  if (want('redis')) {
141
- list.push(new instrumentation_redis_1.RedisInstrumentation({ dbStatementSerializer: redisStatement }));
149
+ list.push(new instrumentation_redis_1.RedisInstrumentation({ dbStatementSerializer: redisStatement, requireParentSpan: true }));
142
150
  }
143
151
  if (want('prisma')) {
144
152
  const prisma = prismaInstrumentation(config.cwd);
@@ -146,7 +154,8 @@ function curatedInstrumentations(config, sampling = new processor_js_1.CallSiteS
146
154
  list.push(prisma);
147
155
  }
148
156
  }
149
- return list;
157
+ // No wrapper of another SDK is ever removed; beside one, none is wrapped over.
158
+ return list.map((instrumentation) => (0, coexist_js_1.guardWrappers)(instrumentation, beside));
150
159
  }
151
160
  /**
152
161
  * prismaInstrumentation loads @prisma/instrumentation from the application
@@ -184,6 +193,9 @@ function start(options = {}) {
184
193
  }
185
194
  try {
186
195
  const started = startOnce(options);
196
+ if (started === notYet) {
197
+ return undefined; // a later call, after Sentry.init, may start
198
+ }
187
199
  holder[startedKey] = started ?? null;
188
200
  return started;
189
201
  }
@@ -193,26 +205,53 @@ function start(options = {}) {
193
205
  return undefined;
194
206
  }
195
207
  }
208
+ /** notYet is startOnce's answer when a later call (after Sentry.init) may start. */
209
+ const notYet = Symbol('rootcat.notYet');
196
210
  function startOnce(options) {
197
211
  const config = (0, config_js_1.readConfig)(options.env ?? process.env, options.cwd ?? process.cwd(), () => (0, intake_js_1.discoverIntake)());
198
212
  if (!config.enabled) {
199
213
  return undefined;
200
214
  }
201
- if (!(api_1.trace.getTracerProvider() instanceof api_1.ProxyTracerProvider)) {
202
- // Another OpenTelemetry SDK (Sentry 8 and later, an app's own NodeSDK)
203
- // registered first: a second provider would fight it for the global
204
- // context manager and patch the same modules twice.
205
- process.stderr.write('rootcat: another OpenTelemetry SDK is already registered in this process; @rootcat/node does not start\n');
206
- return undefined;
215
+ const existing = (0, coexist_js_1.existingSetup)();
216
+ if (existing?.registered) {
217
+ // Another tracer registered the global provider and context manager:
218
+ // the package registers neither. Beside it when it records nothing,
219
+ // inside it (through rootcatSpanProcessors()) when it traces.
220
+ if (options.late) {
221
+ process.stderr.write('rootcat: startAlongside() ran before the tracer was set up; started a tick later, so modules loaded before then may be untraced (call startAlongside() after Sentry.init)\n');
222
+ }
223
+ return existing.tracing ? startInside(config, options, existing) : startBeside(config, options, existing);
224
+ }
225
+ if (existing) {
226
+ // A Sentry client without a registered provider: Sentry.init ran with
227
+ // skipOpenTelemetrySetup, and the application sets up OpenTelemetry
228
+ // itself (with Sentry's context manager), which must come first.
229
+ process.stderr.write('rootcat: Sentry was initialised without its OpenTelemetry setup (skipOpenTelemetrySetup) and no provider is registered yet; @rootcat/node does not start\n');
230
+ return notYet;
231
+ }
232
+ const dependency = (0, coexist_js_1.tracerDependency)(config.cwd);
233
+ if (dependency && !options.alongside) {
234
+ // Started before that tracer (the import line first, NODE_OPTIONS),
235
+ // the package would take the global provider and context manager from
236
+ // it, and Sentry's scopes (request isolation) depend on its own.
237
+ process.stderr.write(`rootcat: this application uses ${dependency}, which is not initialised yet; call startAlongside() from @rootcat/node/attach after it initialises (see "Alongside another tracer" in the README)\n`);
238
+ return notYet;
239
+ }
240
+ if (dependency) {
241
+ // startAlongside() before the tracer it is meant to run alongside
242
+ // (called above Sentry.init, say). Registering anything globally now
243
+ // would take the context manager from Sentry and break its request
244
+ // isolation. The package starts beside it at once, which registers
245
+ // nothing globally and patches the drivers before the application
246
+ // loads them, and settles once the current module has run: beside
247
+ // Sentry for errors only it stays; otherwise it undoes itself and
248
+ // starts inside a tracing Sentry, or not at all.
249
+ const provisional = startBeside(config, options, { kind: 'sentry', registered: false, tracing: false, debug: false, processors: undefined }, true);
250
+ setImmediate(() => settle(provisional, options)).unref();
251
+ return provisional;
207
252
  }
208
253
  api_1.diag.setLogger(config.debug ? new api_1.DiagConsoleLogger() : new QuietLogger(), config.debug ? api_1.DiagLogLevel.DEBUG : api_1.DiagLogLevel.WARN);
209
- // defaultResource is the SDK's own identity (telemetry.sdk.*); no
210
- // detector runs, so no command line, environment or host facts travel.
211
- const resource = (0, resources_1.defaultResource)().merge((0, resources_1.resourceFromAttributes)({
212
- 'service.name': config.serviceName,
213
- ...(config.serviceVersion !== '' ? { 'service.version': config.serviceVersion } : {}),
214
- ...(config.environment !== '' ? { 'deployment.environment.name': config.environment } : {}),
215
- }));
254
+ const resource = rootcatResource(config);
216
255
  const sampling = new processor_js_1.CallSiteSampling(config.callsiteSample, config.sampleRatio);
217
256
  const callSites = new processor_js_1.CallSiteProcessor({ sampling, depth: config.callsiteDepth, statement: config.statement });
218
257
  const spanProcessors = [callSites, ...(options.spanProcessors ?? [exportingProcessor(config, options)])];
@@ -220,24 +259,256 @@ function startOnce(options) {
220
259
  provider.register();
221
260
  // A capture from the processor starts below the SDK's startSpan, where
222
261
  // the instrumentation that called it is.
223
- callSites.above = Object.getPrototypeOf(provider.getTracer('@rootcat/node')).startSpan;
224
- const esmHook = options.esmHook === false
262
+ callSites.above = tracerStartSpan(provider);
263
+ const esmHook = esmHookFor(config, options);
264
+ const instrumentations = options.instrumentations ?? curatedInstrumentations(config, sampling);
265
+ (0, instrumentation_1.registerInstrumentations)({ tracerProvider: provider, instrumentations });
266
+ patchBuiltins();
267
+ const shutdown = () => provider.shutdown().catch(() => undefined);
268
+ const detach = options.hooks !== false ? installHooks(provider) : () => undefined;
269
+ say(config, `tracing ${config.serviceName} to ${config.url} (traces ${config.sampleRatio}, call sites 1 in ${config.callsiteSample}; ES module hook ${esmHook})`);
270
+ return { config, mode: 'own', provider, callSites, esmHook, instrumentations, shutdown, detach };
271
+ }
272
+ /**
273
+ * settle decides, a tick after startAlongside() came before the tracer,
274
+ * what the provisional start beside it becomes: it stays beside a Sentry
275
+ * that set up OpenTelemetry for errors only; otherwise it is undone (its
276
+ * instrumentations disabled, which removes only the package's own
277
+ * wrappers, its provider shut down) and the package starts inside a
278
+ * tracing Sentry, or not at all. Each outcome is one line on stderr.
279
+ */
280
+ function settle(provisional, options) {
281
+ try {
282
+ const existing = (0, coexist_js_1.existingSetup)();
283
+ if (existing?.registered && !existing.tracing) {
284
+ // Beside it is: the http instrumentation is made and goes in now.
285
+ if (deferredHttp.has(provisional) && provisional.provider) {
286
+ const http = (0, coexist_js_1.guardWrappers)(new instrumentation_http_1.HttpInstrumentation({}), true);
287
+ (0, instrumentation_1.registerInstrumentations)({ tracerProvider: provisional.provider, instrumentations: [http] });
288
+ provisional.instrumentations.push(http);
289
+ patchBuiltins();
290
+ }
291
+ process.stderr.write('rootcat: startAlongside() ran before Sentry.init; it registered nothing globally and runs beside Sentry (call startAlongside() after Sentry.init)\n');
292
+ return;
293
+ }
294
+ for (const instrumentation of provisional.instrumentations) {
295
+ instrumentation.disable();
296
+ }
297
+ provisional.detach();
298
+ void provisional.shutdown();
299
+ processor_js_1.parentPolicy.transparentForeign = false;
300
+ holder[startedKey] = undefined;
301
+ if (existing?.registered) {
302
+ start({ ...options, late: true });
303
+ return;
304
+ }
305
+ // Stopped: nothing of the package runs any more. The loader hook
306
+ // cannot be removed, so it passes every module through; a processor
307
+ // already given to a provider (rootcatSpanProcessors()) goes inert,
308
+ // and one asked for later is not made.
309
+ holder[startedKey] = null;
310
+ holder[stoppedKey] = true;
311
+ (0, esmhook_js_1.quietESMHook)();
312
+ holder[pendingKey]?.processor.stop();
313
+ process.stderr.write('rootcat: startAlongside() found Sentry not initialised, then or a tick later; @rootcat/node stopped: no spans, no processor, the loader hook idle (call startAlongside() after Sentry.init)\n');
314
+ }
315
+ catch {
316
+ // never reaches the application
317
+ }
318
+ }
319
+ /**
320
+ * startBeside runs the package's own provider beside a tracer that
321
+ * records nothing (Sentry for errors only): the same instrumentations,
322
+ * sampler decisions and processors as on its own, but the provider is
323
+ * not registered (the owner's stays the global one, with its context
324
+ * manager and propagator) and spans are recorded without the sampled flag
325
+ * (see RecordOnlySampler), so nothing the owner reads or sends changes.
326
+ * The owner's provider never sees these spans.
327
+ */
328
+ function startBeside(config, options, existing, provisional = false) {
329
+ if (!existing.debug) {
330
+ // The owner sets the diagnostic logger only in its debug mode;
331
+ // otherwise the package's quiet one (the full-queue notice) takes the
332
+ // empty place.
333
+ api_1.diag.setLogger(config.debug ? new api_1.DiagConsoleLogger() : new QuietLogger(), config.debug ? api_1.DiagLogLevel.DEBUG : api_1.DiagLogLevel.WARN);
334
+ }
335
+ const resource = rootcatResource(config);
336
+ const sampling = new processor_js_1.CallSiteSampling(config.callsiteSample, config.sampleRatio);
337
+ const callSites = new processor_js_1.CallSiteProcessor({ sampling, depth: config.callsiteDepth, statement: config.statement, keepHostKeys: true });
338
+ const exporting = options.spanProcessors ?? [exportingProcessor(config, options)];
339
+ const spanProcessors = [new coexist_js_1.UrlSource(), callSites, ...exporting.map((processor) => new coexist_js_1.FlaggedExport(processor))];
340
+ processor_js_1.parentPolicy.transparentForeign = true;
341
+ const provider = new sdk_trace_node_1.NodeTracerProvider({ resource, spanProcessors, spanLimits: exports.spanLimits, sampler: options.sampler ?? new sampler_js_1.RecordOnlySampler(config.sampleRatio) });
342
+ callSites.above = tracerStartSpan(provider);
343
+ // Provisional (registered before Sentry's, so inside it): with
344
+ // import-in-the-middle copies apart, a module the package's hook marks
345
+ // would reach only the package's instrumentations, Sentry's (with
346
+ // tracing on) never: the hook then watches only Drizzle's query
347
+ // classes, which Sentry does not instrument.
348
+ const include = provisional && !(0, coexist_js_1.sentryLoaderShared)(config.cwd) ? esmhook_js_1.drizzleModules : undefined;
349
+ const esmHook = esmHookFor(config, options, esmhook_js_1.ownedModules, include);
350
+ // Provisional (before the tracer is set up): the http instrumentation
351
+ // is not even made until settle(). Made, it is enabled at once and
352
+ // falls back to the global provider, Sentry's once Sentry.init has
353
+ // run, and Sentry.init itself requires http: inside a tracing Sentry
354
+ // it would add a second span to every request and outgoing call.
355
+ const deferHttp = provisional && options.instrumentations === undefined && !config.disabled.has('http');
356
+ const now = options.instrumentations ?? curatedInstrumentations(config, sampling, true, !deferHttp);
357
+ (0, instrumentation_1.registerInstrumentations)({ tracerProvider: provider, instrumentations: now });
358
+ if (!provisional) {
359
+ patchBuiltins();
360
+ }
361
+ const shutdown = () => provider.shutdown().catch(() => undefined);
362
+ const detach = options.hooks !== false ? installHooks(provider) : () => undefined;
363
+ say(config, `tracing ${config.serviceName} to ${config.url} beside the ${existing.kind} tracer (which records nothing; traces ${config.sampleRatio}, call sites 1 in ${config.callsiteSample}; ES module hook ${esmHook})`);
364
+ const started = { config, mode: 'beside', provider, callSites, esmHook, instrumentations: now, shutdown, detach };
365
+ if (deferHttp) {
366
+ deferredHttp.add(started);
367
+ }
368
+ return started;
369
+ }
370
+ /**
371
+ * startInside finishes the setup inside a tracer that records spans: the
372
+ * processor rootcatSpanProcessors() gave its provider receives its spans;
373
+ * here only the entry wrappers that carry call sites to them are
374
+ * registered (the owner instruments the libraries itself, so the package
375
+ * adds no span). Without the processor in the owner's provider, nothing
376
+ * starts. For an owner whose options cannot be read (not Sentry), the
377
+ * processor having been built is taken as given to it.
378
+ */
379
+ function startInside(config, options, existing) {
380
+ const pending = holder[pendingKey];
381
+ if (!pending || existing.processors === false) {
382
+ process.stderr.write(existing.kind === 'sentry'
383
+ ? 'rootcat: Sentry traces in this process (tracesSampleRate is set); its spans reach Rootcat only through Sentry.init({ openTelemetrySpanProcessors: rootcatSpanProcessors() }); @rootcat/node does not start\n'
384
+ : 'rootcat: another OpenTelemetry SDK is already registered in this process; its spans reach Rootcat only through its span processors (rootcatSpanProcessors() from @rootcat/node/attach); @rootcat/node does not start\n');
385
+ return undefined;
386
+ }
387
+ const { callSites, processor } = pending;
388
+ // The owner's tracer is the global one; a capture starts below its startSpan.
389
+ callSites.above = tracerStartSpan(api_1.trace.getTracerProvider());
390
+ const esmHook = esmHookFor(config, options, esmhook_js_1.drizzleModules);
391
+ const instrumentations = options.instrumentations ?? carryingInstrumentations(config, callSites);
392
+ (0, instrumentation_1.registerInstrumentations)({ instrumentations });
393
+ const shutdown = () => processor.shutdown().catch(() => undefined);
394
+ const detach = options.hooks !== false ? installHooks(processor) : () => undefined;
395
+ say(config, `tracing ${config.serviceName} to ${config.url} inside the ${existing.kind} tracer (its sample; traces ${config.sampleRatio} of it, call sites 1 in ${config.callsiteSample}; ES module hook ${esmHook})`);
396
+ return { config, mode: 'inside', provider: undefined, callSites, esmHook, instrumentations, shutdown, detach };
397
+ }
398
+ /** pendingKey holds rootcatSpanProcessors()'s result on globalThis. */
399
+ const pendingKey = Symbol.for('rootcat.node.providerProcessors');
400
+ /** stoppedKey marks a package that stopped (see settle). */
401
+ const stoppedKey = Symbol.for('rootcat.node.stopped');
402
+ /** deferredHttp marks a provisional start whose http instrumentation settle() makes. */
403
+ const deferredHttp = new WeakSet();
404
+ /**
405
+ * rootcatSpanProcessors returns the processor for another tracer's
406
+ * provider (Sentry.init's openTelemetrySpanProcessors, NodeSDK's
407
+ * spanProcessors): when that tracer records spans, it receives them and
408
+ * exports a copy of each (with its call site, under the privacy rules)
409
+ * to the host agent; the tracer's own spans and what it sends are
410
+ * unchanged. When the tracer records nothing (Sentry for errors only), it
411
+ * receives nothing and startAlongside() runs the package beside it
412
+ * instead. It never throws; disabled, it returns an empty list.
413
+ */
414
+ function rootcatSpanProcessors(options = {}) {
415
+ try {
416
+ if (holder[stoppedKey] === true) {
417
+ return []; // the package stopped (see settle)
418
+ }
419
+ const existing = holder[pendingKey];
420
+ if (existing) {
421
+ return [existing.processor];
422
+ }
423
+ const config = (0, config_js_1.readConfig)(options.env ?? process.env, options.cwd ?? process.cwd(), () => (0, intake_js_1.discoverIntake)());
424
+ if (!config.enabled) {
425
+ return [];
426
+ }
427
+ // The owner decides which traces are recorded; the trace ratio applies
428
+ // at export (InProviderProcessor), so the entry wrappers never decide.
429
+ const sampling = new processor_js_1.CallSiteSampling(config.callsiteSample, 1);
430
+ const callSites = new processor_js_1.CallSiteProcessor({ sampling, depth: config.callsiteDepth, statement: config.statement, readOnly: true });
431
+ const exporting = options.spanProcessors ?? [exportingProcessor(config, options)];
432
+ const processor = new coexist_js_1.InProviderProcessor(callSites, exporting, rootcatResource(config), config.sampleRatio);
433
+ holder[pendingKey] = { config, callSites, processor };
434
+ return [processor];
435
+ }
436
+ catch (error) {
437
+ const reason = error instanceof Error ? error.message : String(error);
438
+ process.stderr.write(`rootcat: no span processor: ${reason.slice(0, 200)}\n`);
439
+ return [];
440
+ }
441
+ }
442
+ /**
443
+ * startAlongside starts the package after another tracer set up
444
+ * OpenTelemetry (Sentry.init, an app's NodeSDK): beside it when it
445
+ * records nothing (Sentry for errors only, or disabled with enabled:
446
+ * false, which still sets up its OpenTelemetry), inside it when it
447
+ * records spans (with rootcatSpanProcessors() in its provider), and on
448
+ * its own when nothing was set up (Sentry not initialised here, no DSN):
449
+ * if a Sentry client appears right after, the order was wrong and stderr
450
+ * says so. It never throws.
451
+ */
452
+ function startAlongside(options = {}) {
453
+ return start({ ...options, alongside: true });
454
+ }
455
+ /**
456
+ * carryingInstrumentations are the entry wrappers that only carry call
457
+ * sites, for another tracer's spans: the pg pool's and Drizzle's
458
+ * captures, and postgres.js's origins, given to the database span the
459
+ * tracer starts for each query.
460
+ */
461
+ function carryingInstrumentations(config, callSites) {
462
+ const want = (name) => !config.disabled.has(name);
463
+ const sampling = callSites.sampling;
464
+ const list = [];
465
+ if (want('pg')) {
466
+ list.push(new pgpool_js_1.PgPoolEntryInstrumentation({ depth: config.callsiteDepth, sampling, connect: false }));
467
+ }
468
+ if (want('postgres')) {
469
+ list.push(new postgresjs_js_1.PostgresJsInstrumentation({
470
+ sampling,
471
+ spans: false,
472
+ onSite: (site) => {
473
+ const span = (0, coexist_js_1.activeDatabaseSpan)();
474
+ if (span) {
475
+ callSites.assign(span, site);
476
+ }
477
+ },
478
+ }));
479
+ }
480
+ if (want('drizzle')) {
481
+ list.push(new drizzle_js_1.DrizzleEntryInstrumentation({ depth: config.callsiteDepth, sampling }));
482
+ }
483
+ return list.map((instrumentation) => (0, coexist_js_1.guardWrappers)(instrumentation, false));
484
+ }
485
+ /** rootcatResource is the package's resource: the SDK's identity and the service's. */
486
+ function rootcatResource(config) {
487
+ // defaultResource is the SDK's own identity (telemetry.sdk.*); no
488
+ // detector runs, so no command line, environment or host facts travel.
489
+ return (0, resources_1.defaultResource)().merge((0, resources_1.resourceFromAttributes)({
490
+ 'service.name': config.serviceName,
491
+ ...(config.serviceVersion !== '' ? { 'service.version': config.serviceVersion } : {}),
492
+ ...(config.environment !== '' ? { 'deployment.environment.name': config.environment } : {}),
493
+ }));
494
+ }
495
+ /** tracerStartSpan is the startSpan of a provider's tracers, where SDK frames end. */
496
+ function tracerStartSpan(provider) {
497
+ return Object.getPrototypeOf(provider.getTracer('@rootcat/node')).startSpan;
498
+ }
499
+ function esmHookFor(config, options, takeOver, include) {
500
+ return options.esmHook === false
225
501
  ? 'off'
226
502
  : (0, esmhook_js_1.registerESMHook)((reason) => {
227
503
  if (config.debug) {
228
504
  process.stderr.write(`rootcat: ES module hook: ${reason.slice(0, 300)}\n`);
229
505
  }
230
- });
231
- const instrumentations = options.instrumentations ?? curatedInstrumentations(config, sampling);
232
- (0, instrumentation_1.registerInstrumentations)({ tracerProvider: provider, instrumentations });
233
- const shutdown = () => provider.shutdown().catch(() => undefined);
234
- if (options.hooks !== false) {
235
- installHooks(provider);
236
- }
506
+ }, takeOver, include);
507
+ }
508
+ function say(config, line) {
237
509
  if (config.debug) {
238
- process.stderr.write(`rootcat: tracing ${config.serviceName} to ${config.url} (traces ${config.sampleRatio}, call sites 1 in ${config.callsiteSample}; ES module hook ${esmHook})\n`);
510
+ process.stderr.write(`rootcat: ${line}\n`);
239
511
  }
240
- return { config, provider, callSites, esmHook, instrumentations, shutdown };
241
512
  }
242
513
  /** otlpExporter builds the package's OTLP/HTTP protobuf exporter (see otlp.ts). */
243
514
  function otlpExporter(url) {
@@ -278,9 +549,11 @@ function exportingProcessor(config, options) {
278
549
  * spans of its last batch interval are lost.
279
550
  */
280
551
  function installHooks(provider) {
281
- process.once('beforeExit', () => {
552
+ const beforeExit = () => {
282
553
  provider.forceFlush().catch(() => undefined);
283
- });
554
+ };
555
+ process.once('beforeExit', beforeExit);
556
+ const installed = [];
284
557
  for (const signal of ['SIGTERM', 'SIGINT']) {
285
558
  const listener = () => {
286
559
  const flush = Promise.race([provider.forceFlush(), delay(exports.signalFlushMillis)]).catch(() => undefined);
@@ -294,7 +567,14 @@ function installHooks(provider) {
294
567
  });
295
568
  };
296
569
  process.on(signal, listener);
570
+ installed.push([signal, listener]);
297
571
  }
572
+ return () => {
573
+ process.removeListener('beforeExit', beforeExit);
574
+ for (const [signal, listener] of installed) {
575
+ process.removeListener(signal, listener);
576
+ }
577
+ };
298
578
  }
299
579
  function delay(ms) {
300
580
  return new Promise((resolve) => {
@@ -302,4 +582,25 @@ function delay(ms) {
302
582
  timer.unref();
303
583
  });
304
584
  }
585
+ /**
586
+ * patchBuiltins requires node:http and node:https once the
587
+ * instrumentations are registered, so the CommonJS hook patches the
588
+ * builtin modules' shared exports (http.Server.prototype.emit,
589
+ * http.request) whatever loads them later. An ES module application
590
+ * imports them through the loader, where the package's hook does not
591
+ * wrap builtins: before, they were patched only when another SDK's hook
592
+ * wrapped node:http through the same import-in-the-middle copy (npm
593
+ * dedupes Sentry's and the package's), and not at all with copies apart
594
+ * (pnpm), so no server span was recorded.
595
+ */
596
+ function patchBuiltins() {
597
+ try {
598
+ const load = (0, node_module_1.createRequire)(__filename);
599
+ load('http');
600
+ load('https');
601
+ }
602
+ catch {
603
+ // an instrumentation without them still records the rest
604
+ }
605
+ }
305
606
  //# sourceMappingURL=sdk.js.map
package/dist/sdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rootcat/node",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Zero-code OpenTelemetry tracing for Node services that report to the Rootcat host agent, with the line of application code behind every database and HTTP client span.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -16,6 +16,10 @@
16
16
  "default": "./dist/register.js"
17
17
  },
18
18
  "./esm": "./dist/esm.mjs",
19
+ "./attach": {
20
+ "types": "./dist/attach.d.ts",
21
+ "default": "./dist/attach.js"
22
+ },
19
23
  "./sdk": {
20
24
  "types": "./dist/index.d.ts",
21
25
  "default": "./dist/index.js"
@@ -25,19 +29,22 @@
25
29
  "files": [
26
30
  "dist",
27
31
  "README.md",
32
+ "CHANGELOG.md",
28
33
  "LICENSE"
29
34
  ],
30
35
  "engines": {
31
36
  "node": ">=18.19.0"
32
37
  },
33
38
  "scripts": {
34
- "build": "tsc -p tsconfig.json && node scripts/copy-esm.mjs",
39
+ "build": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.json && node scripts/copy-esm.mjs",
35
40
  "build:fixtures": "tsc -p test/fixtures/ts/tsconfig.json && tsc -p test/fixtures/ts-inline/tsconfig.json",
36
41
  "prepack": "npm run build",
37
- "setup:next": "node scripts/setup-next.mjs",
42
+ "setup:next": "node scripts/setup-fixture.mjs next",
43
+ "setup:sentry": "node scripts/setup-fixture.mjs sentry && node scripts/setup-fixture.mjs sentry-v8 && node scripts/setup-fixture.mjs sentry-v9",
38
44
  "pretest": "npm run build && npm run build:fixtures",
39
45
  "test": "node --test --test-concurrency=1 test/*.test.mts",
40
46
  "bench": "node --test test/bench.test.mts",
47
+ "bench:sentry": "node scripts/bench-sentry.mts",
41
48
  "typecheck": "tsc -p tsconfig.json --noEmit"
42
49
  },
43
50
  "dependencies": {