observability-toolkit 1.8.4 → 1.8.5

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 (164) hide show
  1. package/dist/backends/local-jsonl-boolean-search.test.js +8 -8
  2. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  3. package/dist/backends/local-jsonl-cache.test.d.ts +2 -0
  4. package/dist/backends/local-jsonl-cache.test.d.ts.map +1 -0
  5. package/dist/backends/local-jsonl-cache.test.js +295 -0
  6. package/dist/backends/local-jsonl-cache.test.js.map +1 -0
  7. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts +2 -0
  8. package/dist/backends/local-jsonl-circuit-breaker.test.d.ts.map +1 -0
  9. package/dist/backends/local-jsonl-circuit-breaker.test.js +180 -0
  10. package/dist/backends/local-jsonl-circuit-breaker.test.js.map +1 -0
  11. package/dist/backends/local-jsonl-export.test.d.ts +2 -0
  12. package/dist/backends/local-jsonl-export.test.d.ts.map +1 -0
  13. package/dist/backends/local-jsonl-export.test.js +704 -0
  14. package/dist/backends/local-jsonl-export.test.js.map +1 -0
  15. package/dist/backends/local-jsonl-index.test.d.ts +2 -0
  16. package/dist/backends/local-jsonl-index.test.d.ts.map +1 -0
  17. package/dist/backends/local-jsonl-index.test.js +554 -0
  18. package/dist/backends/local-jsonl-index.test.js.map +1 -0
  19. package/dist/backends/local-jsonl-logs.test.js +52 -43
  20. package/dist/backends/local-jsonl-logs.test.js.map +1 -1
  21. package/dist/backends/local-jsonl-metrics.test.d.ts +2 -0
  22. package/dist/backends/local-jsonl-metrics.test.d.ts.map +1 -0
  23. package/dist/backends/local-jsonl-metrics.test.js +876 -0
  24. package/dist/backends/local-jsonl-metrics.test.js.map +1 -0
  25. package/dist/backends/local-jsonl-traces.test.js +89 -83
  26. package/dist/backends/local-jsonl-traces.test.js.map +1 -1
  27. package/dist/backends/local-jsonl.d.ts +9 -0
  28. package/dist/backends/local-jsonl.d.ts.map +1 -1
  29. package/dist/backends/local-jsonl.js +348 -227
  30. package/dist/backends/local-jsonl.js.map +1 -1
  31. package/dist/backends/signoz-api-circuit-breaker.test.d.ts +6 -0
  32. package/dist/backends/signoz-api-circuit-breaker.test.d.ts.map +1 -0
  33. package/dist/backends/signoz-api-circuit-breaker.test.js +548 -0
  34. package/dist/backends/signoz-api-circuit-breaker.test.js.map +1 -0
  35. package/dist/backends/signoz-api-rate-limiter.test.d.ts +6 -0
  36. package/dist/backends/signoz-api-rate-limiter.test.d.ts.map +1 -0
  37. package/dist/backends/signoz-api-rate-limiter.test.js +389 -0
  38. package/dist/backends/signoz-api-rate-limiter.test.js.map +1 -0
  39. package/dist/backends/signoz-api-ssrf.test.d.ts +6 -0
  40. package/dist/backends/signoz-api-ssrf.test.d.ts.map +1 -0
  41. package/dist/backends/signoz-api-ssrf.test.js +216 -0
  42. package/dist/backends/signoz-api-ssrf.test.js.map +1 -0
  43. package/dist/backends/signoz-api-test-helpers.d.ts +80 -0
  44. package/dist/backends/signoz-api-test-helpers.d.ts.map +1 -0
  45. package/dist/backends/signoz-api-test-helpers.js +79 -0
  46. package/dist/backends/signoz-api-test-helpers.js.map +1 -0
  47. package/dist/backends/signoz-api.d.ts +16 -0
  48. package/dist/backends/signoz-api.d.ts.map +1 -1
  49. package/dist/backends/signoz-api.js +71 -9
  50. package/dist/backends/signoz-api.js.map +1 -1
  51. package/dist/backends/signoz-api.test.d.ts +9 -0
  52. package/dist/backends/signoz-api.test.d.ts.map +1 -1
  53. package/dist/backends/signoz-api.test.js +14 -1027
  54. package/dist/backends/signoz-api.test.js.map +1 -1
  55. package/dist/lib/cache.d.ts +47 -1
  56. package/dist/lib/cache.d.ts.map +1 -1
  57. package/dist/lib/cache.js +40 -3
  58. package/dist/lib/cache.js.map +1 -1
  59. package/dist/lib/circuit-breaker.d.ts +83 -0
  60. package/dist/lib/circuit-breaker.d.ts.map +1 -0
  61. package/dist/lib/circuit-breaker.js +125 -0
  62. package/dist/lib/circuit-breaker.js.map +1 -0
  63. package/dist/lib/circuit-breaker.test.d.ts +2 -0
  64. package/dist/lib/circuit-breaker.test.d.ts.map +1 -0
  65. package/dist/lib/circuit-breaker.test.js +263 -0
  66. package/dist/lib/circuit-breaker.test.js.map +1 -0
  67. package/dist/lib/constants-symlink.test.d.ts +12 -0
  68. package/dist/lib/constants-symlink.test.d.ts.map +1 -0
  69. package/dist/lib/constants-symlink.test.js +357 -0
  70. package/dist/lib/constants-symlink.test.js.map +1 -0
  71. package/dist/lib/edge-cases.test.js +17 -17
  72. package/dist/lib/edge-cases.test.js.map +1 -1
  73. package/dist/lib/error-sanitizer.d.ts.map +1 -1
  74. package/dist/lib/error-sanitizer.js +29 -3
  75. package/dist/lib/error-sanitizer.js.map +1 -1
  76. package/dist/lib/error-sanitizer.test.js +159 -0
  77. package/dist/lib/error-sanitizer.test.js.map +1 -1
  78. package/dist/lib/error-types.d.ts +54 -0
  79. package/dist/lib/error-types.d.ts.map +1 -0
  80. package/dist/lib/error-types.js +154 -0
  81. package/dist/lib/error-types.js.map +1 -0
  82. package/dist/lib/error-types.test.d.ts +2 -0
  83. package/dist/lib/error-types.test.d.ts.map +1 -0
  84. package/dist/lib/error-types.test.js +196 -0
  85. package/dist/lib/error-types.test.js.map +1 -0
  86. package/dist/lib/indexer.test.js +27 -27
  87. package/dist/lib/indexer.test.js.map +1 -1
  88. package/dist/lib/input-validator.d.ts +12 -0
  89. package/dist/lib/input-validator.d.ts.map +1 -1
  90. package/dist/lib/input-validator.fuzz.test.d.ts +12 -0
  91. package/dist/lib/input-validator.fuzz.test.d.ts.map +1 -0
  92. package/dist/lib/input-validator.fuzz.test.js +290 -0
  93. package/dist/lib/input-validator.fuzz.test.js.map +1 -0
  94. package/dist/lib/input-validator.js +57 -3
  95. package/dist/lib/input-validator.js.map +1 -1
  96. package/dist/lib/input-validator.test.js +129 -1
  97. package/dist/lib/input-validator.test.js.map +1 -1
  98. package/dist/lib/logger.d.ts +46 -0
  99. package/dist/lib/logger.d.ts.map +1 -0
  100. package/dist/lib/logger.js +81 -0
  101. package/dist/lib/logger.js.map +1 -0
  102. package/dist/lib/logger.test.d.ts +2 -0
  103. package/dist/lib/logger.test.d.ts.map +1 -0
  104. package/dist/lib/logger.test.js +122 -0
  105. package/dist/lib/logger.test.js.map +1 -0
  106. package/dist/lib/server-utils.d.ts +8 -0
  107. package/dist/lib/server-utils.d.ts.map +1 -1
  108. package/dist/lib/server-utils.js +34 -2
  109. package/dist/lib/server-utils.js.map +1 -1
  110. package/dist/lib/shared-schemas.d.ts +22 -0
  111. package/dist/lib/shared-schemas.d.ts.map +1 -1
  112. package/dist/lib/shared-schemas.js +22 -0
  113. package/dist/lib/shared-schemas.js.map +1 -1
  114. package/dist/lib/toon-encoder.d.ts +7 -2
  115. package/dist/lib/toon-encoder.d.ts.map +1 -1
  116. package/dist/lib/toon-encoder.js +21 -6
  117. package/dist/lib/toon-encoder.js.map +1 -1
  118. package/dist/lib/toon-encoder.test.d.ts +5 -0
  119. package/dist/lib/toon-encoder.test.d.ts.map +1 -0
  120. package/dist/lib/toon-encoder.test.js +85 -0
  121. package/dist/lib/toon-encoder.test.js.map +1 -0
  122. package/dist/server.js +2 -0
  123. package/dist/server.js.map +1 -1
  124. package/dist/server.test.js +30 -0
  125. package/dist/server.test.js.map +1 -1
  126. package/dist/test-helpers/env-utils.d.ts +22 -0
  127. package/dist/test-helpers/env-utils.d.ts.map +1 -1
  128. package/dist/test-helpers/env-utils.js +38 -0
  129. package/dist/test-helpers/env-utils.js.map +1 -1
  130. package/dist/test-helpers/fuzz-generators.d.ts +58 -0
  131. package/dist/test-helpers/fuzz-generators.d.ts.map +1 -0
  132. package/dist/test-helpers/fuzz-generators.js +216 -0
  133. package/dist/test-helpers/fuzz-generators.js.map +1 -0
  134. package/dist/test-helpers/index.d.ts +1 -0
  135. package/dist/test-helpers/index.d.ts.map +1 -1
  136. package/dist/test-helpers/index.js +2 -0
  137. package/dist/test-helpers/index.js.map +1 -1
  138. package/dist/test-helpers/memfs-utils.d.ts +181 -0
  139. package/dist/test-helpers/memfs-utils.d.ts.map +1 -0
  140. package/dist/test-helpers/memfs-utils.js +292 -0
  141. package/dist/test-helpers/memfs-utils.js.map +1 -0
  142. package/dist/test-helpers/memfs-utils.test.d.ts +5 -0
  143. package/dist/test-helpers/memfs-utils.test.d.ts.map +1 -0
  144. package/dist/test-helpers/memfs-utils.test.js +338 -0
  145. package/dist/test-helpers/memfs-utils.test.js.map +1 -0
  146. package/dist/test-helpers/race-condition-helpers.d.ts +85 -0
  147. package/dist/test-helpers/race-condition-helpers.d.ts.map +1 -0
  148. package/dist/test-helpers/race-condition-helpers.js +279 -0
  149. package/dist/test-helpers/race-condition-helpers.js.map +1 -0
  150. package/dist/test-helpers/test-data-builders.d.ts +40 -3
  151. package/dist/test-helpers/test-data-builders.d.ts.map +1 -1
  152. package/dist/test-helpers/test-data-builders.js +54 -5
  153. package/dist/test-helpers/test-data-builders.js.map +1 -1
  154. package/dist/test-helpers/tool-validators.d.ts.map +1 -1
  155. package/dist/test-helpers/tool-validators.js +16 -1
  156. package/dist/test-helpers/tool-validators.js.map +1 -1
  157. package/dist/tools/query-evaluations.d.ts.map +1 -1
  158. package/dist/tools/query-evaluations.js +16 -2
  159. package/dist/tools/query-evaluations.js.map +1 -1
  160. package/dist/tools/query-evaluations.test.js +53 -46
  161. package/dist/tools/query-evaluations.test.js.map +1 -1
  162. package/dist/tools/query-llm-events.test.js +6 -3
  163. package/dist/tools/query-llm-events.test.js.map +1 -1
  164. package/package.json +2 -1
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Error categorization types for observability-toolkit MCP server
3
+ *
4
+ * Classifies errors by source to enable appropriate handling:
5
+ * - User errors: Bad input, should return helpful message
6
+ * - System errors: Internal failures, may need alerting
7
+ * - Network errors: Connectivity issues, typically retryable
8
+ * - Config errors: Misconfiguration, requires operator action
9
+ */
10
+ export type ErrorCategory = 'user' | 'system' | 'network' | 'config';
11
+ export interface CategorizedError {
12
+ category: ErrorCategory;
13
+ code: string;
14
+ message: string;
15
+ retryable: boolean;
16
+ /** Original error for debugging (not exposed to clients) */
17
+ cause?: Error;
18
+ }
19
+ /**
20
+ * Error codes by category.
21
+ */
22
+ export declare const ErrorCodes: {
23
+ readonly INVALID_INPUT: "INVALID_INPUT";
24
+ readonly INVALID_DATE_RANGE: "INVALID_DATE_RANGE";
25
+ readonly INVALID_REGEX: "INVALID_REGEX";
26
+ readonly LIMIT_EXCEEDED: "LIMIT_EXCEEDED";
27
+ readonly INVALID_CURSOR: "INVALID_CURSOR";
28
+ readonly INTERNAL_ERROR: "INTERNAL_ERROR";
29
+ readonly PARSE_ERROR: "PARSE_ERROR";
30
+ readonly MEMORY_ERROR: "MEMORY_ERROR";
31
+ readonly INIT_FAILED: "INIT_FAILED";
32
+ readonly TIMEOUT: "TIMEOUT";
33
+ readonly CONNECTION_FAILED: "CONNECTION_FAILED";
34
+ readonly API_ERROR: "API_ERROR";
35
+ readonly CIRCUIT_OPEN: "CIRCUIT_OPEN";
36
+ readonly MISSING_CONFIG: "MISSING_CONFIG";
37
+ readonly INVALID_CONFIG: "INVALID_CONFIG";
38
+ readonly SSRF_BLOCKED: "SSRF_BLOCKED";
39
+ };
40
+ export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes];
41
+ /**
42
+ * Create a categorized error from an error code and message.
43
+ */
44
+ export declare function createCategorizedError(code: ErrorCode, message: string, cause?: Error): CategorizedError;
45
+ /**
46
+ * Type guard to check if an error is a CategorizedError.
47
+ */
48
+ export declare function isCategorizedError(error: unknown): error is CategorizedError;
49
+ /**
50
+ * Wrap an unknown error into a CategorizedError.
51
+ * Attempts to infer the category from the error message.
52
+ */
53
+ export declare function categorizeError(error: unknown): CategorizedError;
54
+ //# sourceMappingURL=error-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-types.d.ts","sourceRoot":"","sources":["../../src/lib/error-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CAwBb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,GACZ,gBAAgB,CAWlB;AA0ED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAS5E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAmChE"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Error categorization types for observability-toolkit MCP server
3
+ *
4
+ * Classifies errors by source to enable appropriate handling:
5
+ * - User errors: Bad input, should return helpful message
6
+ * - System errors: Internal failures, may need alerting
7
+ * - Network errors: Connectivity issues, typically retryable
8
+ * - Config errors: Misconfiguration, requires operator action
9
+ */
10
+ /**
11
+ * Error codes by category.
12
+ */
13
+ export const ErrorCodes = {
14
+ // User errors (4xx-like)
15
+ INVALID_INPUT: 'INVALID_INPUT',
16
+ INVALID_DATE_RANGE: 'INVALID_DATE_RANGE',
17
+ INVALID_REGEX: 'INVALID_REGEX',
18
+ LIMIT_EXCEEDED: 'LIMIT_EXCEEDED',
19
+ INVALID_CURSOR: 'INVALID_CURSOR',
20
+ // System errors (5xx-like)
21
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
22
+ PARSE_ERROR: 'PARSE_ERROR',
23
+ MEMORY_ERROR: 'MEMORY_ERROR',
24
+ INIT_FAILED: 'INIT_FAILED',
25
+ // Network errors
26
+ TIMEOUT: 'TIMEOUT',
27
+ CONNECTION_FAILED: 'CONNECTION_FAILED',
28
+ API_ERROR: 'API_ERROR',
29
+ CIRCUIT_OPEN: 'CIRCUIT_OPEN',
30
+ // Config errors
31
+ MISSING_CONFIG: 'MISSING_CONFIG',
32
+ INVALID_CONFIG: 'INVALID_CONFIG',
33
+ SSRF_BLOCKED: 'SSRF_BLOCKED',
34
+ };
35
+ /**
36
+ * Create a categorized error from an error code and message.
37
+ */
38
+ export function createCategorizedError(code, message, cause) {
39
+ const category = getErrorCategory(code);
40
+ const retryable = isRetryable(code);
41
+ return {
42
+ category,
43
+ code,
44
+ message,
45
+ retryable,
46
+ cause,
47
+ };
48
+ }
49
+ /**
50
+ * Determine the category for an error code.
51
+ */
52
+ function getErrorCategory(code) {
53
+ switch (code) {
54
+ case ErrorCodes.INVALID_INPUT:
55
+ case ErrorCodes.INVALID_DATE_RANGE:
56
+ case ErrorCodes.INVALID_REGEX:
57
+ case ErrorCodes.LIMIT_EXCEEDED:
58
+ case ErrorCodes.INVALID_CURSOR:
59
+ return 'user';
60
+ case ErrorCodes.INTERNAL_ERROR:
61
+ case ErrorCodes.PARSE_ERROR:
62
+ case ErrorCodes.MEMORY_ERROR:
63
+ case ErrorCodes.INIT_FAILED:
64
+ return 'system';
65
+ case ErrorCodes.TIMEOUT:
66
+ case ErrorCodes.CONNECTION_FAILED:
67
+ case ErrorCodes.API_ERROR:
68
+ case ErrorCodes.CIRCUIT_OPEN:
69
+ return 'network';
70
+ case ErrorCodes.MISSING_CONFIG:
71
+ case ErrorCodes.INVALID_CONFIG:
72
+ case ErrorCodes.SSRF_BLOCKED:
73
+ return 'config';
74
+ default:
75
+ return 'system';
76
+ }
77
+ }
78
+ /**
79
+ * Determine if an error is retryable.
80
+ */
81
+ function isRetryable(code) {
82
+ switch (code) {
83
+ // Network errors are typically retryable
84
+ case ErrorCodes.TIMEOUT:
85
+ case ErrorCodes.CONNECTION_FAILED:
86
+ case ErrorCodes.API_ERROR:
87
+ return true;
88
+ // Circuit breaker needs time before retry
89
+ case ErrorCodes.CIRCUIT_OPEN:
90
+ return true;
91
+ // User and config errors are not retryable without changes
92
+ case ErrorCodes.INVALID_INPUT:
93
+ case ErrorCodes.INVALID_DATE_RANGE:
94
+ case ErrorCodes.INVALID_REGEX:
95
+ case ErrorCodes.LIMIT_EXCEEDED:
96
+ case ErrorCodes.MISSING_CONFIG:
97
+ case ErrorCodes.INVALID_CONFIG:
98
+ case ErrorCodes.SSRF_BLOCKED:
99
+ return false;
100
+ // System errors are generally not retryable
101
+ case ErrorCodes.INTERNAL_ERROR:
102
+ case ErrorCodes.PARSE_ERROR:
103
+ case ErrorCodes.MEMORY_ERROR:
104
+ case ErrorCodes.INIT_FAILED:
105
+ case ErrorCodes.INVALID_CURSOR:
106
+ return false;
107
+ default:
108
+ return false;
109
+ }
110
+ }
111
+ /**
112
+ * Type guard to check if an error is a CategorizedError.
113
+ */
114
+ export function isCategorizedError(error) {
115
+ return (typeof error === 'object' &&
116
+ error !== null &&
117
+ 'category' in error &&
118
+ 'code' in error &&
119
+ 'message' in error &&
120
+ 'retryable' in error);
121
+ }
122
+ /**
123
+ * Wrap an unknown error into a CategorizedError.
124
+ * Attempts to infer the category from the error message.
125
+ */
126
+ export function categorizeError(error) {
127
+ if (isCategorizedError(error)) {
128
+ return error;
129
+ }
130
+ const message = error instanceof Error ? error.message : String(error);
131
+ const cause = error instanceof Error ? error : undefined;
132
+ // Infer category from message patterns
133
+ if (message.includes('timeout') || message.includes('Timeout')) {
134
+ return createCategorizedError(ErrorCodes.TIMEOUT, message, cause);
135
+ }
136
+ if (message.includes('Circuit breaker')) {
137
+ return createCategorizedError(ErrorCodes.CIRCUIT_OPEN, message, cause);
138
+ }
139
+ if (message.includes('Rate limit')) {
140
+ return createCategorizedError(ErrorCodes.LIMIT_EXCEEDED, message, cause);
141
+ }
142
+ if (message.includes('SSRF') || message.includes('not allowed')) {
143
+ return createCategorizedError(ErrorCodes.SSRF_BLOCKED, message, cause);
144
+ }
145
+ if (message.includes('not configured') || message.includes('missing')) {
146
+ return createCategorizedError(ErrorCodes.MISSING_CONFIG, message, cause);
147
+ }
148
+ if (message.includes('Invalid') || message.includes('Validation')) {
149
+ return createCategorizedError(ErrorCodes.INVALID_INPUT, message, cause);
150
+ }
151
+ // Default to system error
152
+ return createCategorizedError(ErrorCodes.INTERNAL_ERROR, message, cause);
153
+ }
154
+ //# sourceMappingURL=error-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-types.js","sourceRoot":"","sources":["../../src/lib/error-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=error-types.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-types.test.d.ts","sourceRoot":"","sources":["../../src/lib/error-types.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,196 @@
1
+ import { describe, it } from 'node:test';
2
+ import assert from 'node:assert';
3
+ import { ErrorCodes, createCategorizedError, categorizeError, isCategorizedError, } from './error-types.js';
4
+ describe('error-types', () => {
5
+ describe('createCategorizedError()', () => {
6
+ describe('user errors', () => {
7
+ it('categorizes INVALID_INPUT as user error', () => {
8
+ const error = createCategorizedError(ErrorCodes.INVALID_INPUT, 'bad input');
9
+ assert.strictEqual(error.category, 'user');
10
+ assert.strictEqual(error.retryable, false);
11
+ });
12
+ it('categorizes INVALID_DATE_RANGE as user error', () => {
13
+ const error = createCategorizedError(ErrorCodes.INVALID_DATE_RANGE, 'bad date');
14
+ assert.strictEqual(error.category, 'user');
15
+ assert.strictEqual(error.retryable, false);
16
+ });
17
+ it('categorizes INVALID_REGEX as user error', () => {
18
+ const error = createCategorizedError(ErrorCodes.INVALID_REGEX, 'bad regex');
19
+ assert.strictEqual(error.category, 'user');
20
+ assert.strictEqual(error.retryable, false);
21
+ });
22
+ it('categorizes LIMIT_EXCEEDED as user error', () => {
23
+ const error = createCategorizedError(ErrorCodes.LIMIT_EXCEEDED, 'too many');
24
+ assert.strictEqual(error.category, 'user');
25
+ assert.strictEqual(error.retryable, false);
26
+ });
27
+ it('categorizes INVALID_CURSOR as user error', () => {
28
+ const error = createCategorizedError(ErrorCodes.INVALID_CURSOR, 'bad cursor');
29
+ assert.strictEqual(error.category, 'user');
30
+ assert.strictEqual(error.retryable, false);
31
+ });
32
+ });
33
+ describe('system errors', () => {
34
+ it('categorizes INTERNAL_ERROR as system error', () => {
35
+ const error = createCategorizedError(ErrorCodes.INTERNAL_ERROR, 'oops');
36
+ assert.strictEqual(error.category, 'system');
37
+ assert.strictEqual(error.retryable, false);
38
+ });
39
+ it('categorizes PARSE_ERROR as system error', () => {
40
+ const error = createCategorizedError(ErrorCodes.PARSE_ERROR, 'bad json');
41
+ assert.strictEqual(error.category, 'system');
42
+ assert.strictEqual(error.retryable, false);
43
+ });
44
+ it('categorizes MEMORY_ERROR as system error', () => {
45
+ const error = createCategorizedError(ErrorCodes.MEMORY_ERROR, 'oom');
46
+ assert.strictEqual(error.category, 'system');
47
+ assert.strictEqual(error.retryable, false);
48
+ });
49
+ it('categorizes INIT_FAILED as system error', () => {
50
+ const error = createCategorizedError(ErrorCodes.INIT_FAILED, 'startup failed');
51
+ assert.strictEqual(error.category, 'system');
52
+ assert.strictEqual(error.retryable, false);
53
+ });
54
+ });
55
+ describe('network errors', () => {
56
+ it('categorizes TIMEOUT as network error and retryable', () => {
57
+ const error = createCategorizedError(ErrorCodes.TIMEOUT, 'timed out');
58
+ assert.strictEqual(error.category, 'network');
59
+ assert.strictEqual(error.retryable, true);
60
+ });
61
+ it('categorizes CONNECTION_FAILED as network error and retryable', () => {
62
+ const error = createCategorizedError(ErrorCodes.CONNECTION_FAILED, 'refused');
63
+ assert.strictEqual(error.category, 'network');
64
+ assert.strictEqual(error.retryable, true);
65
+ });
66
+ it('categorizes API_ERROR as network error and retryable', () => {
67
+ const error = createCategorizedError(ErrorCodes.API_ERROR, '500 error');
68
+ assert.strictEqual(error.category, 'network');
69
+ assert.strictEqual(error.retryable, true);
70
+ });
71
+ it('categorizes CIRCUIT_OPEN as network error and retryable', () => {
72
+ const error = createCategorizedError(ErrorCodes.CIRCUIT_OPEN, 'breaker open');
73
+ assert.strictEqual(error.category, 'network');
74
+ assert.strictEqual(error.retryable, true);
75
+ });
76
+ });
77
+ describe('config errors', () => {
78
+ it('categorizes MISSING_CONFIG as config error', () => {
79
+ const error = createCategorizedError(ErrorCodes.MISSING_CONFIG, 'no env var');
80
+ assert.strictEqual(error.category, 'config');
81
+ assert.strictEqual(error.retryable, false);
82
+ });
83
+ it('categorizes INVALID_CONFIG as config error', () => {
84
+ const error = createCategorizedError(ErrorCodes.INVALID_CONFIG, 'bad value');
85
+ assert.strictEqual(error.category, 'config');
86
+ assert.strictEqual(error.retryable, false);
87
+ });
88
+ it('categorizes SSRF_BLOCKED as config error', () => {
89
+ const error = createCategorizedError(ErrorCodes.SSRF_BLOCKED, 'ssrf attempt');
90
+ assert.strictEqual(error.category, 'config');
91
+ assert.strictEqual(error.retryable, false);
92
+ });
93
+ });
94
+ it('preserves cause when provided', () => {
95
+ const cause = new Error('original');
96
+ const error = createCategorizedError(ErrorCodes.INTERNAL_ERROR, 'wrapped', cause);
97
+ assert.strictEqual(error.cause, cause);
98
+ });
99
+ });
100
+ describe('categorizeError()', () => {
101
+ it('returns existing CategorizedError unchanged', () => {
102
+ const existing = {
103
+ category: 'user',
104
+ code: 'INVALID_INPUT',
105
+ message: 'test',
106
+ retryable: false,
107
+ };
108
+ assert.strictEqual(categorizeError(existing), existing);
109
+ });
110
+ it('infers TIMEOUT from message', () => {
111
+ const result = categorizeError(new Error('Request timeout after 5000ms'));
112
+ assert.strictEqual(result.code, 'TIMEOUT');
113
+ assert.strictEqual(result.category, 'network');
114
+ assert.strictEqual(result.retryable, true);
115
+ });
116
+ it('infers CIRCUIT_OPEN from message', () => {
117
+ const result = categorizeError(new Error('Circuit breaker is open'));
118
+ assert.strictEqual(result.code, 'CIRCUIT_OPEN');
119
+ assert.strictEqual(result.category, 'network');
120
+ });
121
+ it('infers LIMIT_EXCEEDED from Rate limit message', () => {
122
+ const result = categorizeError(new Error('Rate limit exceeded'));
123
+ assert.strictEqual(result.code, 'LIMIT_EXCEEDED');
124
+ assert.strictEqual(result.category, 'user');
125
+ });
126
+ it('infers SSRF_BLOCKED from SSRF message', () => {
127
+ const result = categorizeError(new Error('SSRF attempt blocked'));
128
+ assert.strictEqual(result.code, 'SSRF_BLOCKED');
129
+ assert.strictEqual(result.category, 'config');
130
+ });
131
+ it('infers MISSING_CONFIG from not configured message', () => {
132
+ const result = categorizeError(new Error('SigNoz is not configured'));
133
+ assert.strictEqual(result.code, 'MISSING_CONFIG');
134
+ assert.strictEqual(result.category, 'config');
135
+ });
136
+ it('infers INVALID_INPUT from Invalid message', () => {
137
+ const result = categorizeError(new Error('Invalid date format'));
138
+ assert.strictEqual(result.code, 'INVALID_INPUT');
139
+ assert.strictEqual(result.category, 'user');
140
+ });
141
+ it('infers INVALID_INPUT from Validation message', () => {
142
+ const result = categorizeError(new Error('Validation failed'));
143
+ assert.strictEqual(result.code, 'INVALID_INPUT');
144
+ assert.strictEqual(result.category, 'user');
145
+ });
146
+ it('defaults to INTERNAL_ERROR for unknown messages', () => {
147
+ const result = categorizeError(new Error('Something went wrong'));
148
+ assert.strictEqual(result.code, 'INTERNAL_ERROR');
149
+ assert.strictEqual(result.category, 'system');
150
+ });
151
+ it('handles string errors', () => {
152
+ const result = categorizeError('string error');
153
+ assert.strictEqual(result.message, 'string error');
154
+ assert.strictEqual(result.cause, undefined);
155
+ });
156
+ it('preserves Error as cause', () => {
157
+ const original = new Error('original');
158
+ const result = categorizeError(original);
159
+ assert.strictEqual(result.cause, original);
160
+ });
161
+ });
162
+ describe('isCategorizedError()', () => {
163
+ it('returns true for valid CategorizedError', () => {
164
+ const error = {
165
+ category: 'user',
166
+ code: 'INVALID_INPUT',
167
+ message: 'test',
168
+ retryable: false,
169
+ };
170
+ assert.strictEqual(isCategorizedError(error), true);
171
+ });
172
+ it('returns false for plain Error', () => {
173
+ assert.strictEqual(isCategorizedError(new Error('test')), false);
174
+ });
175
+ it('returns false for null', () => {
176
+ assert.strictEqual(isCategorizedError(null), false);
177
+ });
178
+ it('returns false for undefined', () => {
179
+ assert.strictEqual(isCategorizedError(undefined), false);
180
+ });
181
+ it('returns false for partial object', () => {
182
+ assert.strictEqual(isCategorizedError({ category: 'user' }), false);
183
+ assert.strictEqual(isCategorizedError({ category: 'user', code: 'X' }), false);
184
+ });
185
+ });
186
+ describe('ErrorCodes', () => {
187
+ it('has all expected codes', () => {
188
+ assert.strictEqual(ErrorCodes.INVALID_INPUT, 'INVALID_INPUT');
189
+ assert.strictEqual(ErrorCodes.TIMEOUT, 'TIMEOUT');
190
+ assert.strictEqual(ErrorCodes.CIRCUIT_OPEN, 'CIRCUIT_OPEN');
191
+ assert.strictEqual(ErrorCodes.MISSING_CONFIG, 'MISSING_CONFIG');
192
+ assert.strictEqual(ErrorCodes.INTERNAL_ERROR, 'INTERNAL_ERROR');
193
+ });
194
+ });
195
+ });
196
+ //# sourceMappingURL=error-types.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-types.test.js","sourceRoot":"","sources":["../../src/lib/error-types.test.ts"],"names":[],"mappings":"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"}