@engjts/nexus 0.1.8 → 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.
Files changed (205) hide show
  1. package/package.json +1 -1
  2. package/BENCHMARK_REPORT.md +0 -343
  3. package/documentation/01-getting-started.md +0 -240
  4. package/documentation/02-context.md +0 -335
  5. package/documentation/03-routing.md +0 -397
  6. package/documentation/04-middleware.md +0 -483
  7. package/documentation/05-validation.md +0 -514
  8. package/documentation/06-error-handling.md +0 -465
  9. package/documentation/07-performance.md +0 -364
  10. package/documentation/08-adapters.md +0 -470
  11. package/documentation/09-api-reference.md +0 -548
  12. package/documentation/10-examples.md +0 -582
  13. package/documentation/11-deployment.md +0 -477
  14. package/documentation/12-sentry.md +0 -620
  15. package/documentation/13-sentry-data-storage.md +0 -996
  16. package/documentation/14-sentry-data-reference.md +0 -457
  17. package/documentation/15-sentry-summary.md +0 -409
  18. package/documentation/16-alerts-system.md +0 -745
  19. package/documentation/17-alert-adapters.md +0 -696
  20. package/documentation/18-alerts-implementation-summary.md +0 -385
  21. package/documentation/19-class-based-routing.md +0 -840
  22. package/documentation/20-websocket-realtime.md +0 -813
  23. package/documentation/21-cache-system.md +0 -510
  24. package/documentation/22-job-queue.md +0 -772
  25. package/documentation/23-sentry-plugin.md +0 -551
  26. package/documentation/24-testing-utilities.md +0 -1287
  27. package/documentation/25-api-versioning.md +0 -533
  28. package/documentation/26-context-store.md +0 -607
  29. package/documentation/27-dependency-injection.md +0 -329
  30. package/documentation/28-lifecycle-hooks.md +0 -521
  31. package/documentation/29-package-structure.md +0 -196
  32. package/documentation/30-plugin-system.md +0 -414
  33. package/documentation/31-jwt-authentication.md +0 -597
  34. package/documentation/32-cli.md +0 -268
  35. package/documentation/ALERTS-COMPLETE-SUMMARY.md +0 -429
  36. package/documentation/ALERTS-INDEX.md +0 -330
  37. package/documentation/ALERTS-QUICK-REFERENCE.md +0 -286
  38. package/documentation/README.md +0 -178
  39. package/documentation/index.html +0 -34
  40. package/modern_framework_paper.md +0 -1870
  41. package/public/css/style.css +0 -87
  42. package/public/index.html +0 -34
  43. package/public/js/app.js +0 -27
  44. package/src/advanced/cache/InMemoryCacheStore.ts +0 -68
  45. package/src/advanced/cache/MultiTierCache.ts +0 -194
  46. package/src/advanced/cache/RedisCacheStore.ts +0 -341
  47. package/src/advanced/cache/index.ts +0 -5
  48. package/src/advanced/cache/types.ts +0 -40
  49. package/src/advanced/graphql/SimpleDataLoader.ts +0 -42
  50. package/src/advanced/graphql/index.ts +0 -22
  51. package/src/advanced/graphql/server.ts +0 -252
  52. package/src/advanced/graphql/types.ts +0 -42
  53. package/src/advanced/jobs/InMemoryQueueStore.ts +0 -68
  54. package/src/advanced/jobs/JobQueue.ts +0 -556
  55. package/src/advanced/jobs/RedisQueueStore.ts +0 -367
  56. package/src/advanced/jobs/index.ts +0 -5
  57. package/src/advanced/jobs/types.ts +0 -70
  58. package/src/advanced/observability/APMManager.ts +0 -163
  59. package/src/advanced/observability/AlertManager.ts +0 -109
  60. package/src/advanced/observability/MetricRegistry.ts +0 -151
  61. package/src/advanced/observability/ObservabilityCenter.ts +0 -304
  62. package/src/advanced/observability/StructuredLogger.ts +0 -154
  63. package/src/advanced/observability/TracingManager.ts +0 -117
  64. package/src/advanced/observability/adapters.ts +0 -304
  65. package/src/advanced/observability/createObservabilityMiddleware.ts +0 -63
  66. package/src/advanced/observability/index.ts +0 -11
  67. package/src/advanced/observability/types.ts +0 -174
  68. package/src/advanced/playground/extractPathParams.ts +0 -6
  69. package/src/advanced/playground/generateFieldExample.ts +0 -31
  70. package/src/advanced/playground/generatePlaygroundHTML.ts +0 -1956
  71. package/src/advanced/playground/generateSummary.ts +0 -19
  72. package/src/advanced/playground/getTagFromPath.ts +0 -9
  73. package/src/advanced/playground/index.ts +0 -8
  74. package/src/advanced/playground/playground.ts +0 -250
  75. package/src/advanced/playground/types.ts +0 -49
  76. package/src/advanced/playground/zodToExample.ts +0 -16
  77. package/src/advanced/playground/zodToParams.ts +0 -15
  78. package/src/advanced/postman/buildAuth.ts +0 -31
  79. package/src/advanced/postman/buildBody.ts +0 -15
  80. package/src/advanced/postman/buildQueryParams.ts +0 -27
  81. package/src/advanced/postman/buildRequestItem.ts +0 -36
  82. package/src/advanced/postman/buildResponses.ts +0 -11
  83. package/src/advanced/postman/buildUrl.ts +0 -33
  84. package/src/advanced/postman/capitalize.ts +0 -4
  85. package/src/advanced/postman/generateCollection.ts +0 -59
  86. package/src/advanced/postman/generateEnvironment.ts +0 -34
  87. package/src/advanced/postman/generateExampleFromZod.ts +0 -21
  88. package/src/advanced/postman/generateFieldExample.ts +0 -45
  89. package/src/advanced/postman/generateName.ts +0 -20
  90. package/src/advanced/postman/generateUUID.ts +0 -11
  91. package/src/advanced/postman/getTagFromPath.ts +0 -10
  92. package/src/advanced/postman/index.ts +0 -28
  93. package/src/advanced/postman/postman.ts +0 -156
  94. package/src/advanced/postman/slugify.ts +0 -7
  95. package/src/advanced/postman/types.ts +0 -140
  96. package/src/advanced/realtime/index.ts +0 -18
  97. package/src/advanced/realtime/websocket.ts +0 -231
  98. package/src/advanced/sentry/index.ts +0 -1236
  99. package/src/advanced/sentry/types.ts +0 -355
  100. package/src/advanced/static/generateDirectoryListing.ts +0 -47
  101. package/src/advanced/static/generateETag.ts +0 -7
  102. package/src/advanced/static/getMimeType.ts +0 -9
  103. package/src/advanced/static/index.ts +0 -32
  104. package/src/advanced/static/isSafePath.ts +0 -13
  105. package/src/advanced/static/publicDir.ts +0 -21
  106. package/src/advanced/static/serveStatic.ts +0 -225
  107. package/src/advanced/static/spa.ts +0 -24
  108. package/src/advanced/static/types.ts +0 -159
  109. package/src/advanced/swagger/SwaggerGenerator.ts +0 -66
  110. package/src/advanced/swagger/buildOperation.ts +0 -61
  111. package/src/advanced/swagger/buildParameters.ts +0 -61
  112. package/src/advanced/swagger/buildRequestBody.ts +0 -21
  113. package/src/advanced/swagger/buildResponses.ts +0 -54
  114. package/src/advanced/swagger/capitalize.ts +0 -5
  115. package/src/advanced/swagger/convertPath.ts +0 -9
  116. package/src/advanced/swagger/createSwagger.ts +0 -12
  117. package/src/advanced/swagger/generateOperationId.ts +0 -21
  118. package/src/advanced/swagger/generateSpec.ts +0 -105
  119. package/src/advanced/swagger/generateSummary.ts +0 -24
  120. package/src/advanced/swagger/generateSwaggerUI.ts +0 -70
  121. package/src/advanced/swagger/generateThemeCss.ts +0 -53
  122. package/src/advanced/swagger/index.ts +0 -25
  123. package/src/advanced/swagger/swagger.ts +0 -237
  124. package/src/advanced/swagger/types.ts +0 -206
  125. package/src/advanced/swagger/zodFieldToOpenAPI.ts +0 -94
  126. package/src/advanced/swagger/zodSchemaToOpenAPI.ts +0 -50
  127. package/src/advanced/swagger/zodToOpenAPI.ts +0 -22
  128. package/src/advanced/testing/factory.ts +0 -509
  129. package/src/advanced/testing/harness.ts +0 -612
  130. package/src/advanced/testing/index.ts +0 -430
  131. package/src/advanced/testing/load-test.ts +0 -618
  132. package/src/advanced/testing/mock-server.ts +0 -498
  133. package/src/advanced/testing/mock.ts +0 -670
  134. package/src/cli/bin.ts +0 -9
  135. package/src/cli/cli.ts +0 -158
  136. package/src/cli/commands/add.ts +0 -178
  137. package/src/cli/commands/build.ts +0 -73
  138. package/src/cli/commands/create.ts +0 -166
  139. package/src/cli/commands/dev.ts +0 -85
  140. package/src/cli/commands/generate.ts +0 -99
  141. package/src/cli/commands/help.ts +0 -95
  142. package/src/cli/commands/init.ts +0 -91
  143. package/src/cli/commands/version.ts +0 -38
  144. package/src/cli/index.ts +0 -6
  145. package/src/cli/templates/generators.ts +0 -359
  146. package/src/cli/templates/index.ts +0 -680
  147. package/src/cli/utils/exec.ts +0 -52
  148. package/src/cli/utils/file-system.ts +0 -78
  149. package/src/cli/utils/logger.ts +0 -111
  150. package/src/core/adapter.ts +0 -88
  151. package/src/core/application.ts +0 -1453
  152. package/src/core/context-pool.ts +0 -79
  153. package/src/core/context.ts +0 -856
  154. package/src/core/index.ts +0 -94
  155. package/src/core/middleware.ts +0 -272
  156. package/src/core/performance/buffer-pool.ts +0 -108
  157. package/src/core/performance/middleware-optimizer.ts +0 -162
  158. package/src/core/plugin/PluginManager.ts +0 -435
  159. package/src/core/plugin/builder.ts +0 -358
  160. package/src/core/plugin/index.ts +0 -50
  161. package/src/core/plugin/types.ts +0 -214
  162. package/src/core/router/file-router.ts +0 -623
  163. package/src/core/router/index.ts +0 -260
  164. package/src/core/router/radix-tree.ts +0 -242
  165. package/src/core/serializer.ts +0 -397
  166. package/src/core/store/index.ts +0 -30
  167. package/src/core/store/registry.ts +0 -178
  168. package/src/core/store/request-store.ts +0 -240
  169. package/src/core/store/types.ts +0 -233
  170. package/src/core/types.ts +0 -616
  171. package/src/database/adapter.ts +0 -35
  172. package/src/database/adapters/index.ts +0 -1
  173. package/src/database/adapters/mysql.ts +0 -669
  174. package/src/database/database.ts +0 -70
  175. package/src/database/dialect.ts +0 -388
  176. package/src/database/index.ts +0 -12
  177. package/src/database/migrations.ts +0 -86
  178. package/src/database/optimizer.ts +0 -125
  179. package/src/database/query-builder.ts +0 -404
  180. package/src/database/realtime.ts +0 -53
  181. package/src/database/schema.ts +0 -71
  182. package/src/database/transactions.ts +0 -56
  183. package/src/database/types.ts +0 -87
  184. package/src/deployment/cluster.ts +0 -471
  185. package/src/deployment/config.ts +0 -454
  186. package/src/deployment/docker.ts +0 -599
  187. package/src/deployment/graceful-shutdown.ts +0 -373
  188. package/src/deployment/index.ts +0 -56
  189. package/src/index.ts +0 -281
  190. package/src/security/adapter.ts +0 -318
  191. package/src/security/auth/JWTPlugin.ts +0 -234
  192. package/src/security/auth/JWTProvider.ts +0 -316
  193. package/src/security/auth/adapter.ts +0 -12
  194. package/src/security/auth/jwt.ts +0 -234
  195. package/src/security/auth/middleware.ts +0 -188
  196. package/src/security/csrf.ts +0 -220
  197. package/src/security/headers.ts +0 -108
  198. package/src/security/index.ts +0 -60
  199. package/src/security/rate-limit/adapter.ts +0 -7
  200. package/src/security/rate-limit/memory.ts +0 -108
  201. package/src/security/rate-limit/middleware.ts +0 -181
  202. package/src/security/sanitization.ts +0 -75
  203. package/src/security/types.ts +0 -240
  204. package/src/security/utils.ts +0 -52
  205. package/tsconfig.json +0 -39
