@relaybus/otel 0.0.0-stage → 0.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/semantic-conventions.ts","../src/relay-bus-metrics-observer.ts","../src/relay-bus-open-telemetry-tracer.ts","../src/w3c-trace-context-propagator.ts","../src/relay-bus-open-telemetry.ts"],"names":["context","trace"],"mappings":"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","file":"index.js","sourcesContent":["import type { ErrorInfo } from '@relaybus/core';\n\n/** Instrumentation scope of every meter and tracer of this package. */\nexport const INSTRUMENTATION_SCOPE = '@relaybus/otel';\n\n/** `messaging.system` of operations on the outbox itself (publish, claim, process). */\nexport const RELAYBUS_SYSTEM = 'relaybus';\n\n/** OpenTelemetry semantic convention attributes for messaging, and relaybus's own. */\nexport const ATTRIBUTES = {\n system: 'messaging.system',\n destination: 'messaging.destination.name',\n operationName: 'messaging.operation.name',\n operationType: 'messaging.operation.type',\n consumerGroup: 'messaging.consumer.group.name',\n messageId: 'messaging.message.id',\n conversationId: 'messaging.message.conversation_id',\n batchCount: 'messaging.batch.message_count',\n errorType: 'error.type',\n eventType: 'relaybus.event.type',\n deliveryKind: 'relaybus.delivery.kind',\n deliveryAttempt: 'relaybus.delivery.attempt',\n receiveOutcome: 'relaybus.receive.outcome',\n failureStage: 'relaybus.failure.stage',\n} as const;\n\n/** Metric names: the messaging semantic conventions where they exist, else `relaybus.*`. */\nexport const METRICS = {\n operationDuration: 'messaging.client.operation.duration',\n sentMessages: 'messaging.client.sent.messages',\n consumedMessages: 'messaging.client.consumed.messages',\n processDuration: 'messaging.process.duration',\n invalidMessages: 'relaybus.messages.invalid',\n published: 'relaybus.events.published',\n claimedDeliveries: 'relaybus.claim.deliveries',\n claimedLanes: 'relaybus.claim.lanes',\n pending: 'relaybus.deliveries.pending',\n oldestAge: 'relaybus.deliveries.oldest_age',\n deadLettered: 'relaybus.deliveries.dead_lettered',\n retried: 'relaybus.deliveries.retried',\n leaseLost: 'relaybus.lease.lost',\n endToEndLatency: 'relaybus.end_to_end.latency',\n failures: 'relaybus.failures',\n} as const;\n\n/** `error.type`: the relaybus error code when there is one, else the error's class name. */\nexport function errorType(error: ErrorInfo): string {\n return error.code ?? error.name;\n}\n","import type { Attributes, Counter, Histogram, Meter } from '@opentelemetry/api';\nimport type {\n BacklogEvent,\n ClaimFinishedEvent,\n ClaimedDelivery,\n ErrorInfo,\n FailureStage,\n HandlerFinishedEvent,\n HandlerStartedEvent,\n InvalidMessageEvent,\n PublishFinishedEvent,\n ReceiveFinishedEvent,\n RelayBusObserver,\n TransportSentEvent,\n} from '@relaybus/core';\nimport { ATTRIBUTES, METRICS, RELAYBUS_SYSTEM, errorType } from './semantic-conventions.js';\n\nconst MILLISECONDS_PER_SECOND = 1_000;\n\n/* eslint-disable no-magic-numbers -- histogram bucket boundaries */\n/** Bucket boundaries in seconds the messaging semantic conventions advise for durations. */\nconst DURATION_BUCKETS = [\n 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10,\n];\n\n/** End-to-end latency spans retries and delays: buckets up to an hour. */\nconst LATENCY_BUCKETS = [\n 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 30, 60, 300, 900, 3_600,\n];\n\nconst COUNT_BUCKETS = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1_000];\n/* eslint-enable no-magic-numbers */\n\n/** The metric instruments, created once per meter. */\ntype Instruments = {\n readonly operationDuration: Histogram;\n readonly sentMessages: Counter;\n readonly consumedMessages: Counter;\n readonly invalidMessages: Counter;\n readonly processDuration: Histogram;\n readonly published: Counter;\n readonly claimedDeliveries: Histogram;\n readonly claimedLanes: Histogram;\n readonly deadLettered: Counter;\n readonly retried: Counter;\n readonly leaseLost: Counter;\n readonly endToEndLatency: Histogram;\n readonly failures: Counter;\n};\n\nfunction seconds(milliseconds: number): number {\n return milliseconds / MILLISECONDS_PER_SECOND;\n}\n\nfunction withError(attributes: Attributes, error: ErrorInfo | undefined): Attributes {\n return error === undefined\n ? attributes\n : { ...attributes, [ATTRIBUTES.errorType]: errorType(error) };\n}\n\n/** Attributes of a delivery: the handler is the consumer group, the event type the destination. */\nfunction deliveryAttributes(delivery: ClaimedDelivery): Attributes {\n return {\n [ATTRIBUTES.system]: RELAYBUS_SYSTEM,\n [ATTRIBUTES.destination]: delivery.event.type,\n [ATTRIBUTES.consumerGroup]: delivery.handler,\n };\n}\n\ntype HistogramOptions = { unit: string; description: string; buckets: number[] };\n\nfunction createHistograms(\n meter: Meter,\n): Pick<\n Instruments,\n 'operationDuration' | 'processDuration' | 'claimedDeliveries' | 'claimedLanes' | 'endToEndLatency'\n> {\n const histogram = (name: string, options: HistogramOptions): Histogram =>\n meter.createHistogram(name, {\n unit: options.unit,\n description: options.description,\n advice: { explicitBucketBoundaries: options.buckets },\n });\n return {\n operationDuration: histogram(METRICS.operationDuration, {\n unit: 's',\n description: 'Duration of publish, claim, send and receive operations.',\n buckets: DURATION_BUCKETS,\n }),\n processDuration: histogram(METRICS.processDuration, {\n unit: 's',\n description: 'Duration of local handler runs.',\n buckets: DURATION_BUCKETS,\n }),\n claimedDeliveries: histogram(METRICS.claimedDeliveries, {\n unit: '{delivery}',\n description: 'Deliveries one claim query returned.',\n buckets: COUNT_BUCKETS,\n }),\n claimedLanes: histogram(METRICS.claimedLanes, {\n unit: '{lane}',\n description: 'Distinct leases (lanes) among the deliveries of one claim.',\n buckets: COUNT_BUCKETS,\n }),\n endToEndLatency: histogram(METRICS.endToEndLatency, {\n unit: 's',\n description: 'Time from an event occurring to a handler or route starting on it.',\n buckets: LATENCY_BUCKETS,\n }),\n };\n}\n\nfunction createInstruments(meter: Meter): Instruments {\n const counter = (name: string, [unit, description]: [string, string]): Counter =>\n meter.createCounter(name, { unit, description });\n return {\n ...createHistograms(meter),\n sentMessages: counter(METRICS.sentMessages, [\n '{message}',\n 'Events a route attempted to send to a broker.',\n ]),\n consumedMessages: counter(METRICS.consumedMessages, [\n '{message}',\n 'Events received from a broker, by what receive did with them.',\n ]),\n invalidMessages: counter(METRICS.invalidMessages, [\n '{message}',\n 'Inbound messages a transport could not decode, so they never reached the bus.',\n ]),\n published: counter(METRICS.published, ['{event}', 'Events passed to publish.']),\n deadLettered: counter(METRICS.deadLettered, ['{delivery}', 'Deliveries moved to dead.']),\n retried: counter(METRICS.retried, ['{delivery}', 'Failed attempts rescheduled for a retry.']),\n leaseLost: counter(METRICS.leaseLost, [\n '{delivery}',\n 'Deliveries whose lease was lost while they ran.',\n ]),\n failures: counter(METRICS.failures, [\n '{failure}',\n 'Errors relaybus caught and reported, by stage.',\n ]),\n };\n}\n\n/**\n * Turns relaybus observer hooks into OpenTelemetry metrics. The backlog gauges report the last\n * reading of `onBacklog`, so they need `backlogInterval` on the bus.\n */\nexport class RelayBusMetricsObserver implements RelayBusObserver {\n readonly #instruments: Instruments;\n #backlog: BacklogEvent | undefined;\n\n constructor(meter: Meter) {\n this.#instruments = createInstruments(meter);\n meter\n .createObservableGauge(METRICS.pending, {\n unit: '{delivery}',\n description: 'Deliveries waiting to run, at the last backlog reading.',\n })\n .addCallback((result) => {\n if (this.#backlog !== undefined) {\n result.observe(this.#backlog.pending);\n }\n });\n meter\n .createObservableGauge(METRICS.oldestAge, {\n unit: 's',\n description: 'How long the oldest due delivery had waited, at the last backlog reading.',\n })\n .addCallback((result) => {\n if (this.#backlog !== undefined) {\n result.observe(seconds(this.#backlog.oldestPendingAgeMs));\n }\n });\n }\n\n onPublishFinished(event: PublishFinishedEvent): void {\n const types = new Set(event.eventTypes);\n const base: Attributes = {\n [ATTRIBUTES.system]: RELAYBUS_SYSTEM,\n [ATTRIBUTES.operationName]: 'publish',\n [ATTRIBUTES.operationType]: 'create',\n };\n const [onlyType] = types;\n this.#instruments.operationDuration.record(\n seconds(event.durationMs),\n withError(\n types.size === 1 ? { ...base, [ATTRIBUTES.destination]: onlyType } : base,\n event.error,\n ),\n );\n for (const type of event.eventTypes) {\n this.#instruments.published.add(\n 1,\n withError(\n { [ATTRIBUTES.system]: RELAYBUS_SYSTEM, [ATTRIBUTES.destination]: type },\n event.error,\n ),\n );\n }\n }\n\n onClaimFinished(event: ClaimFinishedEvent): void {\n const attributes: Attributes = {\n [ATTRIBUTES.system]: RELAYBUS_SYSTEM,\n [ATTRIBUTES.operationName]: 'claim',\n [ATTRIBUTES.operationType]: 'receive',\n };\n this.#instruments.operationDuration.record(\n seconds(event.durationMs),\n withError(attributes, event.error),\n );\n if (event.outcome === 'success') {\n this.#instruments.claimedDeliveries.record(event.claimed, attributes);\n this.#instruments.claimedLanes.record(event.lanes, attributes);\n }\n }\n\n onHandlerStarted(event: HandlerStartedEvent): void {\n this.#instruments.endToEndLatency.record(seconds(event.endToEndLatencyMs), {\n ...deliveryAttributes(event.delivery),\n [ATTRIBUTES.deliveryKind]: event.kind,\n });\n }\n\n onHandlerFinished(event: HandlerFinishedEvent): void {\n // A route's run is its send, measured by onTransportSent.\n if (event.kind === 'handler') {\n this.#instruments.processDuration.record(\n seconds(event.durationMs),\n withError(\n {\n ...deliveryAttributes(event.delivery),\n [ATTRIBUTES.operationName]: 'process',\n [ATTRIBUTES.operationType]: 'process',\n },\n event.error,\n ),\n );\n }\n }\n\n onTransportSent(event: TransportSentEvent): void {\n const attributes = withError(\n {\n [ATTRIBUTES.system]: event.system,\n [ATTRIBUTES.destination]: event.destination,\n [ATTRIBUTES.operationName]: 'send',\n [ATTRIBUTES.operationType]: 'send',\n },\n event.error,\n );\n this.#instruments.sentMessages.add(1, attributes);\n this.#instruments.operationDuration.record(seconds(event.durationMs), attributes);\n }\n\n onReceiveFinished(event: ReceiveFinishedEvent): void {\n const attributes: Attributes = withError(\n {\n [ATTRIBUTES.system]: event.system ?? RELAYBUS_SYSTEM,\n [ATTRIBUTES.operationName]: 'receive',\n [ATTRIBUTES.operationType]: 'receive',\n ...(event.destination === undefined ? {} : { [ATTRIBUTES.destination]: event.destination }),\n },\n event.error,\n );\n this.#instruments.consumedMessages.add(1, {\n ...attributes,\n [ATTRIBUTES.receiveOutcome]: event.outcome,\n });\n this.#instruments.operationDuration.record(seconds(event.durationMs), attributes);\n }\n\n onInvalidMessage(event: InvalidMessageEvent): void {\n this.#instruments.invalidMessages.add(\n 1,\n withError(\n { [ATTRIBUTES.system]: event.system, [ATTRIBUTES.destination]: event.destination },\n event.error,\n ),\n );\n }\n\n onDeliveryRetryScheduled(event: {\n readonly delivery: ClaimedDelivery;\n readonly error: ErrorInfo;\n }): void {\n this.#instruments.retried.add(1, withError(deliveryAttributes(event.delivery), event.error));\n }\n\n onDeliveryDead(event: { readonly delivery: ClaimedDelivery; readonly error: ErrorInfo }): void {\n this.#instruments.deadLettered.add(\n 1,\n withError(deliveryAttributes(event.delivery), event.error),\n );\n }\n\n onLeaseLost(event: { readonly delivery: ClaimedDelivery }): void {\n this.#instruments.leaseLost.add(1, deliveryAttributes(event.delivery));\n }\n\n onBacklog(event: BacklogEvent): void {\n this.#backlog = event;\n }\n\n onFailure(event: { readonly stage: FailureStage; readonly error: ErrorInfo }): void {\n this.#instruments.failures.add(\n 1,\n withError({ [ATTRIBUTES.failureStage]: event.stage }, event.error),\n );\n }\n}\n","import {\n SpanKind,\n SpanStatusCode,\n context,\n defaultTextMapGetter,\n defaultTextMapSetter,\n trace,\n type Attributes,\n type Context,\n type Link,\n type Span,\n type TextMapPropagator,\n type Tracer,\n} from '@opentelemetry/api';\nimport {\n toErrorInfo,\n type EventHeaders,\n type ProcessTraceInput,\n type PublishTraceInput,\n type RelayBusTracer,\n type SendTraceInput,\n} from '@relaybus/core';\nimport { ATTRIBUTES, RELAYBUS_SYSTEM, errorType } from './semantic-conventions.js';\n\ntype TracerInput = {\n readonly tracer: Tracer;\n readonly propagator: TextMapPropagator;\n};\n\n/** Ends `span` when `work` settles, marking it failed with the error's type when it rejects. */\nasync function endWhenSettled<T>(span: Span, work: Promise<T>): Promise<T> {\n try {\n return await work;\n } catch (error) {\n const info = toErrorInfo(error);\n span.recordException(error instanceof Error ? error : info.message);\n span.setAttribute(ATTRIBUTES.errorType, errorType(info));\n span.setStatus({ code: SpanStatusCode.ERROR, message: info.message });\n throw error;\n } finally {\n span.end();\n }\n}\n\n/**\n * relaybus tracing hooks on an OpenTelemetry tracer: `publish <type>` and `send <destination>`\n * producer spans, `process <type>` consumer spans, and the trace context in event headers.\n */\nexport class RelayBusOpenTelemetryTracer implements RelayBusTracer {\n readonly #tracer: Tracer;\n readonly #propagator: TextMapPropagator;\n\n constructor({ tracer, propagator }: TracerInput) {\n this.#tracer = tracer;\n this.#propagator = propagator;\n }\n\n /** A producer span, child of the caller's active span; its context goes into every event. */\n publish<T>(input: PublishTraceInput, run: (headers: EventHeaders) => Promise<T>): Promise<T> {\n const types = [...new Set(input.eventTypes)];\n const attributes: Attributes = {\n [ATTRIBUTES.system]: RELAYBUS_SYSTEM,\n [ATTRIBUTES.operationName]: 'publish',\n [ATTRIBUTES.operationType]: 'create',\n ...(types.length === 1 ? { [ATTRIBUTES.destination]: types[0] } : {}),\n ...(input.eventTypes.length > 1 ? { [ATTRIBUTES.batchCount]: input.eventTypes.length } : {}),\n };\n const name = types.length === 1 ? `publish ${types[0]}` : 'publish';\n return this.#runInSpan(\n { name, kind: SpanKind.PRODUCER, attributes, parent: context.active() },\n run,\n );\n }\n\n /**\n * A producer span, child of the publish span whose context the stored event carries (and linked\n * to it); the event goes to the broker with this span's context.\n */\n send<T>(input: SendTraceInput, run: (headers: EventHeaders) => Promise<T>): Promise<T> {\n const { envelope } = input;\n const parent = this.#extract(envelope.headers);\n const published = trace.getSpanContext(parent);\n const attributes: Attributes = {\n [ATTRIBUTES.system]: input.system,\n [ATTRIBUTES.destination]: input.destination,\n [ATTRIBUTES.operationName]: 'send',\n [ATTRIBUTES.operationType]: 'send',\n [ATTRIBUTES.messageId]: envelope.id,\n [ATTRIBUTES.eventType]: envelope.type,\n ...(envelope.correlationId === null\n ? {}\n : { [ATTRIBUTES.conversationId]: envelope.correlationId }),\n };\n return this.#runInSpan(\n {\n name: `send ${input.destination}`,\n kind: SpanKind.PRODUCER,\n attributes,\n parent,\n ...(published === undefined ? {} : { links: [{ context: published }] }),\n },\n run,\n );\n }\n\n /** A consumer span, child of the trace context the event arrived with, active while the handler runs. */\n process<T>(input: ProcessTraceInput, run: () => Promise<T>): Promise<T> {\n const { delivery } = input;\n const parent = this.#extract(delivery.event.headers);\n const span = this.#tracer.startSpan(\n `process ${delivery.event.type}`,\n {\n kind: SpanKind.CONSUMER,\n attributes: {\n [ATTRIBUTES.system]: RELAYBUS_SYSTEM,\n [ATTRIBUTES.destination]: delivery.event.type,\n [ATTRIBUTES.operationName]: 'process',\n [ATTRIBUTES.operationType]: 'process',\n [ATTRIBUTES.consumerGroup]: delivery.handler,\n [ATTRIBUTES.messageId]: delivery.event.id,\n [ATTRIBUTES.deliveryAttempt]: delivery.attempt,\n },\n },\n parent,\n );\n return endWhenSettled(span, context.with(trace.setSpan(parent, span), run));\n }\n\n #extract(headers: EventHeaders): Context {\n return this.#propagator.extract(context.active(), headers, defaultTextMapGetter);\n }\n\n #runInSpan<T>(\n span: {\n readonly name: string;\n readonly kind: SpanKind;\n readonly attributes: Attributes;\n readonly parent: Context;\n readonly links?: Link[];\n },\n run: (headers: EventHeaders) => Promise<T>,\n ): Promise<T> {\n const started = this.#tracer.startSpan(\n span.name,\n {\n kind: span.kind,\n attributes: span.attributes,\n ...(span.links === undefined ? {} : { links: span.links }),\n },\n span.parent,\n );\n const active = trace.setSpan(span.parent, started);\n const headers: Record<string, string> = {};\n this.#propagator.inject(active, headers, defaultTextMapSetter);\n return endWhenSettled(\n started,\n context.with(active, () => run(headers)),\n );\n }\n}\n","import {\n createTraceState,\n isSpanContextValid,\n trace,\n type Context,\n type SpanContext,\n type TextMapGetter,\n type TextMapPropagator,\n type TextMapSetter,\n} from '@opentelemetry/api';\nimport { TRACEPARENT_HEADER, TRACESTATE_HEADER, traceContextOf } from '@relaybus/core';\n\nconst HEX = 16;\nconst FLAGS_DIGITS = 2;\n/** Trace flags are one byte, written as two hex digits. */\nconst DEFINED_FLAGS = 0xff;\n\n/** A header value as a getter returns it: some carriers repeat headers. */\nfunction firstValue(value: string | string[] | undefined): string | undefined {\n return Array.isArray(value) ? value[0] : value;\n}\n\n/**\n * The W3C Trace Context propagator (`traceparent`, `tracestate`), so relaybus propagates traces\n * without `@opentelemetry/core`. Pass another one, such as the global `propagation`, as the\n * `propagator` option of `relayBusOpenTelemetry` to use what the SDK configured.\n */\nexport class W3CTraceContextPropagator implements TextMapPropagator {\n // eslint-disable-next-line relaybus/max-two-params -- TextMapPropagator.inject signature\n inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n const spanContext = trace.getSpanContext(context);\n if (spanContext === undefined || !isSpanContextValid(spanContext)) {\n return;\n }\n const flags = (spanContext.traceFlags & DEFINED_FLAGS)\n .toString(HEX)\n .padStart(FLAGS_DIGITS, '0');\n setter.set(\n carrier,\n TRACEPARENT_HEADER,\n `00-${spanContext.traceId}-${spanContext.spanId}-${flags}`,\n );\n const traceState = spanContext.traceState?.serialize();\n if (traceState !== undefined && traceState.length > 0) {\n setter.set(carrier, TRACESTATE_HEADER, traceState);\n }\n }\n\n // eslint-disable-next-line relaybus/max-two-params -- TextMapPropagator.extract signature\n extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n const traceparent = firstValue(getter.get(carrier, TRACEPARENT_HEADER));\n const tracestate = firstValue(getter.get(carrier, TRACESTATE_HEADER));\n const traceContext =\n traceparent === undefined\n ? undefined\n : traceContextOf(tracestate === undefined ? { traceparent } : { traceparent, tracestate });\n if (traceContext === undefined) {\n return context;\n }\n const [, traceId, spanId, flags] = traceContext.traceparent.split('-') as [\n string,\n string,\n string,\n string,\n ];\n const spanContext: SpanContext = {\n traceId,\n spanId,\n traceFlags: Number.parseInt(flags, HEX),\n isRemote: true,\n ...(traceContext.tracestate === undefined\n ? {}\n : { traceState: createTraceState(traceContext.tracestate) }),\n };\n return trace.setSpanContext(context, spanContext);\n }\n\n fields(): string[] {\n return [TRACEPARENT_HEADER, TRACESTATE_HEADER];\n }\n}\n","import {\n metrics,\n trace,\n type MeterProvider,\n type TextMapPropagator,\n type TracerProvider,\n} from '@opentelemetry/api';\nimport type { RelayBusObserver, RelayBusTracer } from '@relaybus/core';\nimport { RelayBusMetricsObserver } from './relay-bus-metrics-observer.js';\nimport { RelayBusOpenTelemetryTracer } from './relay-bus-open-telemetry-tracer.js';\nimport { INSTRUMENTATION_SCOPE } from './semantic-conventions.js';\nimport { W3CTraceContextPropagator } from './w3c-trace-context-propagator.js';\n\nexport interface RelayBusOpenTelemetryOptions {\n /** Default: the global meter provider (`metrics.getMeterProvider()`). */\n readonly meterProvider?: MeterProvider;\n /** Default: the global tracer provider (`trace.getTracerProvider()`). */\n readonly tracerProvider?: TracerProvider;\n /**\n * Writes and reads the trace context of events. Default: W3C Trace Context (`traceparent`,\n * `tracestate`). Pass `propagation` from `@opentelemetry/api` to use the SDK's global one.\n */\n readonly propagator?: TextMapPropagator;\n}\n\n/** What `relayBusOpenTelemetry` returns: pass both to the bus. */\nexport interface RelayBusOpenTelemetry {\n /** Metrics; add it to `observers`. */\n readonly observer: RelayBusObserver;\n /** Spans and trace propagation; pass it as `tracer`. */\n readonly tracer: RelayBusTracer;\n}\n\n/**\n * OpenTelemetry metrics and traces for a relaybus.\n *\n * ```ts\n * const otel = relayBusOpenTelemetry();\n * const bus = new RelayBus({ store, observers: [otel.observer], tracer: otel.tracer, backlogInterval: '30s' });\n * ```\n */\nexport function relayBusOpenTelemetry(\n options: RelayBusOpenTelemetryOptions = {},\n): RelayBusOpenTelemetry {\n const meterProvider = options.meterProvider ?? metrics.getMeterProvider();\n const tracerProvider = options.tracerProvider ?? trace.getTracerProvider();\n return {\n observer: new RelayBusMetricsObserver(meterProvider.getMeter(INSTRUMENTATION_SCOPE)),\n tracer: new RelayBusOpenTelemetryTracer({\n tracer: tracerProvider.getTracer(INSTRUMENTATION_SCOPE),\n propagator: options.propagator ?? new W3CTraceContextPropagator(),\n }),\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,77 @@
1
1
  {
2
2
  "name": "@relaybus/otel",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.0",
4
+ "description": "OpenTelemetry for relaybus: messaging metrics after the semantic conventions, outbox backlog gauges, and one trace from publish in one service to the handler in another, with W3C trace context in event headers.",
5
+ "license": "MIT",
6
+ "author": "Berkcan Şavur <berkcansavur@gmail.com>",
7
+ "homepage": "https://berkcansavur.github.io/relaybus/packages/otel",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/berkcansavur/relaybus.git",
11
+ "directory": "packages/otel"
12
+ },
13
+ "bugs": "https://github.com/berkcansavur/relaybus/issues",
14
+ "keywords": [
15
+ "relaybus",
16
+ "opentelemetry",
17
+ "otel",
18
+ "tracing",
19
+ "metrics",
20
+ "observability",
21
+ "w3c-trace-context",
22
+ "traceparent",
23
+ "transactional-outbox",
24
+ "outbox-pattern",
25
+ "event-bus",
26
+ "nestjs",
27
+ "kafka",
28
+ "rabbitmq"
29
+ ],
30
+ "type": "module",
31
+ "sideEffects": false,
32
+ "main": "./dist/index.cjs",
33
+ "module": "./dist/index.js",
34
+ "types": "./dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "import": {
38
+ "types": "./dist/index.d.ts",
39
+ "default": "./dist/index.js"
40
+ },
41
+ "require": {
42
+ "types": "./dist/index.d.cts",
43
+ "default": "./dist/index.cjs"
44
+ }
45
+ },
46
+ "./package.json": "./package.json"
47
+ },
48
+ "files": [
49
+ "dist",
50
+ "README.md",
51
+ "LICENSE"
52
+ ],
53
+ "engines": {
54
+ "node": ">=22.12.0"
55
+ },
56
+ "publishConfig": {
57
+ "access": "public",
58
+ "provenance": true
59
+ },
60
+ "peerDependencies": {
61
+ "@opentelemetry/api": "^1.3.0",
62
+ "@relaybus/core": "^0.0.0"
63
+ },
64
+ "devDependencies": {
65
+ "@opentelemetry/api": "1.9.1",
66
+ "@opentelemetry/context-async-hooks": "2.12.0",
67
+ "@opentelemetry/sdk-metrics": "2.12.0",
68
+ "@opentelemetry/sdk-trace-base": "2.12.0",
69
+ "@relaybus/core": "0.0.0",
70
+ "@relaybus/testing": "0.0.0",
71
+ "@relaybus/rabbitmq": "0.0.0"
72
+ },
73
+ "scripts": {
74
+ "build": "tsup",
75
+ "typecheck": "tsc -p tsconfig.build.json --noEmit"
76
+ }
6
77
  }