@engjts/nexus 0.1.7 → 0.1.9
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/advanced/playground/generatePlaygroundHTML.d.ts.map +1 -1
- package/dist/advanced/playground/generatePlaygroundHTML.js +107 -0
- package/dist/advanced/playground/generatePlaygroundHTML.js.map +1 -1
- package/dist/advanced/playground/playground.d.ts +19 -0
- package/dist/advanced/playground/playground.d.ts.map +1 -1
- package/dist/advanced/playground/playground.js +70 -0
- package/dist/advanced/playground/playground.js.map +1 -1
- package/dist/advanced/playground/types.d.ts +20 -0
- package/dist/advanced/playground/types.d.ts.map +1 -1
- package/dist/core/application.d.ts +14 -0
- package/dist/core/application.d.ts.map +1 -1
- package/dist/core/application.js +173 -71
- package/dist/core/application.js.map +1 -1
- package/dist/core/context-pool.d.ts +2 -13
- package/dist/core/context-pool.d.ts.map +1 -1
- package/dist/core/context-pool.js +7 -45
- package/dist/core/context-pool.js.map +1 -1
- package/dist/core/context.d.ts +108 -5
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +449 -53
- package/dist/core/context.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +9 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/middleware.d.ts +6 -0
- package/dist/core/middleware.d.ts.map +1 -1
- package/dist/core/middleware.js +83 -84
- package/dist/core/middleware.js.map +1 -1
- package/dist/core/performance/fast-json.d.ts +149 -0
- package/dist/core/performance/fast-json.d.ts.map +1 -0
- package/dist/core/performance/fast-json.js +473 -0
- package/dist/core/performance/fast-json.js.map +1 -0
- package/dist/core/router/file-router.d.ts +20 -7
- package/dist/core/router/file-router.d.ts.map +1 -1
- package/dist/core/router/file-router.js +41 -13
- package/dist/core/router/file-router.js.map +1 -1
- package/dist/core/router/index.d.ts +6 -0
- package/dist/core/router/index.d.ts.map +1 -1
- package/dist/core/router/index.js +33 -6
- package/dist/core/router/index.js.map +1 -1
- package/dist/core/router/radix-tree.d.ts +4 -1
- package/dist/core/router/radix-tree.d.ts.map +1 -1
- package/dist/core/router/radix-tree.js +7 -3
- package/dist/core/router/radix-tree.js.map +1 -1
- package/dist/core/serializer.d.ts +251 -0
- package/dist/core/serializer.d.ts.map +1 -0
- package/dist/core/serializer.js +290 -0
- package/dist/core/serializer.js.map +1 -0
- package/dist/core/types.d.ts +39 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/documentation/01-getting-started.md +0 -240
- package/documentation/02-context.md +0 -335
- package/documentation/03-routing.md +0 -397
- package/documentation/04-middleware.md +0 -483
- package/documentation/05-validation.md +0 -514
- package/documentation/06-error-handling.md +0 -465
- package/documentation/07-performance.md +0 -364
- package/documentation/08-adapters.md +0 -470
- package/documentation/09-api-reference.md +0 -548
- package/documentation/10-examples.md +0 -582
- package/documentation/11-deployment.md +0 -477
- package/documentation/12-sentry.md +0 -620
- package/documentation/13-sentry-data-storage.md +0 -996
- package/documentation/14-sentry-data-reference.md +0 -457
- package/documentation/15-sentry-summary.md +0 -409
- package/documentation/16-alerts-system.md +0 -745
- package/documentation/17-alert-adapters.md +0 -696
- package/documentation/18-alerts-implementation-summary.md +0 -385
- package/documentation/19-class-based-routing.md +0 -840
- package/documentation/20-websocket-realtime.md +0 -813
- package/documentation/21-cache-system.md +0 -510
- package/documentation/22-job-queue.md +0 -772
- package/documentation/23-sentry-plugin.md +0 -551
- package/documentation/24-testing-utilities.md +0 -1287
- package/documentation/25-api-versioning.md +0 -533
- package/documentation/26-context-store.md +0 -607
- package/documentation/27-dependency-injection.md +0 -329
- package/documentation/28-lifecycle-hooks.md +0 -521
- package/documentation/29-package-structure.md +0 -196
- package/documentation/30-plugin-system.md +0 -414
- package/documentation/31-jwt-authentication.md +0 -597
- package/documentation/32-cli.md +0 -268
- package/documentation/ALERTS-COMPLETE-SUMMARY.md +0 -429
- package/documentation/ALERTS-INDEX.md +0 -330
- package/documentation/ALERTS-QUICK-REFERENCE.md +0 -286
- package/documentation/README.md +0 -178
- package/documentation/index.html +0 -34
- package/modern_framework_paper.md +0 -1870
- package/public/css/style.css +0 -87
- package/public/index.html +0 -34
- package/public/js/app.js +0 -27
- package/src/advanced/cache/InMemoryCacheStore.ts +0 -68
- package/src/advanced/cache/MultiTierCache.ts +0 -194
- package/src/advanced/cache/RedisCacheStore.ts +0 -341
- package/src/advanced/cache/index.ts +0 -5
- package/src/advanced/cache/types.ts +0 -40
- package/src/advanced/graphql/SimpleDataLoader.ts +0 -42
- package/src/advanced/graphql/index.ts +0 -22
- package/src/advanced/graphql/server.ts +0 -252
- package/src/advanced/graphql/types.ts +0 -42
- package/src/advanced/jobs/InMemoryQueueStore.ts +0 -68
- package/src/advanced/jobs/JobQueue.ts +0 -556
- package/src/advanced/jobs/RedisQueueStore.ts +0 -367
- package/src/advanced/jobs/index.ts +0 -5
- package/src/advanced/jobs/types.ts +0 -70
- package/src/advanced/observability/APMManager.ts +0 -163
- package/src/advanced/observability/AlertManager.ts +0 -109
- package/src/advanced/observability/MetricRegistry.ts +0 -151
- package/src/advanced/observability/ObservabilityCenter.ts +0 -304
- package/src/advanced/observability/StructuredLogger.ts +0 -154
- package/src/advanced/observability/TracingManager.ts +0 -117
- package/src/advanced/observability/adapters.ts +0 -304
- package/src/advanced/observability/createObservabilityMiddleware.ts +0 -63
- package/src/advanced/observability/index.ts +0 -11
- package/src/advanced/observability/types.ts +0 -174
- package/src/advanced/playground/extractPathParams.ts +0 -6
- package/src/advanced/playground/generateFieldExample.ts +0 -31
- package/src/advanced/playground/generatePlaygroundHTML.ts +0 -1849
- package/src/advanced/playground/generateSummary.ts +0 -19
- package/src/advanced/playground/getTagFromPath.ts +0 -9
- package/src/advanced/playground/index.ts +0 -8
- package/src/advanced/playground/playground.ts +0 -170
- package/src/advanced/playground/types.ts +0 -20
- package/src/advanced/playground/zodToExample.ts +0 -16
- package/src/advanced/playground/zodToParams.ts +0 -15
- package/src/advanced/postman/buildAuth.ts +0 -31
- package/src/advanced/postman/buildBody.ts +0 -15
- package/src/advanced/postman/buildQueryParams.ts +0 -27
- package/src/advanced/postman/buildRequestItem.ts +0 -36
- package/src/advanced/postman/buildResponses.ts +0 -11
- package/src/advanced/postman/buildUrl.ts +0 -33
- package/src/advanced/postman/capitalize.ts +0 -4
- package/src/advanced/postman/generateCollection.ts +0 -59
- package/src/advanced/postman/generateEnvironment.ts +0 -34
- package/src/advanced/postman/generateExampleFromZod.ts +0 -21
- package/src/advanced/postman/generateFieldExample.ts +0 -45
- package/src/advanced/postman/generateName.ts +0 -20
- package/src/advanced/postman/generateUUID.ts +0 -11
- package/src/advanced/postman/getTagFromPath.ts +0 -10
- package/src/advanced/postman/index.ts +0 -28
- package/src/advanced/postman/postman.ts +0 -156
- package/src/advanced/postman/slugify.ts +0 -7
- package/src/advanced/postman/types.ts +0 -140
- package/src/advanced/realtime/index.ts +0 -18
- package/src/advanced/realtime/websocket.ts +0 -231
- package/src/advanced/sentry/index.ts +0 -1236
- package/src/advanced/sentry/types.ts +0 -355
- package/src/advanced/static/generateDirectoryListing.ts +0 -47
- package/src/advanced/static/generateETag.ts +0 -7
- package/src/advanced/static/getMimeType.ts +0 -9
- package/src/advanced/static/index.ts +0 -32
- package/src/advanced/static/isSafePath.ts +0 -13
- package/src/advanced/static/publicDir.ts +0 -21
- package/src/advanced/static/serveStatic.ts +0 -225
- package/src/advanced/static/spa.ts +0 -24
- package/src/advanced/static/types.ts +0 -159
- package/src/advanced/swagger/SwaggerGenerator.ts +0 -66
- package/src/advanced/swagger/buildOperation.ts +0 -61
- package/src/advanced/swagger/buildParameters.ts +0 -61
- package/src/advanced/swagger/buildRequestBody.ts +0 -21
- package/src/advanced/swagger/buildResponses.ts +0 -54
- package/src/advanced/swagger/capitalize.ts +0 -5
- package/src/advanced/swagger/convertPath.ts +0 -9
- package/src/advanced/swagger/createSwagger.ts +0 -12
- package/src/advanced/swagger/generateOperationId.ts +0 -21
- package/src/advanced/swagger/generateSpec.ts +0 -105
- package/src/advanced/swagger/generateSummary.ts +0 -24
- package/src/advanced/swagger/generateSwaggerUI.ts +0 -70
- package/src/advanced/swagger/generateThemeCss.ts +0 -53
- package/src/advanced/swagger/index.ts +0 -25
- package/src/advanced/swagger/swagger.ts +0 -237
- package/src/advanced/swagger/types.ts +0 -206
- package/src/advanced/swagger/zodFieldToOpenAPI.ts +0 -94
- package/src/advanced/swagger/zodSchemaToOpenAPI.ts +0 -50
- package/src/advanced/swagger/zodToOpenAPI.ts +0 -22
- package/src/advanced/testing/factory.ts +0 -509
- package/src/advanced/testing/harness.ts +0 -612
- package/src/advanced/testing/index.ts +0 -430
- package/src/advanced/testing/load-test.ts +0 -618
- package/src/advanced/testing/mock-server.ts +0 -498
- package/src/advanced/testing/mock.ts +0 -670
- package/src/cli/bin.ts +0 -9
- package/src/cli/cli.ts +0 -158
- package/src/cli/commands/add.ts +0 -178
- package/src/cli/commands/build.ts +0 -73
- package/src/cli/commands/create.ts +0 -166
- package/src/cli/commands/dev.ts +0 -85
- package/src/cli/commands/generate.ts +0 -99
- package/src/cli/commands/help.ts +0 -95
- package/src/cli/commands/init.ts +0 -91
- package/src/cli/commands/version.ts +0 -38
- package/src/cli/index.ts +0 -6
- package/src/cli/templates/generators.ts +0 -359
- package/src/cli/templates/index.ts +0 -680
- package/src/cli/utils/exec.ts +0 -52
- package/src/cli/utils/file-system.ts +0 -78
- package/src/cli/utils/logger.ts +0 -111
- package/src/core/adapter.ts +0 -88
- package/src/core/application.ts +0 -1335
- package/src/core/context-pool.ts +0 -127
- package/src/core/context.ts +0 -412
- package/src/core/index.ts +0 -80
- package/src/core/middleware.ts +0 -262
- package/src/core/performance/buffer-pool.ts +0 -108
- package/src/core/performance/middleware-optimizer.ts +0 -162
- package/src/core/plugin/PluginManager.ts +0 -435
- package/src/core/plugin/builder.ts +0 -358
- package/src/core/plugin/index.ts +0 -50
- package/src/core/plugin/types.ts +0 -214
- package/src/core/router/file-router.ts +0 -594
- package/src/core/router/index.ts +0 -227
- package/src/core/router/radix-tree.ts +0 -226
- package/src/core/store/index.ts +0 -30
- package/src/core/store/registry.ts +0 -178
- package/src/core/store/request-store.ts +0 -240
- package/src/core/store/types.ts +0 -233
- package/src/core/types.ts +0 -574
- package/src/database/adapter.ts +0 -35
- package/src/database/adapters/index.ts +0 -1
- package/src/database/adapters/mysql.ts +0 -669
- package/src/database/database.ts +0 -70
- package/src/database/dialect.ts +0 -388
- package/src/database/index.ts +0 -12
- package/src/database/migrations.ts +0 -86
- package/src/database/optimizer.ts +0 -125
- package/src/database/query-builder.ts +0 -404
- package/src/database/realtime.ts +0 -53
- package/src/database/schema.ts +0 -71
- package/src/database/transactions.ts +0 -56
- package/src/database/types.ts +0 -87
- package/src/deployment/cluster.ts +0 -471
- package/src/deployment/config.ts +0 -454
- package/src/deployment/docker.ts +0 -599
- package/src/deployment/graceful-shutdown.ts +0 -373
- package/src/deployment/index.ts +0 -56
- package/src/index.ts +0 -264
- package/src/security/adapter.ts +0 -318
- package/src/security/auth/JWTPlugin.ts +0 -234
- package/src/security/auth/JWTProvider.ts +0 -316
- package/src/security/auth/adapter.ts +0 -12
- package/src/security/auth/jwt.ts +0 -234
- package/src/security/auth/middleware.ts +0 -188
- package/src/security/csrf.ts +0 -220
- package/src/security/headers.ts +0 -108
- package/src/security/index.ts +0 -60
- package/src/security/rate-limit/adapter.ts +0 -7
- package/src/security/rate-limit/memory.ts +0 -108
- package/src/security/rate-limit/middleware.ts +0 -181
- package/src/security/sanitization.ts +0 -75
- package/src/security/types.ts +0 -240
- package/src/security/utils.ts +0 -52
- package/tsconfig.json +0 -39
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
# Sentry Data Storage - Ringkasan
|
|
2
|
-
|
|
3
|
-
## TLDR: Data Apa yang Dikirim ke Sentry?
|
|
4
|
-
|
|
5
|
-
### ✅ SELALU Dikirim (AMAN)
|
|
6
|
-
```
|
|
7
|
-
✓ Event ID, timestamp, platform
|
|
8
|
-
✓ Error/exception details (type, message, stacktrace)
|
|
9
|
-
✓ Server info (hostname, OS, Node version)
|
|
10
|
-
✓ HTTP method & status codes
|
|
11
|
-
✓ Tags (environment, feature, team, etc)
|
|
12
|
-
✓ Breadcrumb trail (activity log)
|
|
13
|
-
✓ Performance metrics (duration, latency)
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
### ⚠️ CONDITIONAL (Hanya jika dikonfigurasi)
|
|
17
|
-
```
|
|
18
|
-
? User data (ID, email, username, IP) - dari extractUser middleware
|
|
19
|
-
? Request headers (user-agent, content-type) - exclude sensitive
|
|
20
|
-
? Request body - DISABLED by default
|
|
21
|
-
? Performance traces - hanya jika enableTracing: true
|
|
22
|
-
? Custom tags & extra data - hanya apa yang di-set
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### 🔴 TIDAK Dikirim (Protected)
|
|
26
|
-
```
|
|
27
|
-
✗ Passwords
|
|
28
|
-
✗ API keys & tokens
|
|
29
|
-
✗ Credit card numbers
|
|
30
|
-
✗ Authorization headers
|
|
31
|
-
✗ Database connection strings
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Data Categories at a Glance
|
|
37
|
-
|
|
38
|
-
| Category | Data | Sent By Default | Safety |
|
|
39
|
-
|----------|------|-----------------|--------|
|
|
40
|
-
| **Metadata** | Event ID, timestamp, platform, level | ✅ Always | ✅ Safe |
|
|
41
|
-
| **Exception** | Error type, message, stack trace | ✅ If error | ⚠️ Check message |
|
|
42
|
-
| **Server** | Hostname, OS, Node version | ✅ Always | ✅ Safe |
|
|
43
|
-
| **User** | ID, email, username, IP | ❌ Not by default | ⚠️ PII |
|
|
44
|
-
| **HTTP Request** | URL, method, headers, body | ⚠️ Partial | 🔴 Filtering needed |
|
|
45
|
-
| **Tags** | Custom labels for filtering | ✅ Always | ✅ Safe |
|
|
46
|
-
| **Extra** | Custom context data | ❌ Not by default | ⚠️ Depends on data |
|
|
47
|
-
| **Breadcrumbs** | Activity trail | ✅ Always | ✅ Mostly safe |
|
|
48
|
-
| **Performance** | Traces, spans, duration | ❌ Not by default | ✅ Safe |
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Scope Hierarchy
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
┌─ Global Scope ─────────────────────────┐
|
|
56
|
-
│ • environment (dev/prod/staging) │
|
|
57
|
-
│ • release (app version) │
|
|
58
|
-
│ • global tags & extra │
|
|
59
|
-
│ • sampleRate, DSN config │
|
|
60
|
-
└────────────────────────────────────────┘
|
|
61
|
-
↓ Every Request ↓
|
|
62
|
-
┌─ Request Scope ────────────────────────┐
|
|
63
|
-
│ • user (if extractUser returns data) │
|
|
64
|
-
│ • HTTP context (method, URL, headers) │
|
|
65
|
-
│ • breadcrumbs (per request, max 100) │
|
|
66
|
-
│ • correlationId │
|
|
67
|
-
└────────────────────────────────────────┘
|
|
68
|
-
↓ If Error Occurs ↓
|
|
69
|
-
┌─ Error Scope ──────────────────────────┐
|
|
70
|
-
│ • exception details │
|
|
71
|
-
│ • stack trace │
|
|
72
|
-
│ • per-event tags & extra │
|
|
73
|
-
│ • request context at time of error │
|
|
74
|
-
└────────────────────────────────────────┘
|
|
75
|
-
↓ If Tracing Enabled ↓
|
|
76
|
-
┌─ Transaction Scope ────────────────────┐
|
|
77
|
-
│ • trace_id, span_id │
|
|
78
|
-
│ • operation type & status │
|
|
79
|
-
│ • child spans (db, api calls) │
|
|
80
|
-
│ • performance metrics │
|
|
81
|
-
└────────────────────────────────────────┘
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
---
|
|
85
|
-
|
|
86
|
-
## What Gets Captured in Each Scenario
|
|
87
|
-
|
|
88
|
-
### Scenario 1: Normal Request (No Error)
|
|
89
|
-
```
|
|
90
|
-
Dikirim ke Sentry:
|
|
91
|
-
✓ Breadcrumb: HTTP request start
|
|
92
|
-
✓ Breadcrumb: HTTP request completed (200 OK)
|
|
93
|
-
✓ User context (if extractUser returns data)
|
|
94
|
-
✓ Tags: http.method, http.status_code
|
|
95
|
-
✓ Performance trace (jika tracing enabled)
|
|
96
|
-
|
|
97
|
-
TIDAK dikirim:
|
|
98
|
-
✗ Exception details
|
|
99
|
-
✗ Error-specific data
|
|
100
|
-
✗ Stack traces
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### Scenario 2: Request dengan Error
|
|
104
|
-
```
|
|
105
|
-
Dikirim ke Sentry:
|
|
106
|
-
✓ Full event dengan:
|
|
107
|
-
- Exception details
|
|
108
|
-
- Stack trace (source files, lines)
|
|
109
|
-
- User context (if available)
|
|
110
|
-
- Request context (URL, method, headers)
|
|
111
|
-
- Breadcrumb trail
|
|
112
|
-
- Tags & extra data
|
|
113
|
-
- Performance metrics
|
|
114
|
-
|
|
115
|
-
Dengan filtering:
|
|
116
|
-
✗ Authorization headers (excluded)
|
|
117
|
-
✗ Passwords (redacted)
|
|
118
|
-
✗ API keys (redacted)
|
|
119
|
-
✗ Request body (disabled by default)
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
### Scenario 3: Background Job Error
|
|
123
|
-
```
|
|
124
|
-
Dikirim ke Sentry:
|
|
125
|
-
✓ Exception details
|
|
126
|
-
✓ Stack trace
|
|
127
|
-
✓ Tags: job_name, job_id
|
|
128
|
-
✓ Extra: job_params (jika safe)
|
|
129
|
-
✓ Breadcrumbs: job steps
|
|
130
|
-
|
|
131
|
-
TIDAK dikirim:
|
|
132
|
-
✗ HTTP context (bukan HTTP request)
|
|
133
|
-
✗ User context (tidak ada di background job)
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Configuration Checklist
|
|
139
|
-
|
|
140
|
-
### Minimal (Basic)
|
|
141
|
-
```typescript
|
|
142
|
-
app.sentry({
|
|
143
|
-
dsn: process.env.SENTRY_DSN!
|
|
144
|
-
});
|
|
145
|
-
// ✓ All errors captured
|
|
146
|
-
// ✓ Safe defaults applied
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### Recommended (Production)
|
|
150
|
-
```typescript
|
|
151
|
-
app.sentry({
|
|
152
|
-
dsn: process.env.SENTRY_DSN!,
|
|
153
|
-
environment: process.env.NODE_ENV,
|
|
154
|
-
release: process.env.npm_package_version,
|
|
155
|
-
tags: { app: 'my-api', region: 'us-east' },
|
|
156
|
-
sampleRate: 1.0,
|
|
157
|
-
tracesSampleRate: 0.1,
|
|
158
|
-
sendDefaultPii: false
|
|
159
|
-
}, {
|
|
160
|
-
excludeHeaders: ['authorization', 'cookie', 'x-api-key'],
|
|
161
|
-
extractUser: (ctx) => ctx.user ? { id: ctx.user.id } : null
|
|
162
|
-
});
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
### Maximum Security (Financial/Healthcare)
|
|
166
|
-
```typescript
|
|
167
|
-
app.sentry({
|
|
168
|
-
dsn: process.env.SENTRY_DSN!,
|
|
169
|
-
environment: process.env.NODE_ENV,
|
|
170
|
-
release: process.env.npm_package_version,
|
|
171
|
-
sendDefaultPii: false,
|
|
172
|
-
|
|
173
|
-
beforeSend: (event) => {
|
|
174
|
-
// Remove all user data
|
|
175
|
-
delete event.user;
|
|
176
|
-
|
|
177
|
-
// Remove request body
|
|
178
|
-
delete event.request?.data;
|
|
179
|
-
|
|
180
|
-
// Scrub error messages
|
|
181
|
-
event.exception?.values?.forEach(exc => {
|
|
182
|
-
exc.value = exc.value.replace(/\d{4}-\d{4}-\d{4}-\d{4}/g, '[CARD]');
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
return event;
|
|
186
|
-
}
|
|
187
|
-
}, {
|
|
188
|
-
includeRequestBody: false,
|
|
189
|
-
includeHeaders: false,
|
|
190
|
-
extractUser: () => null
|
|
191
|
-
});
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Data Flow Summary
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
HTTP Request comes in
|
|
200
|
-
↓
|
|
201
|
-
Middleware captures HTTP context
|
|
202
|
-
↓
|
|
203
|
-
Add breadcrumb: HTTP request
|
|
204
|
-
↓
|
|
205
|
-
Extract user (if configured)
|
|
206
|
-
↓
|
|
207
|
-
Start performance trace (if enabled)
|
|
208
|
-
↓
|
|
209
|
-
Handler execution
|
|
210
|
-
├─ Success → Add success breadcrumb → Send trace only
|
|
211
|
-
└─ Error → Capture exception → Build complete event
|
|
212
|
-
↓
|
|
213
|
-
Apply beforeSend filter
|
|
214
|
-
↓
|
|
215
|
-
Build envelope with:
|
|
216
|
-
- Event metadata
|
|
217
|
-
- Exception/message
|
|
218
|
-
- User context
|
|
219
|
-
- Request context
|
|
220
|
-
- Tags & extra
|
|
221
|
-
- Breadcrumbs
|
|
222
|
-
- Traces
|
|
223
|
-
↓
|
|
224
|
-
Send to Sentry (async, non-blocking)
|
|
225
|
-
↓
|
|
226
|
-
Sentry receives
|
|
227
|
-
↓
|
|
228
|
-
Process & deduplicate
|
|
229
|
-
↓
|
|
230
|
-
Create issue group
|
|
231
|
-
↓
|
|
232
|
-
Store in database
|
|
233
|
-
↓
|
|
234
|
-
Update dashboard
|
|
235
|
-
↓
|
|
236
|
-
Trigger alerts
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
## Size Estimates
|
|
242
|
-
|
|
243
|
-
### Typical Event Sizes
|
|
244
|
-
|
|
245
|
-
```
|
|
246
|
-
Metadata only: ~500 bytes
|
|
247
|
-
Simple error: ~2-5 KB
|
|
248
|
-
Complex error: ~10-20 KB
|
|
249
|
-
With request body: ~20-50 KB
|
|
250
|
-
With traces: ~30-100 KB
|
|
251
|
-
With all breadcrumbs: ~50-150 KB
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### Quota Impact
|
|
255
|
-
|
|
256
|
-
```
|
|
257
|
-
Free Tier: 5,000 events/month
|
|
258
|
-
Pro Tier: 50,000+ events/month
|
|
259
|
-
|
|
260
|
-
Typical app:
|
|
261
|
-
- 10 errors/day = 300 events/month ✓
|
|
262
|
-
- 100 errors/day = 3,000 events/month ✓
|
|
263
|
-
- 1,000 errors/day = 30,000 events/month ⚠️
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## Common Questions
|
|
269
|
-
|
|
270
|
-
### Q1: Apakah email user dikirim ke Sentry?
|
|
271
|
-
**A**: Tidak, kecuali Anda secara eksplisit menambahkannya via `extractUser`:
|
|
272
|
-
```typescript
|
|
273
|
-
extractUser: (ctx) => ({
|
|
274
|
-
id: ctx.user.id,
|
|
275
|
-
email: ctx.user.email // This gets sent
|
|
276
|
-
})
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### Q2: Request body dikirim?
|
|
280
|
-
**A**: Tidak, disabled by default:
|
|
281
|
-
```typescript
|
|
282
|
-
app.sentry({}, {
|
|
283
|
-
includeRequestBody: false // Default
|
|
284
|
-
});
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### Q3: Authorization header dikirim?
|
|
288
|
-
**A**: Tidak, automatically excluded:
|
|
289
|
-
```typescript
|
|
290
|
-
app.sentry({}, {
|
|
291
|
-
excludeHeaders: [
|
|
292
|
-
'authorization', // ← Excluded automatically
|
|
293
|
-
'cookie',
|
|
294
|
-
'x-api-key'
|
|
295
|
-
]
|
|
296
|
-
});
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Q4: Password dalam error message dikirim?
|
|
300
|
-
**A**: Bisa, gunakan `beforeSend` untuk filter:
|
|
301
|
-
```typescript
|
|
302
|
-
beforeSend: (event) => {
|
|
303
|
-
event.exception?.values?.forEach(exc => {
|
|
304
|
-
exc.value = exc.value.replace(/password[^,\s]*/gi, '[REDACTED]');
|
|
305
|
-
});
|
|
306
|
-
return event;
|
|
307
|
-
}
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
### Q5: Database connection string dikirim?
|
|
311
|
-
**A**: Bisa jika ada di error message, gunakan `beforeSend`:
|
|
312
|
-
```typescript
|
|
313
|
-
beforeSend: (event) => {
|
|
314
|
-
if (event.extra?.db_config) {
|
|
315
|
-
delete event.extra.db_config;
|
|
316
|
-
}
|
|
317
|
-
return event;
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
---
|
|
322
|
-
|
|
323
|
-
## Best Practices Summary
|
|
324
|
-
|
|
325
|
-
1. ✅ **Always set environment** - Helps identify production vs dev
|
|
326
|
-
2. ✅ **Use tags for filtering** - Makes debugging easier
|
|
327
|
-
3. ✅ **Exclude sensitive headers** - Authorization, cookies, API keys
|
|
328
|
-
4. ✅ **Set user ID only** - Not email/username without consent
|
|
329
|
-
5. ✅ **Use beforeSend hook** - Filter sensitive error messages
|
|
330
|
-
6. ✅ **Monitor Sentry quota** - Implement sampling if needed
|
|
331
|
-
7. ✅ **Test with debug mode** - See what's being sent
|
|
332
|
-
8. ✅ **Check GDPR compliance** - User consent for PII
|
|
333
|
-
9. ✅ **Use meaningful tags** - Feature, module, team, etc
|
|
334
|
-
10. ✅ **Sample appropriately** - 100% for errors, 10% for traces
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
## Implementation Example
|
|
339
|
-
|
|
340
|
-
```typescript
|
|
341
|
-
import { createApp } from 'nexus';
|
|
342
|
-
|
|
343
|
-
const app = createApp();
|
|
344
|
-
|
|
345
|
-
// Enable Sentry with secure defaults
|
|
346
|
-
app.sentry({
|
|
347
|
-
// Required
|
|
348
|
-
dsn: process.env.SENTRY_DSN!,
|
|
349
|
-
|
|
350
|
-
// Identification
|
|
351
|
-
environment: process.env.NODE_ENV || 'development',
|
|
352
|
-
release: process.env.npm_package_version || '0.0.0',
|
|
353
|
-
serverName: `api-${process.env.REGION || 'unknown'}`,
|
|
354
|
-
|
|
355
|
-
// Sampling
|
|
356
|
-
sampleRate: 1.0, // 100% of errors
|
|
357
|
-
tracesSampleRate: 0.1, // 10% of traces
|
|
358
|
-
|
|
359
|
-
// Security
|
|
360
|
-
sendDefaultPii: false, // Don't send PII by default
|
|
361
|
-
|
|
362
|
-
// Context
|
|
363
|
-
tags: {
|
|
364
|
-
app: 'my-api',
|
|
365
|
-
team: 'backend',
|
|
366
|
-
version: '1.0.0'
|
|
367
|
-
},
|
|
368
|
-
|
|
369
|
-
// Filtering
|
|
370
|
-
beforeSend: (event) => {
|
|
371
|
-
// Your filtering logic
|
|
372
|
-
return event;
|
|
373
|
-
}
|
|
374
|
-
}, {
|
|
375
|
-
// Middleware options
|
|
376
|
-
includeRequestBody: false,
|
|
377
|
-
includeHeaders: true,
|
|
378
|
-
excludeHeaders: [
|
|
379
|
-
'authorization',
|
|
380
|
-
'cookie',
|
|
381
|
-
'x-api-key',
|
|
382
|
-
'x-auth-token'
|
|
383
|
-
],
|
|
384
|
-
ignorePaths: ['/health', '/metrics'],
|
|
385
|
-
|
|
386
|
-
// Extract only safe user data
|
|
387
|
-
extractUser: (ctx) => {
|
|
388
|
-
return ctx.user ? {
|
|
389
|
-
id: ctx.user.id
|
|
390
|
-
// Don't send email/username without explicit consent
|
|
391
|
-
} : null;
|
|
392
|
-
}
|
|
393
|
-
});
|
|
394
|
-
|
|
395
|
-
// Now all errors are tracked securely!
|
|
396
|
-
app.listen(3000);
|
|
397
|
-
```
|
|
398
|
-
|
|
399
|
-
---
|
|
400
|
-
|
|
401
|
-
## Next Steps
|
|
402
|
-
|
|
403
|
-
1. Read full docs: `documentation/12-sentry.md`
|
|
404
|
-
2. Read data details: `documentation/13-sentry-data-storage.md`
|
|
405
|
-
3. Check quick reference: `documentation/14-sentry-data-reference.md`
|
|
406
|
-
4. Test with debug mode: `app.sentry({ debug: true })`
|
|
407
|
-
5. Monitor your Sentry dashboard
|
|
408
|
-
6. Adjust sampling as needed
|
|
409
|
-
7. Set up alerts for critical errors
|