glasswork 0.9.2 → 0.10.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.
Files changed (105) hide show
  1. package/dist/core/bootstrap.d.ts +2 -1
  2. package/dist/core/bootstrap.d.ts.map +1 -1
  3. package/dist/core/bootstrap.js +121 -44
  4. package/dist/core/bootstrap.js.map +1 -1
  5. package/dist/core/types.d.ts +53 -3
  6. package/dist/core/types.d.ts.map +1 -1
  7. package/dist/http/error-handler.d.ts +28 -3
  8. package/dist/http/error-handler.d.ts.map +1 -1
  9. package/dist/http/error-handler.js +97 -22
  10. package/dist/http/error-handler.js.map +1 -1
  11. package/dist/http/errors.d.ts +52 -22
  12. package/dist/http/errors.d.ts.map +1 -1
  13. package/dist/http/errors.js +62 -42
  14. package/dist/http/errors.js.map +1 -1
  15. package/dist/http/route-helpers.d.ts +13 -0
  16. package/dist/http/route-helpers.d.ts.map +1 -1
  17. package/dist/http/route-helpers.js +15 -3
  18. package/dist/http/route-helpers.js.map +1 -1
  19. package/dist/index.d.ts +5 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/list-query/builder.d.ts +5 -0
  24. package/dist/list-query/builder.d.ts.map +1 -1
  25. package/dist/list-query/builder.js +34 -1
  26. package/dist/list-query/builder.js.map +1 -1
  27. package/dist/middleware/rate-limit.d.ts.map +1 -1
  28. package/dist/middleware/rate-limit.js +28 -18
  29. package/dist/middleware/rate-limit.js.map +1 -1
  30. package/dist/observability/exception-tracking.d.ts +214 -0
  31. package/dist/observability/exception-tracking.d.ts.map +1 -0
  32. package/dist/observability/exception-tracking.js +238 -0
  33. package/dist/observability/exception-tracking.js.map +1 -0
  34. package/dist/observability/pino-logger.d.ts +108 -0
  35. package/dist/observability/pino-logger.d.ts.map +1 -0
  36. package/dist/observability/pino-logger.js +158 -0
  37. package/dist/observability/pino-logger.js.map +1 -0
  38. package/dist/observability/request-context.d.ts +105 -0
  39. package/dist/observability/request-context.d.ts.map +1 -0
  40. package/dist/observability/request-context.js +115 -0
  41. package/dist/observability/request-context.js.map +1 -0
  42. package/dist/openapi/openapi.d.ts.map +1 -1
  43. package/dist/openapi/openapi.js +3 -1
  44. package/dist/openapi/openapi.js.map +1 -1
  45. package/dist/utils/environment.d.ts +2 -1
  46. package/dist/utils/environment.d.ts.map +1 -1
  47. package/dist/utils/environment.js +11 -2
  48. package/dist/utils/environment.js.map +1 -1
  49. package/dist/utils/logger.d.ts +43 -9
  50. package/dist/utils/logger.d.ts.map +1 -1
  51. package/dist/utils/logger.js +60 -16
  52. package/dist/utils/logger.js.map +1 -1
  53. package/package.json +6 -1
  54. package/dist/authorization/ability-middleware.d.ts +0 -61
  55. package/dist/authorization/ability-middleware.d.ts.map +0 -1
  56. package/dist/authorization/ability-middleware.js +0 -74
  57. package/dist/authorization/ability-middleware.js.map +0 -1
  58. package/dist/authorization/index.d.ts +0 -46
  59. package/dist/authorization/index.d.ts.map +0 -1
  60. package/dist/authorization/index.js +0 -46
  61. package/dist/authorization/index.js.map +0 -1
  62. package/dist/authorization/route-helpers.d.ts +0 -106
  63. package/dist/authorization/route-helpers.d.ts.map +0 -1
  64. package/dist/authorization/route-helpers.js +0 -136
  65. package/dist/authorization/route-helpers.js.map +0 -1
  66. package/dist/authorization/service-proxy.d.ts +0 -59
  67. package/dist/authorization/service-proxy.d.ts.map +0 -1
  68. package/dist/authorization/service-proxy.js +0 -110
  69. package/dist/authorization/service-proxy.js.map +0 -1
  70. package/dist/authorization/types.d.ts +0 -58
  71. package/dist/authorization/types.d.ts.map +0 -1
  72. package/dist/authorization/types.js +0 -7
  73. package/dist/authorization/types.js.map +0 -1
  74. package/dist/hooks/authorization-hook.d.ts +0 -100
  75. package/dist/hooks/authorization-hook.d.ts.map +0 -1
  76. package/dist/hooks/authorization-hook.js +0 -93
  77. package/dist/hooks/authorization-hook.js.map +0 -1
  78. package/dist/hooks/index.d.ts +0 -54
  79. package/dist/hooks/index.d.ts.map +0 -1
  80. package/dist/hooks/index.js +0 -55
  81. package/dist/hooks/index.js.map +0 -1
  82. package/dist/hooks/service-hooks.d.ts +0 -82
  83. package/dist/hooks/service-hooks.d.ts.map +0 -1
  84. package/dist/hooks/service-hooks.js +0 -158
  85. package/dist/hooks/service-hooks.js.map +0 -1
  86. package/dist/hooks/types.d.ts +0 -151
  87. package/dist/hooks/types.d.ts.map +0 -1
  88. package/dist/hooks/types.js +0 -2
  89. package/dist/hooks/types.js.map +0 -1
  90. package/dist/openapi/hooks.d.ts +0 -14
  91. package/dist/openapi/hooks.d.ts.map +0 -1
  92. package/dist/openapi/hooks.js +0 -83
  93. package/dist/openapi/hooks.js.map +0 -1
  94. package/dist/openapi/openapi-transformer.d.ts +0 -13
  95. package/dist/openapi/openapi-transformer.d.ts.map +0 -1
  96. package/dist/openapi/openapi-transformer.js +0 -87
  97. package/dist/openapi/openapi-transformer.js.map +0 -1
  98. package/dist/utils/pagination.d.ts +0 -48
  99. package/dist/utils/pagination.d.ts.map +0 -1
  100. package/dist/utils/pagination.js +0 -42
  101. package/dist/utils/pagination.js.map +0 -1
  102. package/dist/utils/serialize-dates.d.ts +0 -27
  103. package/dist/utils/serialize-dates.d.ts.map +0 -1
  104. package/dist/utils/serialize-dates.js +0 -39
  105. package/dist/utils/serialize-dates.js.map +0 -1
