@observantic/sdk 1.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/index.ts","../src/config.ts","../src/resource.ts","../src/tracing.ts","../src/metrics.ts","../src/logging.ts","../src/instrumentation.ts","../src/shutdown.ts"],"sourcesContent":["import { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport {\n diag,\n DiagConsoleLogger,\n DiagLogLevel,\n trace,\n context,\n metrics,\n SpanStatusCode,\n SpanKind,\n Tracer,\n Meter,\n} from \"@opentelemetry/api\";\nimport { logs, Logger } from \"@opentelemetry/api-logs\";\n\nimport {\n ObservanticOptions,\n ResolvedObservanticConfig,\n resolveConfig,\n normalizeEndpoints,\n} from \"./config.js\";\nimport { createResource } from \"./resource.js\";\nimport {\n createTraceExporter,\n createSpanProcessor,\n createSampler,\n} from \"./tracing.js\";\nimport { createMetricExporter, createMetricReader } from \"./metrics.js\";\nimport { createLogExporter, createLogRecordProcessor } from \"./logging.js\";\nimport { createInstrumentations } from \"./instrumentation.js\";\nimport {\n shutdownObservantic,\n installShutdownHooks,\n registerSdk,\n} from \"./shutdown.js\";\n\nexport interface ObservanticClient {\n sdk: NodeSDK | null;\n config: ResolvedObservanticConfig;\n shutdown: () => Promise<void>;\n getTracer: (name?: string, version?: string) => Tracer;\n getMeter: (name?: string, version?: string) => Meter;\n getLogger: (name?: string, version?: string) => Logger;\n}\n\nlet isInitialized = false;\n\n/**\n * Initializes Observantic OpenTelemetry instrumentation for Node.js and Express.\n *\n * @example\n * ```ts\n * import { initObservantic } from \"@observantic/node\";\n *\n * initObservantic({\n * apiKey: \"cw_live_sec_xxxxx\",\n * endpoint: \"https://api.observantic.com\",\n * serviceName: \"my-express-app\"\n * });\n * ```\n */\nexport function initObservantic(options: ObservanticOptions = {}): ObservanticClient {\n const config = resolveConfig(options);\n\n if (config.debug) {\n diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);\n }\n\n if (config.disabled) {\n diag.info(\"[@observantic/node] Telemetry is disabled via configuration.\");\n return {\n sdk: null,\n config,\n shutdown: async () => {},\n getTracer: (name = \"observantic\", version = \"1.0.0\") => trace.getTracer(name, version),\n getMeter: (name = \"observantic\", version = \"1.0.0\") => metrics.getMeter(name, version),\n getLogger: (name = \"observantic\", version = \"1.0.0\") => logs.getLogger(name, version),\n };\n }\n\n if (!config.apiKey) {\n console.warn(\n \"[@observantic/node] Warning: No apiKey provided. Please provide an apiKey in initObservantic({ apiKey }) or set the OBSERVANTIC_API_KEY environment variable.\"\n );\n }\n\n if (isInitialized) {\n diag.warn(\"[@observantic/node] initObservantic was called multiple times. Returning existing client.\");\n return {\n sdk: null,\n config,\n shutdown: shutdownObservantic,\n getTracer: (name = \"observantic\", version = \"1.0.0\") => trace.getTracer(name, version),\n getMeter: (name = \"observantic\", version = \"1.0.0\") => metrics.getMeter(name, version),\n getLogger: (name = \"observantic\", version = \"1.0.0\") => logs.getLogger(name, version),\n };\n }\n\n const resource = createResource(config);\n\n const sdkConfig: any = {\n resource,\n instrumentations: createInstrumentations(config),\n };\n\n // Configure Tracing\n if (config.signals.traces) {\n const traceExporter = createTraceExporter(config);\n const spanProcessor = createSpanProcessor(traceExporter, config);\n const sampler = createSampler(config.traceSampleRate);\n\n sdkConfig.spanProcessor = spanProcessor;\n sdkConfig.sampler = sampler;\n }\n\n // Configure Metrics\n if (config.signals.metrics) {\n const metricExporter = createMetricExporter(config);\n const metricReader = createMetricReader(metricExporter, config);\n sdkConfig.metricReader = metricReader;\n }\n\n // Configure Logs\n if (config.signals.logs) {\n const logExporter = createLogExporter(config);\n const logRecordProcessor = createLogRecordProcessor(logExporter, config);\n sdkConfig.logRecordProcessor = logRecordProcessor;\n }\n\n const sdk = new NodeSDK(sdkConfig);\n\n try {\n sdk.start();\n isInitialized = true;\n diag.info(`[@observantic/node] Initialized successfully for service: \"${config.serviceName}\" [${config.environment}]`);\n\n if (config.autoShutdown) {\n installShutdownHooks(sdk);\n } else {\n registerSdk(sdk);\n }\n } catch (err) {\n diag.error(\"[@observantic/node] Failed to start OpenTelemetry NodeSDK:\", err);\n throw err;\n }\n\n return {\n sdk,\n config,\n shutdown: shutdownObservantic,\n getTracer: (name = config.serviceName, version = config.serviceVersion) =>\n trace.getTracer(name, version),\n getMeter: (name = config.serviceName, version = config.serviceVersion) =>\n metrics.getMeter(name, version),\n getLogger: (name = config.serviceName, version = config.serviceVersion) =>\n logs.getLogger(name, version),\n };\n}\n\n// Export lifecycle methods\nexport { shutdownObservantic };\n\n// Export configuration helpers & types\nexport type { ObservanticOptions, ResolvedObservanticConfig };\nexport { resolveConfig, normalizeEndpoints };\n\n// Re-export standard OpenTelemetry APIs for convenience\nexport {\n trace,\n context,\n metrics,\n SpanStatusCode,\n SpanKind,\n};\nexport { logs } from \"@opentelemetry/api-logs\";\n\n","export interface ObservanticOptions {\n /**\n * Ingestion API key for your Observantic workspace.\n * Defaults to process.env.OBSERVANTIC_API_KEY.\n */\n apiKey?: string;\n\n /**\n * Observantic ingestion base endpoint URL.\n * Defaults to process.env.OBSERVANTIC_ENDPOINT or \"https://api.observantic.com\".\n */\n endpoint?: string;\n\n /**\n * Name of your application service.\n * Defaults to process.env.OBSERVANTIC_SERVICE_NAME, process.env.OTEL_SERVICE_NAME,\n * process.env.npm_package_name, or \"node-service\".\n */\n serviceName?: string;\n\n /**\n * Deployment environment (e.g., \"production\", \"staging\", \"development\").\n * Defaults to process.env.OBSERVANTIC_ENVIRONMENT, process.env.NODE_ENV, or \"development\".\n */\n environment?: string;\n\n /**\n * Version of your application.\n * Defaults to process.env.OBSERVANTIC_SERVICE_VERSION, process.env.npm_package_version, or \"1.0.0\".\n */\n serviceVersion?: string;\n\n /**\n * Custom resource attributes to attach to all telemetry (traces, metrics, logs).\n */\n resourceAttributes?: Record<string, string | number | boolean>;\n\n /**\n * Additional HTTP headers to attach to OTLP export requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Disable telemetry collection entirely (useful in test or CI environments).\n * Defaults to process.env.OBSERVANTIC_DISABLED === \"true\".\n */\n disabled?: boolean;\n\n /**\n * Enable verbose OpenTelemetry internal diagnostic logging.\n * Defaults to process.env.OBSERVANTIC_DEBUG === \"true\".\n */\n debug?: boolean;\n\n /**\n * Automatically install graceful shutdown hooks for SIGINT and SIGTERM.\n * Defaults to true.\n */\n autoShutdown?: boolean;\n\n /**\n * Sampling ratio for traces from 0.0 (0%) to 1.0 (100%).\n * Defaults to 1.0.\n */\n traceSampleRate?: number;\n\n /**\n * Batch span export timeout in milliseconds.\n * Defaults to 5000ms.\n */\n batchTimeoutMillis?: number;\n\n /**\n * Maximum queue size for spans and logs waiting to be exported.\n * Defaults to 2048.\n */\n maxQueueSize?: number;\n\n /**\n * Maximum batch size per export request.\n * Defaults to 512.\n */\n maxExportBatchSize?: number;\n\n /**\n * Metrics periodic export interval in milliseconds.\n * Defaults to 60000ms (60s).\n */\n metricExportIntervalMillis?: number;\n\n /**\n * Enable or disable individual telemetry signals.\n */\n signals?: {\n traces?: boolean;\n metrics?: boolean;\n logs?: boolean;\n };\n}\n\nexport interface ResolvedObservanticConfig {\n apiKey: string;\n endpoint: string;\n tracesEndpoint: string;\n metricsEndpoint: string;\n logsEndpoint: string;\n serviceName: string;\n environment: string;\n serviceVersion: string;\n resourceAttributes: Record<string, string | number | boolean>;\n headers: Record<string, string>;\n disabled: boolean;\n debug: boolean;\n autoShutdown: boolean;\n traceSampleRate: number;\n batchTimeoutMillis: number;\n maxQueueSize: number;\n maxExportBatchSize: number;\n metricExportIntervalMillis: number;\n signals: {\n traces: boolean;\n metrics: boolean;\n logs: boolean;\n };\n}\n\n/**\n * Normalizes an endpoint URL and constructs signal-specific paths.\n */\nexport function normalizeEndpoints(baseEndpoint: string) {\n let cleaned = (baseEndpoint || \"https://api.observantic.com\").trim();\n // Strip trailing slashes\n cleaned = cleaned.replace(/\\/+$/, \"\");\n\n // If user passed specific /v1/traces URL directly as endpoint, handle gracefully\n if (cleaned.endsWith(\"/v1/traces\")) {\n const root = cleaned.slice(0, -\"/v1/traces\".length);\n return {\n endpoint: root,\n tracesEndpoint: cleaned,\n metricsEndpoint: `${root}/v1/metrics`,\n logsEndpoint: `${root}/v1/logs`,\n };\n }\n\n // If user passed /v1 at the end\n if (cleaned.endsWith(\"/v1\")) {\n return {\n endpoint: cleaned,\n tracesEndpoint: `${cleaned}/traces`,\n metricsEndpoint: `${cleaned}/metrics`,\n logsEndpoint: `${cleaned}/logs`,\n };\n }\n\n return {\n endpoint: cleaned,\n tracesEndpoint: `${cleaned}/v1/traces`,\n metricsEndpoint: `${cleaned}/v1/metrics`,\n logsEndpoint: `${cleaned}/v1/logs`,\n };\n}\n\n/**\n * Parses comma-delimited key=value headers often used in OTEL_EXPORTER_OTLP_HEADERS.\n */\nexport function parseOtelHeaders(headerStr?: string): Record<string, string> {\n if (!headerStr) return {};\n const headers: Record<string, string> = {};\n const pairs = headerStr.split(\",\");\n for (const pair of pairs) {\n const idx = pair.indexOf(\"=\");\n if (idx > 0) {\n const key = pair.substring(0, idx).trim();\n const val = pair.substring(idx + 1).trim();\n if (key) headers[key] = val;\n }\n }\n return headers;\n}\n\n/**\n * Resolves user options with environment variables and sensible defaults.\n */\nexport function resolveConfig(options: ObservanticOptions = {}): ResolvedObservanticConfig {\n const env = process.env;\n\n const apiKey =\n options.apiKey ||\n env.OBSERVANTIC_API_KEY ||\n \"\";\n\n const rawEndpoint =\n options.endpoint ||\n env.OBSERVANTIC_ENDPOINT ||\n env.OTEL_EXPORTER_OTLP_ENDPOINT ||\n \"https://api.observantic.com\";\n\n const { endpoint, tracesEndpoint, metricsEndpoint, logsEndpoint } = normalizeEndpoints(rawEndpoint);\n\n const serviceName =\n options.serviceName ||\n env.OBSERVANTIC_SERVICE_NAME ||\n env.OTEL_SERVICE_NAME ||\n env.npm_package_name ||\n process.title ||\n \"node-service\";\n\n const environment =\n options.environment ||\n env.OBSERVANTIC_ENVIRONMENT ||\n env.NODE_ENV ||\n \"development\";\n\n const serviceVersion =\n options.serviceVersion ||\n env.OBSERVANTIC_SERVICE_VERSION ||\n env.npm_package_version ||\n \"1.0.0\";\n\n const disabled =\n options.disabled !== undefined\n ? options.disabled\n : env.OBSERVANTIC_DISABLED === \"true\" || env.OTEL_SDK_DISABLED === \"true\";\n\n const debug =\n options.debug !== undefined\n ? options.debug\n : env.OBSERVANTIC_DEBUG === \"true\" || env.OTEL_LOG_LEVEL === \"debug\";\n\n const autoShutdown = options.autoShutdown !== undefined ? options.autoShutdown : true;\n\n const traceSampleRate =\n options.traceSampleRate !== undefined\n ? Math.max(0, Math.min(1, options.traceSampleRate))\n : env.OBSERVANTIC_TRACE_SAMPLE_RATE\n ? parseFloat(env.OBSERVANTIC_TRACE_SAMPLE_RATE)\n : 1.0;\n\n // Build headers with authentication for Observantic\n const envHeaders = parseOtelHeaders(env.OTEL_EXPORTER_OTLP_HEADERS);\n const headers: Record<string, string> = {\n ...envHeaders,\n ...(options.headers || {}),\n };\n\n if (apiKey) {\n headers[\"Authorization\"] = `Bearer ${apiKey}`;\n headers[\"x-cw-token\"] = apiKey;\n }\n\n return {\n apiKey,\n endpoint,\n tracesEndpoint,\n metricsEndpoint,\n logsEndpoint,\n serviceName,\n environment,\n serviceVersion,\n resourceAttributes: options.resourceAttributes || {},\n headers,\n disabled,\n debug,\n autoShutdown,\n traceSampleRate,\n batchTimeoutMillis: options.batchTimeoutMillis || 5000,\n maxQueueSize: options.maxQueueSize || 2048,\n maxExportBatchSize: options.maxExportBatchSize || 512,\n metricExportIntervalMillis: options.metricExportIntervalMillis || 60000,\n signals: {\n traces: options.signals?.traces !== false,\n metrics: options.signals?.metrics !== false,\n logs: options.signals?.logs !== false,\n },\n };\n}\n\n","import { Resource } from \"@opentelemetry/resources\";\nimport {\n SEMRESATTRS_SERVICE_NAME,\n SEMRESATTRS_SERVICE_VERSION,\n SEMRESATTRS_DEPLOYMENT_ENVIRONMENT,\n SEMRESATTRS_TELEMETRY_SDK_NAME,\n SEMRESATTRS_TELEMETRY_SDK_LANGUAGE,\n SEMRESATTRS_TELEMETRY_SDK_VERSION,\n SEMRESATTRS_PROCESS_PID,\n SEMRESATTRS_PROCESS_RUNTIME_NAME,\n SEMRESATTRS_PROCESS_RUNTIME_VERSION,\n} from \"@opentelemetry/semantic-conventions\";\nimport { ResolvedObservanticConfig } from \"./config.js\";\n\n/**\n * Builds OpenTelemetry Resource with standard semantic conventions and custom attributes.\n */\nexport function createResource(config: ResolvedObservanticConfig): Resource {\n const customAttributes: Record<string, string | number | boolean> = {\n [SEMRESATTRS_SERVICE_NAME]: config.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: config.serviceVersion,\n [SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: config.environment,\n [SEMRESATTRS_TELEMETRY_SDK_NAME]: \"@observantic/sdk\",\n [SEMRESATTRS_TELEMETRY_SDK_LANGUAGE]: \"nodejs\",\n [SEMRESATTRS_TELEMETRY_SDK_VERSION]: \"1.0.0\",\n [SEMRESATTRS_PROCESS_PID]: process.pid,\n [SEMRESATTRS_PROCESS_RUNTIME_NAME]: \"nodejs\",\n [SEMRESATTRS_PROCESS_RUNTIME_VERSION]: process.version,\n ...config.resourceAttributes,\n };\n\n return new Resource(customAttributes);\n}\n\n","import { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport {\n BatchSpanProcessor,\n ParentBasedSampler,\n TraceIdRatioBasedSampler,\n AlwaysOnSampler,\n AlwaysOffSampler,\n Sampler,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { ResolvedObservanticConfig } from \"./config.js\";\n\nexport function createTraceExporter(config: ResolvedObservanticConfig): OTLPTraceExporter {\n return new OTLPTraceExporter({\n url: config.tracesEndpoint,\n headers: config.headers,\n timeoutMillis: 10000,\n });\n}\n\nexport function createSampler(sampleRate: number): Sampler {\n if (sampleRate >= 1.0) {\n return new ParentBasedSampler({ root: new AlwaysOnSampler() });\n }\n if (sampleRate <= 0.0) {\n return new ParentBasedSampler({ root: new AlwaysOffSampler() });\n }\n return new ParentBasedSampler({\n root: new TraceIdRatioBasedSampler(sampleRate),\n });\n}\n\nexport function createSpanProcessor(\n exporter: OTLPTraceExporter,\n config: ResolvedObservanticConfig\n): SpanProcessor {\n return new BatchSpanProcessor(exporter, {\n maxQueueSize: config.maxQueueSize,\n maxExportBatchSize: config.maxExportBatchSize,\n scheduledDelayMillis: config.batchTimeoutMillis,\n exportTimeoutMillis: 10000,\n });\n}\n\n","import { OTLPMetricExporter } from \"@opentelemetry/exporter-metrics-otlp-http\";\nimport {\n PeriodicExportingMetricReader,\n MetricReader,\n AggregationTemporality,\n} from \"@opentelemetry/sdk-metrics\";\nimport { ResolvedObservanticConfig } from \"./config.js\";\n\nexport function createMetricExporter(config: ResolvedObservanticConfig): OTLPMetricExporter {\n return new OTLPMetricExporter({\n url: config.metricsEndpoint,\n headers: config.headers,\n timeoutMillis: 10000,\n temporalityPreference: AggregationTemporality.DELTA,\n });\n}\n\nexport function createMetricReader(\n exporter: OTLPMetricExporter,\n config: ResolvedObservanticConfig\n): MetricReader {\n return new PeriodicExportingMetricReader({\n exporter,\n exportIntervalMillis: config.metricExportIntervalMillis,\n exportTimeoutMillis: 10000,\n });\n}\n\n","import { OTLPLogExporter } from \"@opentelemetry/exporter-logs-otlp-http\";\nimport { BatchLogRecordProcessor, LogRecordProcessor } from \"@opentelemetry/sdk-logs\";\nimport { ResolvedObservanticConfig } from \"./config.js\";\n\nexport function createLogExporter(config: ResolvedObservanticConfig): OTLPLogExporter {\n return new OTLPLogExporter({\n url: config.logsEndpoint,\n headers: config.headers,\n timeoutMillis: 10000,\n });\n}\n\nexport function createLogRecordProcessor(\n exporter: OTLPLogExporter,\n config: ResolvedObservanticConfig\n): LogRecordProcessor {\n return new BatchLogRecordProcessor(exporter, {\n maxQueueSize: config.maxQueueSize,\n maxExportBatchSize: config.maxExportBatchSize,\n scheduledDelayMillis: config.batchTimeoutMillis,\n exportTimeoutMillis: 10000,\n });\n}\n\n","import { getNodeAutoInstrumentations } from \"@opentelemetry/auto-instrumentations-node\";\nimport { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport { ResolvedObservanticConfig } from \"./config.js\";\n\n/**\n * Configures auto-instrumentations with production defaults for Node.js and Express.\n */\nexport function createInstrumentations(\n _config: ResolvedObservanticConfig\n): (Instrumentation | Instrumentation[])[] {\n return [\n getNodeAutoInstrumentations({\n \"@opentelemetry/instrumentation-fs\": {\n // Disable noisy fs hooks by default to prevent span flooding\n enabled: false,\n },\n \"@opentelemetry/instrumentation-http\": {\n enabled: true,\n },\n \"@opentelemetry/instrumentation-express\": {\n enabled: true,\n },\n }),\n ];\n}\n\n","import { NodeSDK } from \"@opentelemetry/sdk-node\";\nimport { diag } from \"@opentelemetry/api\";\n\nlet activeSdk: NodeSDK | null = null;\nlet isShuttingDown = false;\nlet isSignalHandlerRegistered = false;\n\n/**\n * Registers the active NodeSDK instance for lifecycle management.\n */\nexport function registerSdk(sdk: NodeSDK): void {\n activeSdk = sdk;\n}\n\n/**\n * Gracefully shuts down the Observantic OpenTelemetry SDK and flushes pending telemetry.\n */\nexport async function shutdownObservantic(): Promise<void> {\n if (!activeSdk) {\n return;\n }\n\n if (isShuttingDown) {\n return;\n }\n\n isShuttingDown = true;\n diag.info(\"Shutting down Observantic OpenTelemetry SDK...\");\n\n try {\n await activeSdk.shutdown();\n diag.info(\"Observantic OpenTelemetry SDK terminated successfully.\");\n } catch (err) {\n diag.error(\"Error shutting down Observantic OpenTelemetry SDK\", err);\n throw err;\n } finally {\n activeSdk = null;\n isShuttingDown = false;\n }\n}\n\n/**\n * Installs graceful process shutdown listeners for SIGINT and SIGTERM.\n */\nexport function installShutdownHooks(sdk: NodeSDK): void {\n registerSdk(sdk);\n\n if (isSignalHandlerRegistered) {\n return;\n }\n\n const handleSignal = async (signal: string) => {\n diag.info(`Received ${signal}, gracefully shutting down Observantic telemetry...`);\n try {\n await shutdownObservantic();\n } catch (err) {\n diag.error(`Failed to flush telemetry on ${signal}:`, err);\n }\n };\n\n process.once(\"SIGTERM\", () => void handleSignal(\"SIGTERM\"));\n process.once(\"SIGINT\", () => void handleSignal(\"SIGINT\"));\n\n isSignalHandlerRegistered = true;\n}\n\n"],"mappings":"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","names":["diag","logs","diag"]}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@observantic/sdk",
3
+ "version": "1.0.0",
4
+ "description": "Zero-friction OpenTelemetry SDK and auto-instrumentation for Observantic platform",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "scripts": {
25
+ "build": "tsup",
26
+ "dev": "tsup --watch",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "typecheck": "tsc --noEmit",
30
+ "prepublishOnly": "npm run typecheck && npm run build && npm test"
31
+ },
32
+ "keywords": [
33
+ "observantic",
34
+ "opentelemetry",
35
+ "tracing",
36
+ "metrics",
37
+ "logs",
38
+ "observability",
39
+ "apm",
40
+ "express",
41
+ "node"
42
+ ],
43
+ "author": "Observantic",
44
+ "license": "Apache-2.0",
45
+ "dependencies": {
46
+ "@opentelemetry/api": "^1.9.0",
47
+ "@opentelemetry/api-logs": "^0.57.2",
48
+ "@opentelemetry/auto-instrumentations-node": "^0.56.0",
49
+ "@opentelemetry/exporter-logs-otlp-http": "^0.57.2",
50
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.57.2",
51
+ "@opentelemetry/exporter-trace-otlp-http": "^0.57.2",
52
+ "@opentelemetry/resources": "^1.30.1",
53
+ "@opentelemetry/sdk-logs": "^0.57.2",
54
+ "@opentelemetry/sdk-metrics": "^1.30.1",
55
+ "@opentelemetry/sdk-node": "^0.57.2",
56
+ "@opentelemetry/sdk-trace-base": "^1.30.1",
57
+ "@opentelemetry/sdk-trace-node": "^1.30.1",
58
+ "@opentelemetry/semantic-conventions": "^1.30.0"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^20.17.0",
62
+ "tsup": "^8.3.6",
63
+ "typescript": "^5.7.3",
64
+ "vitest": "^3.0.7"
65
+ },
66
+ "engines": {
67
+ "node": ">=18.0.0"
68
+ }
69
+ }