@@ -1,551 +0,0 @@
1
- # Sentry Plugin
2
-
3
- Nexus Framework menyediakan integrasi Sentry sebagai plugin untuk error tracking, performance monitoring, dan session management.
4
-
5
- ## Installation
6
-
7
- Sentry plugin sudah built-in di Nexus Framework, tidak perlu install package tambahan.
8
-
9
- ## Quick Start
10
-
11
- ```typescript
12
- import { createApp } from './src';
13
- import { sentry } from './src/advanced/sentry';
14
-
15
- const app = createApp();
16
-
17
- app.plugin(sentry({
18
- dsn: process.env.SENTRY_DSN,
19
- environment: 'production'
20
- }));
21
-
22
- app.listen(3000);
23
- ```
24
-
25
- ## Configuration
26
-
27
- ### Basic Options
28
-
29
- ```typescript
30
- app.plugin(sentry({
31
- // Required: Sentry DSN
32
- dsn: 'https://xxx@xxx.ingest.sentry.io/xxx',
33
-
34
- // Environment name
35
- environment: 'production', // default: process.env.NODE_ENV
36
-
37
- // Release version
38
- release: '1.0.0', // default: process.env.npm_package_version
39
-
40
- // Server name for identification
41
- serverName: 'api-server-1',
42
-
43
- // Debug mode - logs Sentry operations
44
- debug: false
45
- }));
46
- ```
47
-
48
- ### Sampling Options
49
-
50
- ```typescript
51
- app.plugin(sentry({
52
- dsn: '...',
53
-
54
- // Sample rate for error events (0.0 to 1.0)
55
- sampleRate: 1.0, // 100% - capture all errors
56
-
57
- // Sample rate for performance/transaction events
58
- tracesSampleRate: 0.1, // 10% - for production
59
-
60
- // Enable/disable performance monitoring
61
- enableTracing: true
62
- }));
63
- ```
64
-
65
- ### Integration Options
66
-
67
- ```typescript
68
- app.plugin(sentry({
69
- dsn: '...',
70
-
71
- integrations: {
72
- // Capture HTTP request errors
73
- http: true,
74
-
75
- // Capture console.error calls
76
- console: false,
77
-
78
- // Capture unhandled Promise rejections
79
- unhandledRejection: true,
80
-
81
- // Capture uncaught exceptions
82
- uncaughtException: true
83
- }
84
- }));
85
- ```
86
-
87
- ### Middleware Options
88
-
89
- ```typescript
90
- app.plugin(sentry({
91
- dsn: '...',
92
-
93
- middleware: {
94
- // Include request body in error reports
95
- includeRequestBody: true,
96
-
97
- // Include request headers
98
- includeHeaders: true,
99
-
100
- // Headers to exclude (sensitive data)
101
- excludeHeaders: ['authorization', 'cookie', 'x-api-key'],
102
-
103
- // Paths to ignore (no tracking)
104
- ignorePaths: ['/health', '/metrics', '/__nexus'],
105
-
106
- // Extract user from context
107
- extractUser: (ctx) => {
108
- const token = ctx.headers['authorization'];
109
- if (token) {
110
- const user = decodeToken(token);
111
- return { id: user.id, email: user.email };
112
- }
113
- return null;
114
- },
115
-
116
- // Custom transaction naming
117
- getTransactionName: (ctx) => `${ctx.method} ${ctx.path}`
118
- }
119
- }));
120
- ```
121
-
122
- ### Advanced Options
123
-
124
- ```typescript
125
- app.plugin(sentry({
126
- dsn: '...',
127
-
128
- // Global tags for all events
129
- tags: {
130
- service: 'api-gateway',
131
- version: '1.0.0',
132
- region: 'us-east-1'
133
- },
134
-
135
- // Extra context for all events
136
- extra: {
137
- nodeVersion: process.version
138
- },
139
-
140
- // Error patterns to ignore
141
- ignoreErrors: [
142
- 'NotFoundError',
143
- /^ValidationError/,
144
- 'ECONNRESET'
145
- ],
146
-
147
- // Paths to ignore
148
- ignorePaths: ['/health', '/ping'],
149
-
150
- // Request timeout
151
- timeout: 5000,
152
-
153
- // Max breadcrumbs to store
154
- maxBreadcrumbs: 100,
155
-
156
- // Before send hook - modify or drop events
157
- beforeSend: (event, hint) => {
158
- // Filter out specific errors
159
- if (event.exception?.values?.[0]?.type === 'IgnoredError') {
160
- return null; // Drop event
161
- }
162
-
163
- // Modify event
164
- event.tags = { ...event.tags, processed: 'true' };
165
- return event;
166
- },
167
-
168
- // Before send transaction hook
169
- beforeSendTransaction: (transaction) => {
170
- // Filter out health check transactions
171
- if (transaction.name.includes('/health')) {
172
- return null;
173
- }
174
- return transaction;
175
- }
176
- }));
177
- ```
178
-
179
- ## Full Example
180
-
181
- ```typescript
182
- app.plugin(sentry({
183
- dsn: process.env.SENTRY_DSN,
184
- environment: process.env.NODE_ENV || 'development',
185
- release: '1.0.0',
186
- debug: process.env.NODE_ENV === 'development',
187
-
188
- sampleRate: 0.9,
189
- tracesSampleRate: 0.5,
190
-
191
- integrations: {
192
- unhandledRejection: true,
193
- uncaughtException: true,
194
- http: true,
195
- console: false
196
- },
197
-
198
- tags: {
199
- service: 'nexus-api',
200
- version: '1.0.0'
201
- },
202
-
203
- middleware: {
204
- includeRequestBody: true,
205
- includeHeaders: true,
206
- excludeHeaders: ['authorization', 'cookie', 'x-api-key'],
207
- ignorePaths: ['/health', '/metrics'],
208
- extractUser: (ctx) => {
209
- const userId = ctx.headers['x-user-id'] as string;
210
- return userId ? { id: userId } : null;
211
- }
212
- }
213
- }));
214
- ```
215
-
216
- ## Helper Functions
217
-
218
- ### Capture Exception
219
-
220
- Manually capture an error:
221
-
222
- ```typescript
223
- import { captureException } from './src/advanced/sentry';
224
-
225
- app.post('/api/users', {
226
- handler: async (ctx) => {
227
- try {
228
- await createUser(ctx.body);
229
- } catch (error) {
230
- captureException(error, {
231
- level: 'error',
232
- tags: { action: 'create_user' },
233
- extra: { userId: ctx.body.email }
234
- });
235
- throw error;
236
- }
237
- }
238
- });
239
- ```
240
-
241
- ### Capture Message
242
-
243
- Send a message to Sentry:
244
-
245
- ```typescript
246
- import { captureMessage } from './src/advanced/sentry';
247
-
248
- // Warning message
249
- captureMessage('User attempted invalid action', {
250
- level: 'warning',
251
- tags: { userId: '123' }
252
- });
253
-
254
- // Info message
255
- captureMessage('Feature flag enabled', {
256
- level: 'info',
257
- extra: { flag: 'new_dashboard' }
258
- });
259
- ```
260
-
261
- ### Add Breadcrumb
262
-
263
- Add navigation/action trail:
264
-
265
- ```typescript
266
- import { addBreadcrumb } from './src/advanced/sentry';
267
-
268
- app.post('/api/checkout', {
269
- handler: async (ctx) => {
270
- addBreadcrumb({
271
- type: 'http',
272
- category: 'checkout',
273
- message: 'User initiated checkout',
274
- data: { cartId: ctx.body.cartId },
275
- level: 'info'
276
- });
277
-
278
- // Process checkout...
279
- }
280
- });
281
- ```
282
-
283
- ### Set User Context
284
-
285
- Associate errors with a user:
286
-
287
- ```typescript
288
- import { setUser } from './src/advanced/sentry';
289
-
290
- // After login
291
- setUser({
292
- id: user.id,
293
- email: user.email,
294
- username: user.name,
295
- ip_address: ctx.headers['x-forwarded-for']
296
- });
297
-
298
- // On logout
299
- setUser(null);
300
- ```
301
-
302
- ### Set Tags
303
-
304
- Add global tags:
305
-
306
- ```typescript
307
- import { setTag } from './src/advanced/sentry';
308
-
309
- // Single tag
310
- setTag('feature', 'checkout_v2');
311
-
312
- // Multiple tags
313
- setTags({
314
- region: 'us-east-1',
315
- tier: 'premium'
316
- });
317
- ```
318
-
319
- ### Set Extra Context
320
-
321
- Add extra debugging info:
322
-
323
- ```typescript
324
- import { setExtra } from './src/advanced/sentry';
325
-
326
- setExtra('lastAction', 'checkout');
327
- setExtra('cartItems', cartItems.length);
328
- ```
329
-
330
- ## Performance Monitoring
331
-
332
- ### Using withSpan
333
-
334
- Track performance of specific operations:
335
-
336
- ```typescript
337
- import { withSpan } from './src/advanced/sentry';
338
-
339
- app.get('/api/users/:id', {
340
- handler: async (ctx) => {
341
- // Track database query
342
- const user = await withSpan(ctx,
343
- { op: 'db.query', description: 'Fetch user by ID' },
344
- async () => {
345
- return await db.users.findById(ctx.params.id);
346
- }
347
- );
348
-
349
- // Track external API call
350
- const profile = await withSpan(ctx,
351
- { op: 'http.client', description: 'Fetch user profile from CRM' },
352
- async () => {
353
- return await fetch(`https://crm.api/users/${user.id}`);
354
- }
355
- );
356
-
357
- return { user, profile };
358
- }
359
- });
360
- ```
361
-
362
- ### Manual Transaction Control
363
-
364
- ```typescript
365
- import { getSentry } from './src/advanced/sentry';
366
-
367
- const client = getSentry();
368
-
369
- // Start a transaction
370
- const transaction = client.startTransaction({
371
- name: 'process-batch-job',
372
- op: 'job',
373
- tags: { jobType: 'email' }
374
- });
375
-
376
- // Create child spans
377
- const span1 = client.startSpan(transaction, {
378
- op: 'db.query',
379
- description: 'Fetch pending emails'
380
- });
381
- // ... do work
382
- client.finishSpan(span1);
383
-
384
- const span2 = client.startSpan(transaction, {
385
- op: 'email.send',
386
- description: 'Send batch emails'
387
- });
388
- // ... do work
389
- client.finishSpan(span2);
390
-
391
- // Finish transaction
392
- client.finishTransaction(transaction, 'ok');
393
- ```
394
-
395
- ## Graceful Shutdown
396
-
397
- Flush pending events before shutdown:
398
-
399
- ```typescript
400
- import { getSentry } from './src/advanced/sentry';
401
-
402
- process.on('SIGTERM', async () => {
403
- const client = getSentry();
404
- if (client) {
405
- await client.flush(5000); // Wait max 5 seconds
406
- }
407
- process.exit(0);
408
- });
409
- ```
410
-
411
- > **Note:** When using `app.gracefulShutdown()`, Sentry events are automatically flushed.
412
-
413
- ## Best Practices
414
-
415
- ### 1. Environment-Based Configuration
416
-
417
- ```typescript
418
- const isDev = process.env.NODE_ENV === 'development';
419
-
420
- app.plugin(sentry({
421
- dsn: process.env.SENTRY_DSN,
422
- environment: process.env.NODE_ENV,
423
- debug: isDev,
424
- sampleRate: isDev ? 1.0 : 0.9,
425
- tracesSampleRate: isDev ? 1.0 : 0.1
426
- }));
427
- ```
428
-
429
- ### 2. Sensitive Data Filtering
430
-
431
- ```typescript
432
- app.plugin(sentry({
433
- dsn: '...',
434
-
435
- middleware: {
436
- excludeHeaders: ['authorization', 'cookie', 'x-api-key', 'x-auth-token'],
437
- includeRequestBody: false // Disable in production if contains sensitive data
438
- },
439
-
440
- beforeSend: (event) => {
441
- // Remove sensitive data from extras
442
- if (event.extra?.password) {
443
- delete event.extra.password;
444
- }
445
- return event;
446
- }
447
- }));
448
- ```
449
-
450
- ### 3. Ignore Noise
451
-
452
- ```typescript
453
- app.plugin(sentry({
454
- dsn: '...',
455
-
456
- ignoreErrors: [
457
- 'NotFoundError',
458
- 'ValidationError',
459
- 'AbortError',
460
- /^Network request failed/
461
- ],
462
-
463
- middleware: {
464
- ignorePaths: ['/health', '/metrics', '/favicon.ico']
465
- }
466
- }));
467
- ```
468
-
469
- ### 4. Meaningful Context
470
-
471
- ```typescript
472
- app.post('/api/orders', {
473
- handler: async (ctx) => {
474
- // Add context before potential errors
475
- addBreadcrumb({
476
- category: 'order',
477
- message: 'Processing order',
478
- data: {
479
- orderId: ctx.body.orderId,
480
- items: ctx.body.items.length
481
- }
482
- });
483
-
484
- setTag('order_type', ctx.body.type);
485
-
486
- // Process order...
487
- }
488
- });
489
- ```
490
-
491
- ## API Reference
492
-
493
- ### sentry(options)
494
-
495
- Creates a Sentry plugin.
496
-
497
- | Option | Type | Default | Description |
498
- |--------|------|---------|-------------|
499
- | `dsn` | `string` | required | Sentry DSN |
500
- | `environment` | `string` | `process.env.NODE_ENV` | Environment name |
501
- | `release` | `string` | `package.version` | Release version |
502
- | `serverName` | `string` | hostname | Server identifier |
503
- | `sampleRate` | `number` | `1.0` | Error sample rate (0-1) |
504
- | `tracesSampleRate` | `number` | `0.1` | Transaction sample rate (0-1) |
505
- | `enableTracing` | `boolean` | `true` | Enable performance monitoring |
506
- | `maxBreadcrumbs` | `number` | `100` | Max breadcrumbs to store |
507
- | `debug` | `boolean` | `false` | Enable debug logging |
508
- | `timeout` | `number` | `5000` | Request timeout (ms) |
509
- | `tags` | `Record<string, string>` | `{}` | Global tags |
510
- | `extra` | `Record<string, any>` | `{}` | Global extra context |
511
- | `ignoreErrors` | `(string \| RegExp)[]` | `[]` | Errors to ignore |
512
- | `ignorePaths` | `string[]` | `[]` | Paths to ignore |
513
- | `integrations` | `object` | see below | Integration settings |
514
- | `middleware` | `object` | see below | Middleware settings |
515
- | `beforeSend` | `function` | - | Event filter hook |
516
- | `beforeSendTransaction` | `function` | - | Transaction filter hook |
517
-
518
- ### Helper Functions
519
-
520
- | Function | Description |
521
- |----------|-------------|
522
- | `captureException(error, options?)` | Capture an exception |
523
- | `captureMessage(message, options?)` | Capture a message |
524
- | `addBreadcrumb(breadcrumb)` | Add a breadcrumb |
525
- | `setUser(user)` | Set user context |
526
- | `setTag(key, value)` | Set a tag |
527
- | `setTags(tags)` | Set multiple tags |
528
- | `setExtra(key, value)` | Set extra context |
529
- | `getSentry()` | Get the Sentry client instance |
530
- | `withSpan(ctx, options, fn)` | Execute function with span tracking |
531
-
532
- ## Troubleshooting
533
-
534
- ### Events Not Appearing
535
-
536
- 1. Check DSN is correct
537
- 2. Enable `debug: true` to see logs
538
- 3. Check `sampleRate` is not 0
539
- 4. Verify network connectivity to Sentry
540
-
541
- ### Performance Impact
542
-
543
- 1. Reduce `tracesSampleRate` in production
544
- 2. Use `ignorePaths` for high-traffic endpoints
545
- 3. Disable `includeRequestBody` if not needed
546
-
547
- ### Missing Context
548
-
549
- 1. Ensure `extractUser` returns user data
550
- 2. Add breadcrumbs before potential errors
551
- 3. Use `setTag` and `setExtra` for debugging info