@@ -1,7 +1,6 @@
1
1
  import { HTTPException } from 'hono/http-exception';
2
- import { createLogger } from '../utils/logger.js';
2
+ import { createLogger, getDefaultLogLevel } from '../utils/logger.js';
3
3
  import { DomainException, getStatusCodeFromErrorCode } from './errors.js';
4
- const logger = createLogger('Glasswork:ErrorHandler', true);
5
4
  /**
6
5
  * Default response handler - returns JSON error
7
6
  */
@@ -10,6 +9,83 @@ function defaultResponseHandler(error, context) {
10
9
  error: error.message,
11
10
  }, error.statusCode);
12
11
  }
12
+ /**
13
+ * Track exception if configured and criteria are met.
14
+ * Centralizes exception tracking logic to avoid duplication.
15
+ */
16
+ function trackException(error, statusCode, context, tracker, trackingConfig, options = {}) {
17
+ if (!tracker)
18
+ return;
19
+ const { explicitTrack, errorCode, unexpected } = options;
20
+ // Determine if we should track:
21
+ // - Explicit flag takes precedence
22
+ // - Otherwise use status code rules or track unexpected errors
23
+ let shouldTrack;
24
+ if (explicitTrack !== undefined) {
25
+ shouldTrack = explicitTrack;
26
+ }
27
+ else {
28
+ shouldTrack = trackingConfig.trackStatusCodes(statusCode) || !!unexpected;
29
+ }
30
+ if (!shouldTrack)
31
+ return;
32
+ tracker.captureException(error, {
33
+ requestId: context.get('requestId'),
34
+ path: context.req.path,
35
+ method: context.req.method,
36
+ statusCode,
37
+ ...(errorCode && { errorCode }),
38
+ ...(unexpected && { unexpected: true }),
39
+ });
40
+ }
41
+ /**
42
+ * Handle DomainException errors.
43
+ */
44
+ function handleDomainException(err, context, logLevel, exceptionTracker, trackingConfig, logger) {
45
+ const statusCode = getStatusCodeFromErrorCode(err.code);
46
+ const error = {
47
+ message: err.message,
48
+ statusCode: statusCode,
49
+ };
50
+ // Log 5xx errors with stack trace (if log level allows)
51
+ if (logLevel !== 'silent' && statusCode >= 500) {
52
+ logger.error(`${err.code}: ${err.message}${err.stack ? `\n${err.stack}` : ''}`);
53
+ }
54
+ trackException(err, statusCode, context, exceptionTracker, trackingConfig, {
55
+ explicitTrack: err.track,
56
+ errorCode: err.code,
57
+ });
58
+ return error;
59
+ }
60
+ /**
61
+ * Handle HTTPException errors.
62
+ */
63
+ function handleHTTPException(err, context, logLevel, exceptionTracker, trackingConfig, logger) {
64
+ const error = {
65
+ message: err.message,
66
+ statusCode: err.status,
67
+ };
68
+ // Log 5xx HTTP errors (if log level allows)
69
+ if (logLevel !== 'silent' && err.status >= 500) {
70
+ logger.error(`HTTPException ${err.status}: ${err.message}`);
71
+ }
72
+ trackException(err, err.status, context, exceptionTracker, trackingConfig);
73
+ return error;
74
+ }
75
+ /**
76
+ * Handle unexpected errors.
77
+ */
78
+ function handleUnexpectedError(err, context, logLevel, exceptionTracker, trackingConfig, logger) {
79
+ // Unexpected errors - log if level allows
80
+ if (logLevel !== 'silent') {
81
+ logger.error('Unhandled error:', err);
82
+ }
83
+ const normalizedError = err instanceof Error ? err : new Error(String(err));
84
+ trackException(normalizedError, 500, context, exceptionTracker, trackingConfig, {
85
+ unexpected: true,
86
+ });
87
+ return { message: 'Internal server error', statusCode: 500 };
88
+ }
13
89
  /**
14
90
  * Create an error handler middleware for Hono
15
91
  *
@@ -18,32 +94,31 @@ function defaultResponseHandler(error, context) {
18
94
  * - HTTPException (Hono's built-in HTTP exceptions)
19
95
  * - Validation errors (returns 422)
20
96
  * - Generic errors (returns 500)
97
+ * - Exception tracking (optional, via exceptionTracker option)
21
98
  */
