securenow 8.10.0 → 8.11.1

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/package.json CHANGED
@@ -1,55 +1,58 @@
1
- {
2
- "name": "securenow",
3
- "version": "8.10.0",
4
- "description": "OpenTelemetry instrumentation for Node.js, Next.js, and Nuxt - Send traces and logs to any OTLP-compatible backend",
5
- "type": "commonjs",
6
- "main": "register.js",
7
- "types": "register.d.ts",
8
- "bin": {
9
- "securenow": "cli.js",
10
- "securenow-mcp": "mcp/server.js"
11
- },
12
- "keywords": [
13
- "opentelemetry",
14
- "otel",
15
- "tracing",
16
- "logging",
17
- "logs",
18
- "observability",
19
- "apm",
20
- "monitoring",
21
- "cli",
22
- "nextjs",
23
- "next.js",
24
- "instrumentation",
25
- "telemetry",
26
- "distributed-tracing",
27
- "node",
28
- "express",
29
- "fastify",
30
- "nestjs",
31
- "nuxt",
32
- "nuxt3",
33
- "nitro",
34
- "vue",
35
- "firewall",
36
- "ip-blocking",
37
- "waf",
38
- "security"
39
- ],
40
- "exports": {
41
- ".": {
42
- "types": "./register.d.ts",
43
- "default": "./register.js"
44
- },
45
- "./register": {
46
- "types": "./register.d.ts",
47
- "default": "./register.js"
48
- },
49
- "./tracing": {
50
- "types": "./tracing.d.ts",
51
- "default": "./tracing.js"
52
- },
1
+ {
2
+ "name": "securenow",
3
+ "version": "8.11.1",
4
+ "description": "OpenTelemetry instrumentation for Node.js, Next.js, and Nuxt - Send traces and logs to any OTLP-compatible backend",
5
+ "type": "commonjs",
6
+ "main": "register.js",
7
+ "types": "register.d.ts",
8
+ "bin": {
9
+ "securenow": "cli.js",
10
+ "securenow-mcp": "mcp/server.js"
11
+ },
12
+ "scripts": {
13
+ "test": "node test-app-config.js && node test-resolve-ip.js && node test-otel-defaults.js && node test-telemetry.js && node test-legacy-semconv.js && node test-internal-thread.js && node test-package-contents.js"
14
+ },
15
+ "keywords": [
16
+ "opentelemetry",
17
+ "otel",
18
+ "tracing",
19
+ "logging",
20
+ "logs",
21
+ "observability",
22
+ "apm",
23
+ "monitoring",
24
+ "cli",
25
+ "nextjs",
26
+ "next.js",
27
+ "instrumentation",
28
+ "telemetry",
29
+ "distributed-tracing",
30
+ "node",
31
+ "express",
32
+ "fastify",
33
+ "nestjs",
34
+ "nuxt",
35
+ "nuxt3",
36
+ "nitro",
37
+ "vue",
38
+ "firewall",
39
+ "ip-blocking",
40
+ "waf",
41
+ "security"
42
+ ],
43
+ "exports": {
44
+ ".": {
45
+ "types": "./register.d.ts",
46
+ "default": "./register.js"
47
+ },
48
+ "./register": {
49
+ "types": "./register.d.ts",
50
+ "default": "./register.js"
51
+ },
52
+ "./tracing": {
53
+ "types": "./tracing.d.ts",
54
+ "default": "./tracing.js"
55
+ },
53
56
  "./events": {
54
57
  "types": "./events.d.ts",
55
58
  "default": "./events.js"
@@ -58,144 +61,146 @@
58
61
  "types": "./telemetry-schema.d.ts",
59
62
  "default": "./telemetry-schema.js"
60
63
  },
61
- "./sessions": {
62
- "types": "./sessions.d.ts",
63
- "default": "./sessions.js"
64
- },
65
- "./console-instrumentation": {
66
- "default": "./console-instrumentation.js"
67
- },
68
- "./nextjs": {
69
- "types": "./nextjs.d.ts",
70
- "default": "./nextjs.js"
71
- },
72
- "./nextjs-auto-capture": {
73
- "types": "./nextjs-auto-capture.d.ts",
74
- "default": "./nextjs-auto-capture.js"
75
- },
76
- "./nextjs-middleware": {
77
- "types": "./nextjs-middleware.d.ts",
78
- "default": "./nextjs-middleware.js"
79
- },
80
- "./nextjs-wrapper": {
81
- "types": "./nextjs-wrapper.d.ts",
82
- "default": "./nextjs-wrapper.js"
83
- },
84
- "./nextjs-webpack-config": "./nextjs-webpack-config.js",
85
- "./package.json": "./package.json",
86
- "./nuxt": {
87
- "types": "./nuxt.d.ts",
88
- "import": "./nuxt.mjs",
89
- "default": "./nuxt.mjs"
90
- },
91
- "./firewall": {
92
- "default": "./firewall.js"
93
- },
94
- "./challenge": {
95
- "default": "./challenge.js"
96
- },
97
- "./rate-limits": {
98
- "types": "./rate-limits.d.ts",
99
- "default": "./rate-limits.js"
100
- },
101
- "./firewall-only": {
102
- "default": "./firewall-only.js"
103
- },
104
- "./cidr": {
105
- "default": "./cidr.js"
106
- },
107
- "./resolve-ip": {
108
- "default": "./resolve-ip.js"
109
- },
110
- "./register-vite": "./register-vite.js",
111
- "./web-vite": {
112
- "import": "./web-vite.mjs",
113
- "default": "./web-vite.mjs"
114
- },
115
- "./app-config": {
116
- "default": "./app-config.js"
117
- },
118
- "./mcp": {
119
- "default": "./mcp/server.js"
120
- },
121
- "./mcp/catalog": {
122
- "default": "./mcp/catalog.js"
123
- }
124
- },
125
- "files": [
126
- "register.js",
127
- "register.d.ts",
128
- "tracing.js",
129
- "tracing.d.ts",
64
+ "./sessions": {
65
+ "types": "./sessions.d.ts",
66
+ "default": "./sessions.js"
67
+ },
68
+ "./console-instrumentation": {
69
+ "default": "./console-instrumentation.js"
70
+ },
71
+ "./nextjs": {
72
+ "types": "./nextjs.d.ts",
73
+ "default": "./nextjs.js"
74
+ },
75
+ "./nextjs-auto-capture": {
76
+ "types": "./nextjs-auto-capture.d.ts",
77
+ "default": "./nextjs-auto-capture.js"
78
+ },
79
+ "./nextjs-middleware": {
80
+ "types": "./nextjs-middleware.d.ts",
81
+ "default": "./nextjs-middleware.js"
82
+ },
83
+ "./nextjs-wrapper": {
84
+ "types": "./nextjs-wrapper.d.ts",
85
+ "default": "./nextjs-wrapper.js"
86
+ },
87
+ "./nextjs-webpack-config": "./nextjs-webpack-config.js",
88
+ "./package.json": "./package.json",
89
+ "./nuxt": {
90
+ "types": "./nuxt.d.ts",
91
+ "import": "./nuxt.mjs",
92
+ "default": "./nuxt.mjs"
93
+ },
94
+ "./firewall": {
95
+ "default": "./firewall.js"
96
+ },
97
+ "./challenge": {
98
+ "default": "./challenge.js"
99
+ },
100
+ "./rate-limits": {
101
+ "types": "./rate-limits.d.ts",
102
+ "default": "./rate-limits.js"
103
+ },
104
+ "./firewall-only": {
105
+ "default": "./firewall-only.js"
106
+ },
107
+ "./cidr": {
108
+ "default": "./cidr.js"
109
+ },
110
+ "./resolve-ip": {
111
+ "default": "./resolve-ip.js"
112
+ },
113
+ "./register-vite": "./register-vite.js",
114
+ "./web-vite": {
115
+ "import": "./web-vite.mjs",
116
+ "default": "./web-vite.mjs"
117
+ },
118
+ "./app-config": {
119
+ "default": "./app-config.js"
120
+ },
121
+ "./mcp": {
122
+ "default": "./mcp/server.js"
123
+ },
124
+ "./mcp/catalog": {
125
+ "default": "./mcp/catalog.js"
126
+ }
127
+ },
128
+ "files": [
129
+ "register.js",
130
+ "register.d.ts",
131
+ "tracing.js",
132
+ "tracing.d.ts",
130
133
  "events.js",
131
134
  "events.d.ts",
132
135
  "telemetry-schema.js",
133
136
  "telemetry-schema.d.ts",
134
137
  "telemetry-schema.json",
135
- "sessions.js",
136
- "sessions.d.ts",
137
- "console-instrumentation.js",
138
- "nextjs.js",
139
- "nextjs.d.ts",
140
- "nextjs-auto-capture.js",
141
- "nextjs-auto-capture.d.ts",
142
- "nextjs-middleware.js",
143
- "nextjs-middleware.d.ts",
144
- "nextjs-wrapper.js",
145
- "nextjs-wrapper.d.ts",
146
- "nextjs-webpack-config.js",
147
- "nuxt.mjs",
148
- "nuxt.d.ts",
149
- "nuxt-server-plugin.mjs",
150
- "cli.js",
151
- "cli/",
152
- "mcp/",
153
- "free-trial-banner.js",
154
- "resolve-ip.js",
155
- "cidr.js",
156
- "firewall.js",
157
- "challenge.js",
158
- "otel-defaults.js",
159
- "rate-limits.js",
160
- "rate-limits.d.ts",
161
- "firewall-only.js",
162
- "firewall-tcp.js",
163
- "firewall-iptables.js",
164
- "firewall-cloud.js",
165
- "register-vite.js",
166
- "web-vite.mjs",
167
- "app-config.js",
168
- "README.md",
138
+ "sessions.js",
139
+ "sessions.d.ts",
140
+ "console-instrumentation.js",
141
+ "nextjs.js",
142
+ "nextjs.d.ts",
143
+ "nextjs-auto-capture.js",
144
+ "nextjs-auto-capture.d.ts",
145
+ "nextjs-middleware.js",
146
+ "nextjs-middleware.d.ts",
147
+ "nextjs-wrapper.js",
148
+ "nextjs-wrapper.d.ts",
149
+ "nextjs-webpack-config.js",
150
+ "nuxt.mjs",
151
+ "nuxt.d.ts",
152
+ "nuxt-server-plugin.mjs",
153
+ "cli.js",
154
+ "cli/",
155
+ "mcp/",
156
+ "free-trial-banner.js",
157
+ "resolve-ip.js",
158
+ "cidr.js",
159
+ "firewall.js",
160
+ "challenge.js",
161
+ "otel-defaults.js",
162
+ "internal-thread.js",
163
+ "legacy-semconv.js",
164
+ "rate-limits.js",
165
+ "rate-limits.d.ts",
166
+ "firewall-only.js",
167
+ "firewall-tcp.js",
168
+ "firewall-iptables.js",
169
+ "firewall-cloud.js",
170
+ "register-vite.js",
171
+ "web-vite.mjs",
172
+ "app-config.js",
173
+ "README.md",
169
174
  "NPM_README.md",
170
175
  "TELEMETRY-SQL.md",
171
- "SKILL-CLI.md",
172
- "SKILL-API.md"
173
- ],
174
- "dependencies": {
175
- "@opentelemetry/api": ">=1.9.0 <1.10.0",
176
- "@opentelemetry/api-logs": "0.220.0",
177
- "@opentelemetry/auto-instrumentations-node": "0.78.0",
178
- "@opentelemetry/core": "2.9.0",
179
- "@opentelemetry/exporter-logs-otlp-http": "0.220.0",
180
- "@opentelemetry/exporter-trace-otlp-http": "0.220.0",
181
- "@opentelemetry/instrumentation": "0.220.0",
182
- "@opentelemetry/instrumentation-document-load": "0.65.0",
183
- "@opentelemetry/instrumentation-fetch": "0.220.0",
184
- "@opentelemetry/instrumentation-http": "0.220.0",
185
- "@opentelemetry/instrumentation-mongodb": "0.73.0",
186
- "@opentelemetry/instrumentation-user-interaction": "0.64.0",
187
- "@opentelemetry/instrumentation-xml-http-request": "0.220.0",
188
- "@opentelemetry/resources": "2.9.0",
189
- "@opentelemetry/sdk-logs": "0.220.0",
190
- "@opentelemetry/sdk-metrics": "2.9.0",
191
- "@opentelemetry/sdk-node": "0.220.0",
192
- "@opentelemetry/sdk-trace-base": "2.9.0",
193
- "@opentelemetry/sdk-trace-web": "2.9.0",
194
- "@opentelemetry/semantic-conventions": "1.43.0"
195
- },
196
- "optionalDependencies": {
197
- "@vercel/otel": "2.1.3"
198
- },
199
- "sideEffects": true,
200
- "license": "ISC"
201
- }
176
+ "SKILL-CLI.md",
177
+ "SKILL-API.md"
178
+ ],
179
+ "dependencies": {
180
+ "@opentelemetry/api": ">=1.9.0 <1.10.0",
181
+ "@opentelemetry/api-logs": "0.222.0",
182
+ "@opentelemetry/auto-instrumentations-node": "0.80.0",
183
+ "@opentelemetry/core": "2.11.0",
184
+ "@opentelemetry/exporter-logs-otlp-http": "0.222.0",
185
+ "@opentelemetry/exporter-trace-otlp-http": "0.222.0",
186
+ "@opentelemetry/instrumentation": "0.222.0",
187
+ "@opentelemetry/instrumentation-document-load": "0.67.0",
188
+ "@opentelemetry/instrumentation-fetch": "0.222.0",
189
+ "@opentelemetry/instrumentation-http": "0.222.0",
190
+ "@opentelemetry/instrumentation-mongodb": "0.75.0",
191
+ "@opentelemetry/instrumentation-user-interaction": "0.66.0",
192
+ "@opentelemetry/instrumentation-xml-http-request": "0.222.0",
193
+ "@opentelemetry/resources": "2.11.0",
194
+ "@opentelemetry/sdk-logs": "0.222.0",
195
+ "@opentelemetry/sdk-metrics": "2.11.0",
196
+ "@opentelemetry/sdk-node": "0.222.0",
197
+ "@opentelemetry/sdk-trace-base": "2.11.0",
198
+ "@opentelemetry/sdk-trace-web": "2.11.0",
199
+ "@opentelemetry/semantic-conventions": "1.43.0"
200
+ },
201
+ "optionalDependencies": {
202
+ "@vercel/otel": "2.1.3"
203
+ },
204
+ "sideEffects": true,
205
+ "license": "ISC"
206
+ }
package/register.js CHANGED
@@ -4,9 +4,12 @@
4
4
  // For ESM apps ("type": "module"), this file auto-registers the
