securenow 7.6.6 → 7.6.8
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/NPM_README.md +13 -13
- package/README.md +21 -37
- package/app-config.js +5 -3
- package/cli/config.js +4 -3
- package/cli/diagnostics.js +54 -15
- package/cli/run.js +40 -11
- package/firewall-only.js +1 -1
- package/firewall.js +88 -57
- package/mcp/catalog.js +1 -1
- package/nextjs-webpack-config.js +3 -15
- package/nextjs.js +21 -23
- package/nuxt-server-plugin.mjs +20 -10
- package/package.json +33 -34
- package/register.js +1 -1
- package/tracing.js +17 -7
- package/web-vite.mjs +23 -13
- package/CONSUMING-APPS-GUIDE.md +0 -463
- package/docs/ALL-FRAMEWORKS-QUICKSTART.md +0 -1388
- package/docs/API-KEYS-GUIDE.md +0 -278
- package/docs/ARCHITECTURE.md +0 -408
- package/docs/AUTO-BODY-CAPTURE.md +0 -412
- package/docs/AUTO-SETUP-SUMMARY.md +0 -331
- package/docs/AUTO-SETUP.md +0 -419
- package/docs/AUTOMATIC-IP-CAPTURE.md +0 -359
- package/docs/BODY-CAPTURE-FIX.md +0 -261
- package/docs/BODY-CAPTURE-QUICKSTART.md +0 -147
- package/docs/CHANGELOG-NEXTJS.md +0 -235
- package/docs/COMPLETION-REPORT.md +0 -408
- package/docs/CUSTOMER-GUIDE.md +0 -364
- package/docs/EASIEST-SETUP.md +0 -342
- package/docs/ENVIRONMENT-VARIABLES.md +0 -166
- package/docs/ENVIRONMENTS.md +0 -60
- package/docs/EXPRESS-BODY-CAPTURE.md +0 -1028
- package/docs/EXPRESS-SETUP-GUIDE.md +0 -722
- package/docs/FINAL-SOLUTION.md +0 -335
- package/docs/FIREWALL-GUIDE.md +0 -440
- package/docs/IMPLEMENTATION-SUMMARY.md +0 -410
- package/docs/INDEX.md +0 -222
- package/docs/LOGGING-GUIDE.md +0 -704
- package/docs/LOGGING-QUICKSTART.md +0 -221
- package/docs/MCP-GUIDE.md +0 -58
- package/docs/NEXTJS-BODY-CAPTURE-COMPARISON.md +0 -323
- package/docs/NEXTJS-BODY-CAPTURE.md +0 -368
- package/docs/NEXTJS-GUIDE.md +0 -392
- package/docs/NEXTJS-QUICKSTART.md +0 -83
- package/docs/NEXTJS-SETUP-COMPLETE.md +0 -795
- package/docs/NEXTJS-WEBPACK-WARNINGS.md +0 -267
- package/docs/NEXTJS-WRAPPER-APPROACH.md +0 -414
- package/docs/NUXT-GUIDE.md +0 -173
- package/docs/QUICKSTART-BODY-CAPTURE.md +0 -293
- package/docs/REDACTION-EXAMPLES.md +0 -484
- package/docs/REQUEST-BODY-CAPTURE.md +0 -587
- package/docs/SOLUTION-SUMMARY.md +0 -312
- package/docs/VERCEL-OTEL-MIGRATION.md +0 -255
- package/examples/README.md +0 -265
- package/examples/express-with-logging.js +0 -137
- package/examples/instrumentation-with-auto-capture.ts +0 -41
- package/examples/next.config.js +0 -37
- package/examples/nextjs-api-route-with-body-capture.ts +0 -54
- package/examples/nextjs-env-example.txt +0 -32
- package/examples/nextjs-instrumentation.js +0 -36
- package/examples/nextjs-instrumentation.ts +0 -36
- package/examples/nextjs-middleware.js +0 -37
- package/examples/nextjs-middleware.ts +0 -37
- package/examples/nextjs-with-logging-example.md +0 -301
- package/examples/nextjs-with-options.ts +0 -36
- package/examples/test-nextjs-setup.js +0 -70
- package/postinstall.js +0 -296
package/docs/SOLUTION-SUMMARY.md
DELETED
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
# ✅ Self-Sufficient Body Capture Solution - Complete!
|
|
2
|
-
|
|
3
|
-
## 🎯 The Challenge
|
|
4
|
-
|
|
5
|
-
**Problem:** Next.js request streams can only be read once. Reading them at the HTTP instrumentation level locks the stream and causes:
|
|
6
|
-
```
|
|
7
|
-
TypeError: Response body object should not be disturbed or locked
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
**Solution:** Use Next.js middleware that:
|
|
11
|
-
- Clones the request before reading (doesn't lock original)
|
|
12
|
-
- Reads body safely
|
|
13
|
-
- All logic is in the package (self-sufficient!)
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 🚀 How It Works (Self-Sufficient!)
|
|
18
|
-
|
|
19
|
-
### For Your Customers - Only 2 Steps!
|
|
20
|
-
|
|
21
|
-
**Step 1: During Installation**
|
|
22
|
-
|
|
23
|
-
When they run `npm install securenow`, the installer asks:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
Would you like to automatically create instrumentation file? (Y/n) Y
|
|
27
|
-
✅ Created instrumentation.ts
|
|
28
|
-
|
|
29
|
-
Would you like to enable request body capture? (y/N) y
|
|
30
|
-
✅ Created middleware.ts
|
|
31
|
-
→ Captures JSON, GraphQL, Form bodies with auto-redaction
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**Step 2: Configure**
|
|
35
|
-
|
|
36
|
-
Edit `.env.local` (already created by installer):
|
|
37
|
-
```bash
|
|
38
|
-
SECURENOW_APPID=my-app
|
|
39
|
-
SECURENOW_INSTANCE=http://otel-collector:4318
|
|
40
|
-
SECURENOW_CAPTURE_BODY=1 # Enable body capture
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**That's IT!** 🎉 No code to write!
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 📦 What's in the Package (Self-Sufficient!)
|
|
48
|
-
|
|
49
|
-
### 1. nextjs-middleware.js
|
|
50
|
-
|
|
51
|
-
**Exports ready-to-use middleware:**
|
|
52
|
-
```javascript
|
|
53
|
-
export { middleware } from 'securenow/nextjs-middleware';
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
**Customers just re-export it!** No code to write:
|
|
57
|
-
```typescript
|
|
58
|
-
// middleware.ts (created by installer)
|
|
59
|
-
export { middleware } from 'securenow/nextjs-middleware';
|
|
60
|
-
|
|
61
|
-
export const config = {
|
|
62
|
-
matcher: '/api/:path*',
|
|
63
|
-
};
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### 2. All Logic is in the Package
|
|
67
|
-
|
|
68
|
-
**The middleware handles:**
|
|
69
|
-
- ✅ Request cloning (doesn't lock stream)
|
|
70
|
-
- ✅ Body parsing (JSON, GraphQL, Form)
|
|
71
|
-
- ✅ Sensitive field redaction (20+ fields)
|
|
72
|
-
- ✅ Size limits
|
|
73
|
-
- ✅ Error handling
|
|
74
|
-
- ✅ Span attribution
|
|
75
|
-
|
|
76
|
-
**Customer writes: 0 lines of logic!**
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 🔧 Technical Solution
|
|
81
|
-
|
|
82
|
-
### The Key: request.clone()
|
|
83
|
-
|
|
84
|
-
```javascript
|
|
85
|
-
// In nextjs-middleware.js (part of package)
|
|
86
|
-
async function middleware(request) {
|
|
87
|
-
// Clone request so original is not consumed
|
|
88
|
-
const clonedRequest = request.clone();
|
|
89
|
-
const bodyText = await clonedRequest.text();
|
|
90
|
-
|
|
91
|
-
// Original request is untouched!
|
|
92
|
-
// Next.js can still read it normally
|
|
93
|
-
|
|
94
|
-
// Parse and redact body
|
|
95
|
-
const redacted = redactSensitiveData(JSON.parse(bodyText));
|
|
96
|
-
|
|
97
|
-
// Add to span
|
|
98
|
-
span.setAttribute('http.request.body', JSON.stringify(redacted));
|
|
99
|
-
|
|
100
|
-
// Continue to Next.js
|
|
101
|
-
return NextResponse.next();
|
|
102
|
-
}
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
**Why this works:**
|
|
106
|
-
- `request.clone()` creates a copy
|
|
107
|
-
- Clone can be read without affecting original
|
|
108
|
-
- Next.js reads the original stream normally
|
|
109
|
-
- No locking errors!
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## 📊 Comparison
|
|
114
|
-
|
|
115
|
-
### ❌ Previous Approach (Broken)
|
|
116
|
-
|
|
117
|
-
```javascript
|
|
118
|
-
// In requestHook - DOESN'T WORK
|
|
119
|
-
request.on('data', (chunk) => {
|
|
120
|
-
chunks.push(chunk); // Consumes stream
|
|
121
|
-
});
|
|
122
|
-
// → Next.js can't read stream → ERROR
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### ✅ New Approach (Works!)
|
|
126
|
-
|
|
127
|
-
```javascript
|
|
128
|
-
// In Next.js middleware - WORKS
|
|
129
|
-
const cloned = request.clone();
|
|
130
|
-
const body = await cloned.text(); // Read clone
|
|
131
|
-
// → Original stream is untouched → No error!
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## 🎯 Customer Journey (Fully Automated!)
|
|
137
|
-
|
|
138
|
-
### Installation Experience
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
$ npm install securenow
|
|
142
|
-
|
|
143
|
-
┌─────────────────────────────────────────────────┐
|
|
144
|
-
│ 🎉 SecureNow installed successfully! │
|
|
145
|
-
│ Next.js project detected │
|
|
146
|
-
└─────────────────────────────────────────────────┘
|
|
147
|
-
|
|
148
|
-
Would you like to automatically create instrumentation file? (Y/n) Y
|
|
149
|
-
✅ Created instrumentation.ts
|
|
150
|
-
|
|
151
|
-
Would you like to enable request body capture? (y/N) y
|
|
152
|
-
✅ Created middleware.ts
|
|
153
|
-
→ Captures JSON, GraphQL, Form bodies with auto-redaction
|
|
154
|
-
|
|
155
|
-
✅ Created .env.local template
|
|
156
|
-
|
|
157
|
-
┌─────────────────────────────────────────────────┐
|
|
158
|
-
│ 🚀 Next Steps: │
|
|
159
|
-
│ │
|
|
160
|
-
│ 1. Edit .env.local and set: │
|
|
161
|
-
│ SECURENOW_APPID=your-app-name │
|
|
162
|
-
│ SECURENOW_INSTANCE=http://otel-collector:4318 │
|
|
163
|
-
│ SECURENOW_CAPTURE_BODY=1 │
|
|
164
|
-
│ │
|
|
165
|
-
│ 2. Run your app: npm run dev │
|
|
166
|
-
│ │
|
|
167
|
-
│ 3. Check SecureNow for traces! │
|
|
168
|
-
│ │
|
|
169
|
-
│ 📝 Body capture enabled with auto-redaction │
|
|
170
|
-
└─────────────────────────────────────────────────┘
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
**Total customer code written: 0 lines!**
|
|
174
|
-
|
|
175
|
-
---
|
|
176
|
-
|
|
177
|
-
## ✨ Self-Sufficient Features
|
|
178
|
-
|
|
179
|
-
### What the Package Provides
|
|
180
|
-
|
|
181
|
-
1. **nextjs-middleware.js**
|
|
182
|
-
- Complete middleware implementation
|
|
183
|
-
- All parsing logic
|
|
184
|
-
- All redaction logic
|
|
185
|
-
- Error handling
|
|
186
|
-
- Span attribution
|
|
187
|
-
|
|
188
|
-
2. **Postinstall Script**
|
|
189
|
-
- Auto-detects Next.js
|
|
190
|
-
- Offers to create files
|
|
191
|
-
- Creates middleware.ts with correct import
|
|
192
|
-
- Updates .env.local template
|
|
193
|
-
|
|
194
|
-
3. **Examples**
|
|
195
|
-
- `examples/nextjs-middleware.ts`
|
|
196
|
-
- `examples/nextjs-middleware.js`
|
|
197
|
-
- Ready to copy if needed
|
|
198
|
-
|
|
199
|
-
4. **Documentation**
|
|
200
|
-
- `NEXTJS-BODY-CAPTURE.md` - Complete guide
|
|
201
|
-
- Shows the one-line import
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## 🔒 Security (Built Into Package!)
|
|
206
|
-
|
|
207
|
-
**All in the package:**
|
|
208
|
-
- ✅ 20+ sensitive fields redacted
|
|
209
|
-
- ✅ Recursive redaction
|
|
210
|
-
- ✅ GraphQL pattern matching
|
|
211
|
-
- ✅ Size limits
|
|
212
|
-
- ✅ Type detection
|
|
213
|
-
|
|
214
|
-
**Customer configuration:**
|
|
215
|
-
```bash
|
|
216
|
-
# Optional: add custom fields
|
|
217
|
-
SECURENOW_SENSITIVE_FIELDS=email,phone
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
**Customer code: 0 lines!**
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## 📝 Files Created for Customer
|
|
225
|
-
|
|
226
|
-
### By Installer
|
|
227
|
-
|
|
228
|
-
1. **instrumentation.ts** (or .js)
|
|
229
|
-
```typescript
|
|
230
|
-
export { middleware } from 'securenow/nextjs-middleware';
|
|
231
|
-
```
|
|
232
|
-
*Just a re-export!*
|
|
233
|
-
|
|
234
|
-
2. **middleware.ts** (or .js) - If they choose body capture
|
|
235
|
-
```typescript
|
|
236
|
-
export { middleware } from 'securenow/nextjs-middleware';
|
|
237
|
-
export const config = { matcher: '/api/:path*' };
|
|
238
|
-
```
|
|
239
|
-
*Just a re-export + config!*
|
|
240
|
-
|
|
241
|
-
3. **.env.local**
|
|
242
|
-
```bash
|
|
243
|
-
SECURENOW_APPID=my-app
|
|
244
|
-
SECURENOW_INSTANCE=http://otel-collector:4318
|
|
245
|
-
SECURENOW_CAPTURE_BODY=1
|
|
246
|
-
```
|
|
247
|
-
*Just configuration!*
|
|
248
|
-
|
|
249
|
-
**Total logic written by customer: 0 lines!**
|
|
250
|
-
|
|
251
|
-
---
|
|
252
|
-
|
|
253
|
-
## 🎉 Result
|
|
254
|
-
|
|
255
|
-
### For Next.js Users
|
|
256
|
-
|
|
257
|
-
**Before (broken):**
|
|
258
|
-
- Install package
|
|
259
|
-
- Enable body capture
|
|
260
|
-
- → Get stream locking error
|
|
261
|
-
- → App breaks
|
|
262
|
-
|
|
263
|
-
**After (self-sufficient):**
|
|
264
|
-
- Install package
|
|
265
|
-
- Answer "Y" twice
|
|
266
|
-
- Edit config values
|
|
267
|
-
- → Everything works
|
|
268
|
-
- → Bodies captured
|
|
269
|
-
- → Sensitive data redacted
|
|
270
|
-
- → Zero code to write
|
|
271
|
-
|
|
272
|
-
### For You
|
|
273
|
-
|
|
274
|
-
**Self-sufficient package:**
|
|
275
|
-
- ✅ Customers write 0 lines of code
|
|
276
|
-
- ✅ Just import from package
|
|
277
|
-
- ✅ All logic in package
|
|
278
|
-
- ✅ No stream locking errors
|
|
279
|
-
- ✅ Works perfectly with Next.js
|
|
280
|
-
- ✅ Automatic setup via installer
|
|
281
|
-
|
|
282
|
-
---
|
|
283
|
-
|
|
284
|
-
## ✅ Checklist
|
|
285
|
-
|
|
286
|
-
- [x] Fixed stream locking error
|
|
287
|
-
- [x] Created nextjs-middleware.js with all logic
|
|
288
|
-
- [x] Updated package.json exports
|
|
289
|
-
- [x] Enhanced postinstall to offer middleware creation
|
|
290
|
-
- [x] Created example files
|
|
291
|
-
- [x] Updated documentation
|
|
292
|
-
- [x] Zero customer code required
|
|
293
|
-
- [x] Tested - no linter errors
|
|
294
|
-
|
|
295
|
-
---
|
|
296
|
-
|
|
297
|
-
## 🚀 Ready to Ship!
|
|
298
|
-
|
|
299
|
-
**The error is fixed and the solution is self-sufficient!**
|
|
300
|
-
|
|
301
|
-
Customers get:
|
|
302
|
-
- ✅ Automatic file creation (installer)
|
|
303
|
-
- ✅ One-line imports (re-export from package)
|
|
304
|
-
- ✅ All logic in package (no code to write)
|
|
305
|
-
- ✅ Automatic redaction (built-in)
|
|
306
|
-
- ✅ No stream errors (uses clone)
|
|
307
|
-
|
|
308
|
-
**Status: Production Ready!** 🎯
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
# Migration to @vercel/otel - Complete!
|
|
2
|
-
|
|
3
|
-
## ✅ What Changed
|
|
4
|
-
|
|
5
|
-
SecureNow now uses **@vercel/otel** for Next.js integration instead of directly using OpenTelemetry SDK.
|
|
6
|
-
|
|
7
|
-
### Benefits
|
|
8
|
-
|
|
9
|
-
✅ **Zero webpack warnings** - @vercel/otel is designed for Next.js bundling
|
|
10
|
-
✅ **Smaller bundle size** - Better tree-shaking
|
|
11
|
-
✅ **Better Next.js integration** - Works seamlessly with Next.js internals
|
|
12
|
-
✅ **Maintained by Vercel** - Always up-to-date with Next.js
|
|
13
|
-
✅ **Simpler code** - Less configuration needed
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## 📦 What Was Added
|
|
18
|
-
|
|
19
|
-
### Dependencies
|
|
20
|
-
|
|
21
|
-
Added to `package.json`:
|
|
22
|
-
```json
|
|
23
|
-
{
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"@vercel/otel": "^1.12.1"
|
|
26
|
-
},
|
|
27
|
-
"peerDependencies": {
|
|
28
|
-
"next": ">=13.0.0"
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Updated Files
|
|
34
|
-
|
|
35
|
-
1. **`nextjs.js`**
|
|
36
|
-
- Now uses `@vercel/otel`'s `registerOTel()` function
|
|
37
|
-
- Simpler, cleaner code
|
|
38
|
-
- No more manual SDK configuration
|
|
39
|
-
- No more webpack warnings!
|
|
40
|
-
|
|
41
|
-
2. **Documentation**
|
|
42
|
-
- Updated to mention zero webpack warnings
|
|
43
|
-
- Added benefits of @vercel/otel approach
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 🚀 For Users
|
|
48
|
-
|
|
49
|
-
### Nothing Changes!
|
|
50
|
-
|
|
51
|
-
The API stays exactly the same:
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
// instrumentation.ts
|
|
55
|
-
import { registerSecureNow } from 'securenow/nextjs';
|
|
56
|
-
|
|
57
|
-
export function register() {
|
|
58
|
-
registerSecureNow();
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
```bash
|
|
63
|
-
# .env.local
|
|
64
|
-
SECURENOW_APPID=my-nextjs-app
|
|
65
|
-
SECURENOW_INSTANCE=http://your-otlp-backend:4318
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### What They Get
|
|
69
|
-
|
|
70
|
-
✅ **No more webpack warnings** like:
|
|
71
|
-
- ❌ "Critical dependency: the request of a dependency is an expression"
|
|
72
|
-
- ❌ "Module not found: Can't resolve '@opentelemetry/winston-transport'"
|
|
73
|
-
- ❌ "Module not found: Can't resolve '@opentelemetry/exporter-jaeger'"
|
|
74
|
-
|
|
75
|
-
✅ **Faster dev server startup** - Less bundling work
|
|
76
|
-
|
|
77
|
-
✅ **Smaller production bundle** - Better optimization
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## 🔧 Technical Details
|
|
82
|
-
|
|
83
|
-
### How It Works
|
|
84
|
-
|
|
85
|
-
1. User calls `registerSecureNow()` in their `instrumentation.ts`
|
|
86
|
-
2. SecureNow sets environment variables:
|
|
87
|
-
- `OTEL_SERVICE_NAME`
|
|
88
|
-
- `OTEL_EXPORTER_OTLP_ENDPOINT`
|
|
89
|
-
- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`
|
|
90
|
-
3. SecureNow calls `@vercel/otel`'s `registerOTel()`
|
|
91
|
-
4. @vercel/otel handles all the OpenTelemetry setup
|
|
92
|
-
5. Traces flow to SecureNow
|
|
93
|
-
|
|
94
|
-
### What @vercel/otel Does
|
|
95
|
-
|
|
96
|
-
- Configures OpenTelemetry SDK for Next.js
|
|
97
|
-
- Handles instrumentation for:
|
|
98
|
-
- Next.js pages and API routes
|
|
99
|
-
- React Server Components
|
|
100
|
-
- Server Actions
|
|
101
|
-
- Edge Runtime (where supported)
|
|
102
|
-
- HTTP requests
|
|
103
|
-
- Database calls
|
|
104
|
-
- Manages bundling properly (no webpack warnings)
|
|
105
|
-
- Optimizes for Next.js build process
|
|
106
|
-
|
|
107
|
-
---
|
|
108
|
-
|
|
109
|
-
## 🎯 Comparison
|
|
110
|
-
|
|
111
|
-
### Before (Direct OpenTelemetry SDK)
|
|
112
|
-
|
|
113
|
-
```javascript
|
|
114
|
-
// Many imports needed
|
|
115
|
-
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
116
|
-
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
|
|
117
|
-
const { Resource } = require('@opentelemetry/resources');
|
|
118
|
-
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
|
119
|
-
|
|
120
|
-
// Manual configuration
|
|
121
|
-
const sdk = new NodeSDK({
|
|
122
|
-
traceExporter: new OTLPTraceExporter({ url: tracesUrl }),
|
|
123
|
-
instrumentations: getNodeAutoInstrumentations(config),
|
|
124
|
-
resource: new Resource({ /* ... */ }),
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
sdk.start();
|
|
128
|
-
|
|
129
|
-
// Problems:
|
|
130
|
-
// ❌ Webpack bundling warnings
|
|
131
|
-
// ❌ Complex configuration
|
|
132
|
-
// ❌ Manual instrumentation setup
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### After (@vercel/otel)
|
|
136
|
-
|
|
137
|
-
```javascript
|
|
138
|
-
// Single import
|
|
139
|
-
const { registerOTel } = require('@vercel/otel');
|
|
140
|
-
|
|
141
|
-
// Simple call
|
|
142
|
-
registerOTel({
|
|
143
|
-
serviceName: serviceName,
|
|
144
|
-
attributes: { /* ... */ },
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Benefits:
|
|
148
|
-
// ✅ Zero webpack warnings
|
|
149
|
-
// ✅ Simple configuration
|
|
150
|
-
// ✅ Auto-instrumentations included
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## 📊 Bundle Size Impact
|
|
156
|
-
|
|
157
|
-
### Before
|
|
158
|
-
- Many @opentelemetry packages bundled
|
|
159
|
-
- ~500KB+ in server bundle
|
|
160
|
-
- Webpack warnings during build
|
|
161
|
-
|
|
162
|
-
### After
|
|
163
|
-
- @vercel/otel handles bundling intelligently
|
|
164
|
-
- ~200KB in server bundle
|
|
165
|
-
- Zero webpack warnings
|
|
166
|
-
- Better tree-shaking
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## 🔄 Migration Path
|
|
171
|
-
|
|
172
|
-
### For Existing Users
|
|
173
|
-
|
|
174
|
-
**No changes needed!** The API is identical:
|
|
175
|
-
|
|
176
|
-
```typescript
|
|
177
|
-
import { registerSecureNow } from 'securenow/nextjs';
|
|
178
|
-
|
|
179
|
-
export function register() {
|
|
180
|
-
registerSecureNow(); // Still works exactly the same
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
All options still work:
|
|
185
|
-
```typescript
|
|
186
|
-
registerSecureNow({
|
|
187
|
-
serviceName: 'my-app',
|
|
188
|
-
endpoint: 'http://otel-collector:4318',
|
|
189
|
-
noUuid: false,
|
|
190
|
-
});
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### For New Users
|
|
194
|
-
|
|
195
|
-
Just install and use - no webpack config needed!
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
npm install securenow
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
```typescript
|
|
202
|
-
import { registerSecureNow } from 'securenow/nextjs';
|
|
203
|
-
export function register() { registerSecureNow(); }
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
**That's it!** No webpack warnings, no extra configuration.
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## 🎉 Summary
|
|
211
|
-
|
|
212
|
-
**Changed:**
|
|
213
|
-
- Implementation now uses @vercel/otel
|
|
214
|
-
- Added @vercel/otel as dependency
|
|
215
|
-
|
|
216
|
-
**Unchanged:**
|
|
217
|
-
- User API (registerSecureNow)
|
|
218
|
-
- Configuration options
|
|
219
|
-
- Environment variables
|
|
220
|
-
- Behavior and functionality
|
|
221
|
-
|
|
222
|
-
**Benefits:**
|
|
223
|
-
- ✅ Zero webpack warnings
|
|
224
|
-
- ✅ Smaller bundles
|
|
225
|
-
- ✅ Better Next.js integration
|
|
226
|
-
- ✅ Simpler code
|
|
227
|
-
- ✅ Future-proof (maintained by Vercel)
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## ✨ Result
|
|
232
|
-
|
|
233
|
-
**Users get a cleaner, faster, warning-free Next.js tracing experience!**
|
|
234
|
-
|
|
235
|
-
No more:
|
|
236
|
-
```
|
|
237
|
-
⚠ Critical dependency: the request of a dependency is an expression
|
|
238
|
-
⚠ Module not found: Can't resolve '@opentelemetry/winston-transport'
|
|
239
|
-
⚠ Module not found: Can't resolve '@opentelemetry/exporter-jaeger'
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Just:
|
|
243
|
-
```
|
|
244
|
-
[securenow] ✅ OpenTelemetry started for Next.js
|
|
245
|
-
✓ Ready in 2.1s
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
**Perfect!** 🎯
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|