22
99
  export function createErrorHandler(options = {}) {
23
- const { logErrors = process.env.NODE_ENV !== 'test', responseHandler = defaultResponseHandler } = options;
100
+ const { logLevel = getDefaultLogLevel(), responseHandler = defaultResponseHandler, exceptionTracker, trackingConfig = { trackStatusCodes: (status) => status >= 500 }, } = options;
101
+ // Create logger with the specified log level so it actually logs when level allows
102
+ const logger = createLogger('Glasswork:ErrorHandler', logLevel);
24
103
  return (err, context) => {
25
104
  let error;
26
- if (err instanceof DomainException) {
27
- const statusCode = getStatusCodeFromErrorCode(err.code);
28
- error = { message: err.message, statusCode: statusCode };
29
- if (logErrors && statusCode === 500) {
30
- logger.error('DomainException with unknown code:', err);
105
+ try {
106
+ if (err instanceof DomainException) {
107
+ error = handleDomainException(err, context, logLevel, exceptionTracker, trackingConfig, logger);
31
108
  }
32
- }
33
- else if (err instanceof HTTPException) {
34
- error = {
35
- message: err.message,
36
- statusCode: err.status,
37
- };
38
- }
39
- else {
40
- if (logErrors) {
41
- logger.error('Unhandled error:', err);
109
+ else if (err instanceof HTTPException) {
110
+ error = handleHTTPException(err, context, logLevel, exceptionTracker, trackingConfig, logger);
42
111
  }
43
- error = {
44
- message: 'Internal server error',
45
- statusCode: 500,
46
- };
112
+ else {
113
+ error = handleUnexpectedError(err, context, logLevel, exceptionTracker, trackingConfig, logger);
114
+ }
115
+ }
116
+ catch (handlerErr) {
117
+ // Error handler itself threw - log and return generic error
118
+ // Use error level logger for this critical error
119
+ const errorLogger = createLogger('Glasswork:ErrorHandler', 'error');
120
+ errorLogger.error('Error in error handler:', handlerErr);
121
+ error = { message: 'Internal server error', statusCode: 500 };
47
122
  }
48
123
  return responseHandler(error, context);
49
124
  };
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,MAAM,GAAG,YAAY,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;AAmB5D;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAqB,EAAE,OAAgB;IACrE,OAAO,OAAO,CAAC,IAAI,CACjB;QACE,KAAK,EAAE,KAAK,CAAC,OAAO;KACrB,EACD,KAAK,CAAC,UAAU,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA+B,EAAE;IAClE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,eAAe,GAAG,sBAAsB,EAAE,GAC7F,OAAO,CAAC;IAEV,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,KAAqB,CAAC;QAE1B,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAkC,EAAE,CAAC;YAEjF,IAAI,SAAS,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACpC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACxC,KAAK,GAAG;gBACN,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,GAAG,CAAC,MAAM;aACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACxC,CAAC;YACD,KAAK,GAAG;gBACN,OAAO,EAAE,uBAAuB;gBAChC,UAAU,EAAE,GAAG;aAChB,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/http/error-handler.ts"],"names":[],"mappings":"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"}
@@ -1,72 +1,102 @@
1
1
  /**
2
- * Base domain exception class for business logic errors
2
+ * Options for configuring exception behavior
3
+ */
4
+ export interface DomainExceptionOptions {
5
+ /**
6
+ * Whether to track this exception in exception tracking services (Sentry, AppSignal, etc.)
7
+ * If undefined, tracking is determined by status code rules (default: 5xx only)
8
+ * Set to true to force tracking, false to never track
9
+ */
10
+ track?: boolean;
11
+ }
12
+ /**
13
+ * Base domain exception class for business logic errors.
14
+ *
15
+ * Supports optional exception tracking configuration via the `track` option.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Normal exception - tracking determined by status code rules
20
+ * throw new NotFoundException('User not found');
21
+ *
22
+ * // Explicitly track this 404
23
+ * throw new NotFoundException('Critical user lookup failed', { track: true });
24
+ *
25
+ * // Never track this 500
26
+ * throw new InternalServerErrorException('Known cache issue', { track: false });
27
+ * ```
3
28
  */
4
29
  export declare class DomainException extends Error {
5
30
  readonly code: string;
6
- constructor(message: string, code: string);
31
+ /**
32
+ * Explicit tracking flag.
33
+ * If set, overrides default tracking rules based on status codes.
34
+ */
35
+ readonly track?: boolean;
36
+ constructor(message: string, code: string, options?: DomainExceptionOptions);
7
37
  }
8
38
  /**
9
39
  * Standard HTTP exception classes
10
40
  */
11
41
  export declare class ValidationException extends DomainException {
12
- constructor(message?: string);
42
+ constructor(message?: string, options?: DomainExceptionOptions);
13
43
  }
14
44
  export declare class UnauthorizedException extends DomainException {
15
- constructor(message?: string);
45
+ constructor(message?: string, options?: DomainExceptionOptions);
16
46
  }
17
47
  export declare class NotFoundException extends DomainException {
18
- constructor(message?: string);
48
+ constructor(message?: string, options?: DomainExceptionOptions);
19
49
  }
20
50
  export declare class ConflictException extends DomainException {
21
- constructor(message?: string);
51
+ constructor(message?: string, options?: DomainExceptionOptions);
22
52
  }
23
53
  export declare class ForbiddenException extends DomainException {
24
- constructor(message?: string);
54
+ constructor(message?: string, options?: DomainExceptionOptions);
25
55
  }
26
56
  export declare class BadRequestException extends DomainException {
27
- constructor(message?: string);
57
+ constructor(message?: string, options?: DomainExceptionOptions);
28
58
  }
29
59
  export declare class TooManyRequestsException extends DomainException {
30
- constructor(message?: string);
60
+ constructor(message?: string, options?: DomainExceptionOptions);
31
61
  }
32
62
  export declare class MethodNotAllowedException extends DomainException {
33
- constructor(message?: string);
63
+ constructor(message?: string, options?: DomainExceptionOptions);
34
64
  }
35
65
  export declare class RequestTimeoutException extends DomainException {
36
- constructor(message?: string);
66
+ constructor(message?: string, options?: DomainExceptionOptions);
37
67
  }
38
68
  export declare class GoneException extends DomainException {
39
- constructor(message?: string);
69
+ constructor(message?: string, options?: DomainExceptionOptions);
40
70
  }
41
71
  export declare class PayloadTooLargeException extends DomainException {
42
- constructor(message?: string);
72
+ constructor(message?: string, options?: DomainExceptionOptions);
43
73
  }
44
74
  export declare class UnsupportedMediaTypeException extends DomainException {
45
- constructor(message?: string);
75
+ constructor(message?: string, options?: DomainExceptionOptions);
46
76
  }
47
77
  export declare class UnprocessableEntityException extends DomainException {
48
- constructor(message?: string);
78
+ constructor(message?: string, options?: DomainExceptionOptions);
49
79
  }
50
80
  export declare class LockedException extends DomainException {
51
- constructor(message?: string);
81
+ constructor(message?: string, options?: DomainExceptionOptions);
52
82
  }
53
83
  export declare class PreconditionFailedException extends DomainException {
54
- constructor(message?: string);
84
+ constructor(message?: string, options?: DomainExceptionOptions);
55
85
  }
56
86
  export declare class InternalServerErrorException extends DomainException {
57
- constructor(message?: string);
87
+ constructor(message?: string, options?: DomainExceptionOptions);
58
88
  }
59
89
  export declare class NotImplementedException extends DomainException {
60
- constructor(message?: string);
90
+ constructor(message?: string, options?: DomainExceptionOptions);
61
91
  }
62
92
  export declare class BadGatewayException extends DomainException {
63
- constructor(message?: string);
93
+ constructor(message?: string, options?: DomainExceptionOptions);
64
94
  }
65
95
  export declare class ServiceUnavailableException extends DomainException {
66
- constructor(message?: string);
96
+ constructor(message?: string, options?: DomainExceptionOptions);
67
97
  }
68
98
  export declare class GatewayTimeoutException extends DomainException {
69
- constructor(message?: string);
99
+ constructor(message?: string, options?: DomainExceptionOptions);
70
100
  }
71
101
  /**
72
102
  * Map error codes to HTTP status codes
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAqB;CAGzC;AAED,qBAAa,qBAAsB,SAAQ,eAAe;gBAC5C,OAAO,SAAiB;CAGrC;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAc;CAGlC;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAa;CAGjC;AAED,qBAAa,kBAAmB,SAAQ,eAAe;gBACzC,OAAO,SAAc;CAGlC;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAgB;CAGpC;AAED,qBAAa,wBAAyB,SAAQ,eAAe;gBAC/C,OAAO,SAAsB;CAG1C;AAED,qBAAa,yBAA0B,SAAQ,eAAe;gBAChD,OAAO,SAAuB;CAG3C;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB;CAGxC;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,OAAO,SAAS;CAG7B;AAED,qBAAa,wBAAyB,SAAQ,eAAe;gBAC/C,OAAO,SAAsB;CAG1C;AAED,qBAAa,6BAA8B,SAAQ,eAAe;gBACpD,OAAO,SAA2B;CAG/C;AAED,qBAAa,4BAA6B,SAAQ,eAAe;gBACnD,OAAO,SAAyB;CAG7C;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,SAAW;CAG/B;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,OAAO,SAAwB;CAG5C;AAED,qBAAa,4BAA6B,SAAQ,eAAe;gBACnD,OAAO,SAA0B;CAG9C;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB;CAGxC;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAgB;CAGpC;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,OAAO,SAAwB;CAG5C;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB;CAGxC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyB/D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAStB,IAAI,EAAE,MAAM;IAR9B;;;OAGG;IACH,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAG9B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,sBAAsB;CAMnC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAqB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG3E;AAED,qBAAa,qBAAsB,SAAQ,eAAe;gBAC5C,OAAO,SAAiB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGvE;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGpE;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGnE;AAED,qBAAa,kBAAmB,SAAQ,eAAe;gBACzC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGpE;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAgB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGtE;AAED,qBAAa,wBAAyB,SAAQ,eAAe;gBAC/C,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG5E;AAED,qBAAa,yBAA0B,SAAQ,eAAe;gBAChD,OAAO,SAAuB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG7E;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG1E;AAED,qBAAa,aAAc,SAAQ,eAAe;gBACpC,OAAO,SAAS,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG/D;AAED,qBAAa,wBAAyB,SAAQ,eAAe;gBAC/C,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG5E;AAED,qBAAa,6BAA8B,SAAQ,eAAe;gBACpD,OAAO,SAA2B,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGjF;AAED,qBAAa,4BAA6B,SAAQ,eAAe;gBACnD,OAAO,SAAyB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG/E;AAED,qBAAa,eAAgB,SAAQ,eAAe;gBACtC,OAAO,SAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGjE;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,OAAO,SAAwB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG9E;AAED,qBAAa,4BAA6B,SAAQ,eAAe;gBACnD,OAAO,SAA0B,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGhF;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG1E;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAgB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAGtE;AAED,qBAAa,2BAA4B,SAAQ,eAAe;gBAClD,OAAO,SAAwB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG9E;AAED,qBAAa,uBAAwB,SAAQ,eAAe;gBAC9C,OAAO,SAAoB,EAAE,OAAO,CAAC,EAAE,sBAAsB;CAG1E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAyB/D"}
@@ -1,115 +1,135 @@
1
1
  /**
2
- * Base domain exception class for business logic errors
2
+ * Base domain exception class for business logic errors.
3
+ *
4
+ * Supports optional exception tracking configuration via the `track` option.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * // Normal exception - tracking determined by status code rules
9
+ * throw new NotFoundException('User not found');
10
+ *
11
+ * // Explicitly track this 404
12
+ * throw new NotFoundException('Critical user lookup failed', { track: true });
13
+ *
14
+ * // Never track this 500
15
+ * throw new InternalServerErrorException('Known cache issue', { track: false });
16
+ * ```
3
17
  */
4
18
  export class DomainException extends Error {
5
19
  code;
6
- constructor(message, code) {
20
+ /**
21
+ * Explicit tracking flag.
22
+ * If set, overrides default tracking rules based on status codes.
23
+ */
24
+ track;
25
+ constructor(message, code, options) {
7
26
  super(message);
8
27
  this.code = code;
9
28
  this.name = this.constructor.name;
29
+ this.track = options?.track;
10
30
  }
11
31
  }
12
32
  /**
13
33
  * Standard HTTP exception classes
14
34
  */
15
35
  export class ValidationException extends DomainException {
16
- constructor(message = 'Validation error') {
17
- super(message, 'VALIDATION_ERROR');
36
+ constructor(message = 'Validation error', options) {
37
+ super(message, 'VALIDATION_ERROR', options);
18
38
  }
19
39
  }
20
40
  export class UnauthorizedException extends DomainException {
21
- constructor(message = 'Unauthorized') {
22
- super(message, 'UNAUTHORIZED');
41
+ constructor(message = 'Unauthorized', options) {
42
+ super(message, 'UNAUTHORIZED', options);
23
43
  }
24
44
  }
25
45
  export class NotFoundException extends DomainException {
26
- constructor(message = 'Not found') {
27
- super(message, 'NOT_FOUND');
46
+ constructor(message = 'Not found', options) {
47
+ super(message, 'NOT_FOUND', options);
28
48
  }
29
49
  }
30
50
  export class ConflictException extends DomainException {
31
- constructor(message = 'Conflict') {
32
- super(message, 'CONFLICT');
51
+ constructor(message = 'Conflict', options) {
52
+ super(message, 'CONFLICT', options);
33
53
  }
34
54
  }
35
55
  export class ForbiddenException extends DomainException {
36
- constructor(message = 'Forbidden') {
37
- super(message, 'FORBIDDEN');
56
+ constructor(message = 'Forbidden', options) {
57
+ super(message, 'FORBIDDEN', options);
38
58
  }
39
59
  }
40
60
  export class BadRequestException extends DomainException {
41
- constructor(message = 'Bad request') {
42
- super(message, 'BAD_REQUEST');
61
+ constructor(message = 'Bad request', options) {
62
+ super(message, 'BAD_REQUEST', options);
43
63
  }
44
64
  }
45
65
  export class TooManyRequestsException extends DomainException {
46
- constructor(message = 'Too many requests') {
47
- super(message, 'TOO_MANY_REQUESTS');
66
+ constructor(message = 'Too many requests', options) {
67
+ super(message, 'TOO_MANY_REQUESTS', options);
48
68
  }
49
69
  }
50
70
  export class MethodNotAllowedException extends DomainException {
51
- constructor(message = 'Method not allowed') {
52
- super(message, 'METHOD_NOT_ALLOWED');
71
+ constructor(message = 'Method not allowed', options) {
72
+ super(message, 'METHOD_NOT_ALLOWED', options);
53
73
  }
54
74
  }
55
75
  export class RequestTimeoutException extends DomainException {
56
- constructor(message = 'Request timeout') {
57
- super(message, 'REQUEST_TIMEOUT');
76
+ constructor(message = 'Request timeout', options) {
77
+ super(message, 'REQUEST_TIMEOUT', options);
58
78
  }
59
79
  }
60
80
  export class GoneException extends DomainException {
61
- constructor(message = 'Gone') {
62
- super(message, 'GONE');
81
+ constructor(message = 'Gone', options) {
82
+ super(message, 'GONE', options);
63
83
  }
64
84
  }
65
85
  export class PayloadTooLargeException extends DomainException {
66
- constructor(message = 'Payload too large') {
67
- super(message, 'PAYLOAD_TOO_LARGE');
86
+ constructor(message = 'Payload too large', options) {
87
+ super(message, 'PAYLOAD_TOO_LARGE', options);
68
88
  }
69
89
  }
70
90
  export class UnsupportedMediaTypeException extends DomainException {
71
- constructor(message = 'Unsupported media type') {
72
- super(message, 'UNSUPPORTED_MEDIA_TYPE');
91
+ constructor(message = 'Unsupported media type', options) {
92
+ super(message, 'UNSUPPORTED_MEDIA_TYPE', options);
73
93
  }
74
94
  }
75
95
  export class UnprocessableEntityException extends DomainException {
76
- constructor(message = 'Unprocessable entity') {
77
- super(message, 'UNPROCESSABLE_ENTITY');
96
+ constructor(message = 'Unprocessable entity', options) {
97
+ super(message, 'UNPROCESSABLE_ENTITY', options);
78
98
  }
79
99
  }
80
100
  export class LockedException extends DomainException {
81
- constructor(message = 'Locked') {
82
- super(message, 'LOCKED');
101
+ constructor(message = 'Locked', options) {
102
+ super(message, 'LOCKED', options);
83
103
  }
84
104
  }
85
105
  export class PreconditionFailedException extends DomainException {
86
- constructor(message = 'Precondition failed') {
87
- super(message, 'PRECONDITION_FAILED');
106
+ constructor(message = 'Precondition failed', options) {
107
+ super(message, 'PRECONDITION_FAILED', options);
88
108
  }
89
109
  }
90
110
  export class InternalServerErrorException extends DomainException {
91
- constructor(message = 'Internal server error') {
92
- super(message, 'INTERNAL_SERVER_ERROR');
111
+ constructor(message = 'Internal server error', options) {
112
+ super(message, 'INTERNAL_SERVER_ERROR', options);
93
113
  }
94
114
  }
95
115
  export class NotImplementedException extends DomainException {
96
- constructor(message = 'Not implemented') {
97
- super(message, 'NOT_IMPLEMENTED');
116
+ constructor(message = 'Not implemented', options) {
117
+ super(message, 'NOT_IMPLEMENTED', options);
98
118
  }
99
119
  }
100
120
  export class BadGatewayException extends DomainException {
101
- constructor(message = 'Bad gateway') {
102
- super(message, 'BAD_GATEWAY');
121
+ constructor(message = 'Bad gateway', options) {
122
+ super(message, 'BAD_GATEWAY', options);
103
123
  }
104
124
  }
105
125
  export class ServiceUnavailableException extends DomainException {
106
- constructor(message = 'Service unavailable') {
107
- super(message, 'SERVICE_UNAVAILABLE');
126
+ constructor(message = 'Service unavailable', options) {
127
+ super(message, 'SERVICE_UNAVAILABLE', options);
108
128
  }
109
129
  }
110
130
  export class GatewayTimeoutException extends DomainException {
111
- constructor(message = 'Gateway timeout') {
112
- super(message, 'GATEWAY_TIMEOUT');
131
+ constructor(message = 'Gateway timeout', options) {
132
+ super(message, 'GATEWAY_TIMEOUT', options);
113
133
  }
114
134
  }
115
135
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,8 @@ import type { Context, Hono, MiddlewareHandler } from 'hono';
2
2
  import { type DescribeRouteOptions } from 'hono-openapi';
3
3
  import type { BaseIssue, BaseSchema, BaseSchemaAsync, InferOutput } from 'valibot';
4
4
  import type { OpenAPIResponseProcessor, RouteConfigExtensions } from '../core/types.js';
5
+ import { type PinoLogger } from '../observability/pino-logger.js';
6
+ import { type Logger } from '../utils/logger.js';
5
7
  import { type AcceptPrismaTypes, type SerializationConfig } from '../utils/serialize-prisma-types.js';
6
8
  /**
7
9
  * OpenAPI context stored in Hono app context.
@@ -10,6 +12,11 @@ import { type AcceptPrismaTypes, type SerializationConfig } from '../utils/seria
10
12
  export interface OpenAPIContext {
11
13
  processors: OpenAPIResponseProcessor[];
12
14
  securitySchemes: string[];
15
+ /**
16
+ * Pino logger instance for creating context-aware loggers in route handlers.
17
+ * When set, enables `logger` property in RouteContext.
18
+ */
19
+ pino?: PinoLogger;
13
20
  }
14
21
  /**
15
22
  * Set the OpenAPI context for a Hono app instance.
@@ -304,6 +311,12 @@ export interface RouteContext<TBody = never, TSessionRequired extends boolean =
304
311
  * User agent string from request headers
305
312
  */
306
313
  userAgent: string | undefined;
314
+ /**
315
+ * Context-aware logger with automatic requestId correlation.
316
+ * Uses the route's first tag as the service name.
317
+ * Requires pino logger configured in bootstrap options.
318
+ */
319
+ logger: Logger;
307
320
  /**
308
321
  * Original Hono context (for advanced use cases)
309
322
  */
@@ -1 +1 @@
1
- {"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-helpers.d.ts","sourceRoot":"","sources":["../../src/http/route-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describeRoute as honoDescribeRoute, resolver, validator, } from 'hono-openapi';
2
2
  import { safeParseAsync } from 'valibot';
3
+ import { createContextAwarePinoLogger } from '../observability/pino-logger.js';
3
4
  import { applyProcessors } from '../openapi/openapi-processors.js';
4
5
  import { getClientIp } from '../utils/get-client-ip.js';
5
6
  import { createLogger } from '../utils/logger.js';
@@ -28,7 +29,7 @@ export function setOpenAPIContext(app, context) {
28
29
  * @internal
29
30
  */
30
31
  export function getOpenAPIContext(app) {
31
- return openAPIContextMap.get(app) ?? { processors: [], securitySchemes: [] };
32
+ return openAPIContextMap.get(app) ?? { processors: [], securitySchemes: [], pino: undefined };
32
33
  }
33
34
  /**
34
35
  * HTTP status codes with descriptions
@@ -204,7 +205,7 @@ export function route(router, config) {
204
205
  }
205
206
  // Add handler wrapper
206
207
  middlewares.push(async (c) => {
207
- const routeContext = buildRouteContext(c, config);
208
+ const routeContext = buildRouteContext(c, config, openAPIContext);
208
209
  const result = await config.handler(routeContext);
209
210
  return handleResponse(result, config.responses, config.serialization, config.strictTypes, config.summary, c);
210
211
  });
@@ -420,8 +421,18 @@ function buildOpenAPIResponses(config, openAPIContext, hasPagination) {
420
421
  }
421
422
  return responses;
422
423
  }
423
- function buildRouteContext(c, config) {
424
+ /**
425
+ * Build the route context for a handler.
426
+ * Creates a context-aware logger using the route's first tag or operationId as the service name.
427
+ */
428
+ function buildRouteContext(c, config, openAPIContext) {
424
429
  const req = c.req;
430
+ // Create a context-aware logger for this route
431
+ // Use first tag, operationId, or 'Route' as the service name
432
+ const serviceName = config.tags?.[0] || config.operationId || 'Route';
433
+ const routeLogger = openAPIContext.pino
434
+ ? createContextAwarePinoLogger({ pino: openAPIContext.pino, service: serviceName })
435
+ : createLogger(serviceName); // Uses default level (silent in test mode when no pino configured)
425
436
  // Spread all context variables (from ContextVariableMap)
426
437
  // This includes session, ability, role, and any other middleware-added variables
427
438
  // Return with TSessionRequired=false to allow undefined session
@@ -435,6 +446,7 @@ function buildRouteContext(c, config) {
435
446
  session: c.get('session'),
436
447
  ip: getClientIp(c),
437
448
  userAgent: c.req.header('user-agent'),
449
+ logger: routeLogger,
438
450
  context: c,
439
451
  };
440
452
  }