5
5
  // OpenTelemetry ESM loader hook via module.register() (Node >=20.6).
6
6
  // On older Node versions it falls back to a warning.
7
- 'use strict';
8
-
9
- // 1. Auto-register the ESM loader hook so customers never need --import
7
+ 'use strict';
8
+
9
+ // Do nothing inside Node's internal ESM-hooks thread (see internal-thread.js).
10
+ if (require('./internal-thread').inInternalThread()) return;
11
+
12
+ // 1. Auto-register the ESM loader hook so customers never need --import
10
13
  (() => {
11
14
  try {
12
15
  const fs = require('fs');
@@ -14,7 +17,7 @@
14
17
  const pkgPath = path.resolve(process.cwd(), 'package.json');
15
18
  if (!fs.existsSync(pkgPath)) return;
16
19
 
17
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8').replace(/^\uFEFF/, ''));
20
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8').replace(/^\uFEFF/, ''));
18
21
  if (pkg.type !== 'module') return;
19
22
 
20
23
  // Already registered via --import?
@@ -37,5 +40,5 @@
37
40
  }
38
41
  })();
39
42
 
40
- // 2. Run the OTel SDK setup
41
- require('./tracing');
43
+ // 2. Run the OTel SDK setup
44
+ require('./tracing');
package/tracing.js CHANGED
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ // Do nothing inside Node's internal ESM-hooks thread (see internal-thread.js).
4
+ if (require('./internal-thread').inInternalThread()) return;
5
+
3
6
  /**
4
7
  * Preload with: node --require securenow/register app.js
5
8
  *
@@ -555,9 +558,13 @@ function installRequestBodyObserver(span, request, contentType) {
555
558
  // -------- Trusted proxy IP resolution --------
556
559
  const { resolveClientIpWithDetails } = require('./resolve-ip');
557
560
 
558
- // Configure HTTP instrumentation with body capture
561
+ // Configure HTTP instrumentation with body capture.
562
+ // withLegacyHttpSemconv keeps emitting the http.method/http.target/http.status_code/...
563
+ // attributes the SecureNow pipeline filters on; instrumentation-http >= 0.221
564
+ // only emits the stable HTTP semantic conventions on its own.
559
565
  const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
560
- const httpInstrumentation = new HttpInstrumentation({
566
+ const { withLegacyHttpSemconv, withLegacyDbSemconvExporter } = require('./legacy-semconv');
567
+ const httpInstrumentation = new HttpInstrumentation(withLegacyHttpSemconv({
561
568
  requestHook: (span, request) => {
562
569
  try {
563
570
  const ipDetails = resolveClientIpWithDetails(request);
@@ -607,7 +614,7 @@ const httpInstrumentation = new HttpInstrumentation({
607
614
  // Silently fail
608
615
  }
609
616
  },
610
- });
617
+ }));
611
618
 
612
619
  // -------- Logging Configuration --------
613
620
  // Opt-out default: set config.logging.enabled=false to disable.
@@ -630,7 +637,9 @@ if (loggingEnabled) {
630
637
  headers
631
638
  });
632
639
 
633
- const batchLogProcessor = new BatchLogRecordProcessor(logExporter);
640
+ // @opentelemetry/sdk-logs >= 0.220 takes a single options object; passing the
641
+ // exporter positionally leaves the processor without an exporter (no logs).
642
+ const batchLogProcessor = new BatchLogRecordProcessor({ exporter: logExporter });
634
643
  loggerProvider = new LoggerProvider({
635
644
  resource: sharedResource,
636
645
  processors: [batchLogProcessor],
@@ -738,7 +747,9 @@ process.on('unhandledRejection', (reason) => {
738
747
  });
739
748
 
740
749
  // -------- SDK --------
741
- const traceExporter = new OTLPTraceExporter({ url: tracesUrl, headers });
750
+ // Contrib DB instrumentations >= 0.74 only emit stable db.* names; the wrapper
751
+ // also exports the legacy db.statement/db.system/... aliases SecureNow reads.
752
+ const traceExporter = withLegacyDbSemconvExporter(new OTLPTraceExporter({ url: tracesUrl, headers }));
742
753
  const sdk = new NodeSDK({
743
754
  ...nodeSdkTelemetryOptions,
744
755
  traceExporter,