observability-toolkit 1.8.0 → 1.8.4

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 (186) hide show
  1. package/README.md +81 -3
  2. package/dist/backends/index.d.ts +119 -0
  3. package/dist/backends/index.d.ts.map +1 -1
  4. package/dist/backends/index.js +57 -0
  5. package/dist/backends/index.js.map +1 -1
  6. package/dist/backends/index.test.d.ts +5 -0
  7. package/dist/backends/index.test.d.ts.map +1 -0
  8. package/dist/backends/index.test.js +156 -0
  9. package/dist/backends/index.test.js.map +1 -0
  10. package/dist/backends/local-jsonl-boolean-search.test.js +8 -27
  11. package/dist/backends/local-jsonl-boolean-search.test.js.map +1 -1
  12. package/dist/backends/local-jsonl-logs.test.d.ts +2 -0
  13. package/dist/backends/local-jsonl-logs.test.d.ts.map +1 -0
  14. package/dist/backends/local-jsonl-logs.test.js +603 -0
  15. package/dist/backends/local-jsonl-logs.test.js.map +1 -0
  16. package/dist/backends/local-jsonl-traces.test.d.ts +2 -0
  17. package/dist/backends/local-jsonl-traces.test.d.ts.map +1 -0
  18. package/dist/backends/local-jsonl-traces.test.js +1723 -0
  19. package/dist/backends/local-jsonl-traces.test.js.map +1 -0
  20. package/dist/backends/local-jsonl.d.ts +4 -1
  21. package/dist/backends/local-jsonl.d.ts.map +1 -1
  22. package/dist/backends/local-jsonl.js +185 -1
  23. package/dist/backends/local-jsonl.js.map +1 -1
  24. package/dist/backends/local-jsonl.test.js +723 -46
  25. package/dist/backends/local-jsonl.test.js.map +1 -1
  26. package/dist/backends/signoz-api.d.ts +32 -0
  27. package/dist/backends/signoz-api.d.ts.map +1 -1
  28. package/dist/backends/signoz-api.js +231 -33
  29. package/dist/backends/signoz-api.js.map +1 -1
  30. package/dist/backends/signoz-api.test.js +410 -63
  31. package/dist/backends/signoz-api.test.js.map +1 -1
  32. package/dist/lib/constants.d.ts +59 -0
  33. package/dist/lib/constants.d.ts.map +1 -1
  34. package/dist/lib/constants.js +252 -6
  35. package/dist/lib/constants.js.map +1 -1
  36. package/dist/lib/constants.test.js +357 -21
  37. package/dist/lib/constants.test.js.map +1 -1
  38. package/dist/lib/edge-cases.test.d.ts +11 -0
  39. package/dist/lib/edge-cases.test.d.ts.map +1 -0
  40. package/dist/lib/edge-cases.test.js +634 -0
  41. package/dist/lib/edge-cases.test.js.map +1 -0
  42. package/dist/lib/error-sanitizer.d.ts +57 -0
  43. package/dist/lib/error-sanitizer.d.ts.map +1 -0
  44. package/dist/lib/error-sanitizer.js +207 -0
  45. package/dist/lib/error-sanitizer.js.map +1 -0
  46. package/dist/lib/error-sanitizer.test.d.ts +8 -0
  47. package/dist/lib/error-sanitizer.test.d.ts.map +1 -0
  48. package/dist/lib/error-sanitizer.test.js +369 -0
  49. package/dist/lib/error-sanitizer.test.js.map +1 -0
  50. package/dist/lib/file-utils.d.ts +134 -0
  51. package/dist/lib/file-utils.d.ts.map +1 -1
  52. package/dist/lib/file-utils.js +395 -9
  53. package/dist/lib/file-utils.js.map +1 -1
  54. package/dist/lib/file-utils.test.js +444 -3
  55. package/dist/lib/file-utils.test.js.map +1 -1
  56. package/dist/lib/indexer.d.ts +9 -1
  57. package/dist/lib/indexer.d.ts.map +1 -1
  58. package/dist/lib/indexer.js +51 -2
  59. package/dist/lib/indexer.js.map +1 -1
  60. package/dist/lib/indexer.test.js +138 -20
  61. package/dist/lib/indexer.test.js.map +1 -1
  62. package/dist/lib/input-validator.d.ts +103 -0
  63. package/dist/lib/input-validator.d.ts.map +1 -0
  64. package/dist/lib/input-validator.js +250 -0
  65. package/dist/lib/input-validator.js.map +1 -0
  66. package/dist/lib/input-validator.test.d.ts +2 -0
  67. package/dist/lib/input-validator.test.d.ts.map +1 -0
  68. package/dist/lib/input-validator.test.js +287 -0
  69. package/dist/lib/input-validator.test.js.map +1 -0
  70. package/dist/lib/query-sanitizer.d.ts +143 -0
  71. package/dist/lib/query-sanitizer.d.ts.map +1 -0
  72. package/dist/lib/query-sanitizer.js +261 -0
  73. package/dist/lib/query-sanitizer.js.map +1 -0
  74. package/dist/lib/query-sanitizer.test.d.ts +5 -0
  75. package/dist/lib/query-sanitizer.test.d.ts.map +1 -0
  76. package/dist/lib/query-sanitizer.test.js +400 -0
  77. package/dist/lib/query-sanitizer.test.js.map +1 -0
  78. package/dist/lib/server-utils.d.ts +80 -0
  79. package/dist/lib/server-utils.d.ts.map +1 -0
  80. package/dist/lib/server-utils.js +141 -0
  81. package/dist/lib/server-utils.js.map +1 -0
  82. package/dist/lib/shared-schemas.d.ts +59 -0
  83. package/dist/lib/shared-schemas.d.ts.map +1 -0
  84. package/dist/lib/shared-schemas.js +58 -0
  85. package/dist/lib/shared-schemas.js.map +1 -0
  86. package/dist/lib/shared-schemas.test.d.ts +5 -0
  87. package/dist/lib/shared-schemas.test.d.ts.map +1 -0
  88. package/dist/lib/shared-schemas.test.js +106 -0
  89. package/dist/lib/shared-schemas.test.js.map +1 -0
  90. package/dist/lib/toon-encoder.d.ts +21 -0
  91. package/dist/lib/toon-encoder.d.ts.map +1 -0
  92. package/dist/lib/toon-encoder.js +46 -0
  93. package/dist/lib/toon-encoder.js.map +1 -0
  94. package/dist/server.d.ts +1 -1
  95. package/dist/server.d.ts.map +1 -1
  96. package/dist/server.js +155 -81
  97. package/dist/server.js.map +1 -1
  98. package/dist/server.test.js +363 -0
  99. package/dist/server.test.js.map +1 -1
  100. package/dist/test-helpers/env-utils.d.ts +65 -0
  101. package/dist/test-helpers/env-utils.d.ts.map +1 -0
  102. package/dist/test-helpers/env-utils.js +94 -0
  103. package/dist/test-helpers/env-utils.js.map +1 -0
  104. package/dist/test-helpers/file-utils.d.ts +93 -0
  105. package/dist/test-helpers/file-utils.d.ts.map +1 -0
  106. package/dist/test-helpers/file-utils.js +206 -0
  107. package/dist/test-helpers/file-utils.js.map +1 -0
  108. package/dist/test-helpers/index.d.ts +10 -0
  109. package/dist/test-helpers/index.d.ts.map +1 -0
  110. package/dist/test-helpers/index.js +28 -0
  111. package/dist/test-helpers/index.js.map +1 -0
  112. package/dist/test-helpers/mock-backends.d.ts +139 -0
  113. package/dist/test-helpers/mock-backends.d.ts.map +1 -0
  114. package/dist/test-helpers/mock-backends.js +227 -0
  115. package/dist/test-helpers/mock-backends.js.map +1 -0
  116. package/dist/test-helpers/mock-backends.test.d.ts +5 -0
  117. package/dist/test-helpers/mock-backends.test.d.ts.map +1 -0
  118. package/dist/test-helpers/mock-backends.test.js +368 -0
  119. package/dist/test-helpers/mock-backends.test.js.map +1 -0
  120. package/dist/test-helpers/schema-validators.d.ts +32 -0
  121. package/dist/test-helpers/schema-validators.d.ts.map +1 -0
  122. package/dist/test-helpers/schema-validators.js +125 -0
  123. package/dist/test-helpers/schema-validators.js.map +1 -0
  124. package/dist/test-helpers/test-data-builders.d.ts +223 -0
  125. package/dist/test-helpers/test-data-builders.d.ts.map +1 -0
  126. package/dist/test-helpers/test-data-builders.js +288 -0
  127. package/dist/test-helpers/test-data-builders.js.map +1 -0
  128. package/dist/test-helpers/test-data-builders.test.d.ts +2 -0
  129. package/dist/test-helpers/test-data-builders.test.d.ts.map +1 -0
  130. package/dist/test-helpers/test-data-builders.test.js +306 -0
  131. package/dist/test-helpers/test-data-builders.test.js.map +1 -0
  132. package/dist/test-helpers/tool-validators.d.ts +28 -0
  133. package/dist/test-helpers/tool-validators.d.ts.map +1 -0
  134. package/dist/test-helpers/tool-validators.js +56 -0
  135. package/dist/test-helpers/tool-validators.js.map +1 -0
  136. package/dist/tools/context-stats.d.ts +1 -0
  137. package/dist/tools/context-stats.d.ts.map +1 -1
  138. package/dist/tools/context-stats.js +9 -5
  139. package/dist/tools/context-stats.js.map +1 -1
  140. package/dist/tools/context-stats.test.js +24 -10
  141. package/dist/tools/context-stats.test.js.map +1 -1
  142. package/dist/tools/get-trace-url.js +2 -2
  143. package/dist/tools/get-trace-url.js.map +1 -1
  144. package/dist/tools/health-check.js +2 -2
  145. package/dist/tools/health-check.js.map +1 -1
  146. package/dist/tools/index.d.ts +1 -0
  147. package/dist/tools/index.d.ts.map +1 -1
  148. package/dist/tools/index.js +1 -0
  149. package/dist/tools/index.js.map +1 -1
  150. package/dist/tools/query-evaluations.d.ts +186 -0
  151. package/dist/tools/query-evaluations.d.ts.map +1 -0
  152. package/dist/tools/query-evaluations.js +351 -0
  153. package/dist/tools/query-evaluations.js.map +1 -0
  154. package/dist/tools/query-evaluations.test.d.ts +5 -0
  155. package/dist/tools/query-evaluations.test.d.ts.map +1 -0
  156. package/dist/tools/query-evaluations.test.js +733 -0
  157. package/dist/tools/query-evaluations.test.js.map +1 -0
  158. package/dist/tools/query-llm-events.d.ts +24 -18
  159. package/dist/tools/query-llm-events.d.ts.map +1 -1
  160. package/dist/tools/query-llm-events.js +103 -60
  161. package/dist/tools/query-llm-events.js.map +1 -1
  162. package/dist/tools/query-llm-events.test.js +271 -9
  163. package/dist/tools/query-llm-events.test.js.map +1 -1
  164. package/dist/tools/query-logs.d.ts +28 -20
  165. package/dist/tools/query-logs.d.ts.map +1 -1
  166. package/dist/tools/query-logs.js +85 -61
  167. package/dist/tools/query-logs.js.map +1 -1
  168. package/dist/tools/query-logs.test.js +74 -145
  169. package/dist/tools/query-logs.test.js.map +1 -1
  170. package/dist/tools/query-metrics.d.ts +20 -20
  171. package/dist/tools/query-metrics.d.ts.map +1 -1
  172. package/dist/tools/query-metrics.js +109 -61
  173. package/dist/tools/query-metrics.js.map +1 -1
  174. package/dist/tools/query-metrics.test.js +26 -61
  175. package/dist/tools/query-metrics.test.js.map +1 -1
  176. package/dist/tools/query-traces.d.ts +24 -22
  177. package/dist/tools/query-traces.d.ts.map +1 -1
  178. package/dist/tools/query-traces.js +95 -70
  179. package/dist/tools/query-traces.js.map +1 -1
  180. package/dist/tools/query-traces.test.js +294 -90
  181. package/dist/tools/query-traces.test.js.map +1 -1
  182. package/dist/tools/setup-claudeignore.js +7 -7
  183. package/dist/tools/setup-claudeignore.js.map +1 -1
  184. package/dist/tools/setup-claudeignore.test.js +4 -25
  185. package/dist/tools/setup-claudeignore.test.js.map +1 -1
  186. package/package.json +3 -4
@@ -0,0 +1,261 @@
1
+ /**
2
+ * ClickHouse-specific query escaping and input validation
3
+ *
4
+ * Provides security utilities for sanitizing user inputs before
5
+ * including them in ClickHouse queries via SigNoz API.
6
+ */
7
+ /**
8
+ * Dangerous SQL/query patterns that should never appear in user input
9
+ * Case-insensitive matching is used
10
+ */
11
+ export const DANGEROUS_PATTERNS = [
12
+ 'DROP',
13
+ 'DELETE',
14
+ 'INSERT',
15
+ 'UPDATE',
16
+ 'ALTER',
17
+ 'CREATE',
18
+ 'TRUNCATE',
19
+ '--',
20
+ '/*',
21
+ '*/',
22
+ ';',
23
+ 'UNION',
24
+ 'INTO OUTFILE',
25
+ 'INTO DUMPFILE',
26
+ 'LOAD_FILE',
27
+ 'SYSTEM',
28
+ 'ATTACH',
29
+ 'DETACH',
30
+ 'RENAME',
31
+ 'OPTIMIZE',
32
+ 'GRANT',
33
+ 'REVOKE',
34
+ ];
35
+ /**
36
+ * Escape a string value for use in ClickHouse single-quoted strings
37
+ *
38
+ * ClickHouse uses backslash escaping for special characters.
39
+ * @see https://clickhouse.com/docs/en/sql-reference/syntax#string
40
+ *
41
+ * @param value - The string value to escape
42
+ * @returns Escaped string safe for use in single-quoted ClickHouse strings
43
+ */
44
+ export function escapeClickHouseString(value) {
45
+ return value
46
+ // Escape backslashes first (must be first to avoid double-escaping)
47
+ .replace(/\\/g, '\\\\')
48
+ // Escape single quotes
49
+ .replace(/'/g, "\\'")
50
+ // Escape null bytes
51
+ .replace(/\0/g, '\\0')
52
+ // Escape newlines
53
+ .replace(/\n/g, '\\n')
54
+ // Escape carriage returns
55
+ .replace(/\r/g, '\\r')
56
+ // Escape tabs
57
+ .replace(/\t/g, '\\t');
58
+ }
59
+ /**
60
+ * Escape LIKE wildcard characters for use in ClickHouse LIKE patterns
61
+ *
62
+ * This escapes % and _ which have special meaning in LIKE patterns.
63
+ * Use this when the user's input should be treated as a literal string
64
+ * in a LIKE clause, not as a pattern.
65
+ *
66
+ * @param value - The string value to escape for LIKE
67
+ * @returns Escaped string with LIKE wildcards escaped
68
+ */
69
+ export function escapeClickHouseLike(value) {
70
+ // First escape backslashes (used as escape character in LIKE)
71
+ // Then escape the LIKE wildcards
72
+ return value
73
+ .replace(/\\/g, '\\\\')
74
+ .replace(/%/g, '\\%')
75
+ .replace(/_/g, '\\_');
76
+ }
77
+ /**
78
+ * Sanitize an identifier (column name, table name, etc.)
79
+ *
80
+ * Only allows alphanumeric characters, underscores, and dots.
81
+ * Removes all other characters.
82
+ *
83
+ * @param name - The identifier to sanitize
84
+ * @returns Sanitized identifier containing only safe characters
85
+ */
86
+ export function sanitizeIdentifier(name) {
87
+ return name.replace(/[^a-zA-Z0-9_.]/g, '');
88
+ }
89
+ /**
90
+ * Maximum length for query input validation
91
+ * Prevents performance issues with very long inputs
92
+ */
93
+ export const MAX_QUERY_INPUT_LENGTH = 10000;
94
+ /**
95
+ * Special character patterns as array for index-based iteration
96
+ * Array iteration with for-loop is faster than Set iteration with for...of
97
+ * (avoids iterator object creation overhead)
98
+ */
99
+ const SPECIAL_CHAR_PATTERNS = ['--', '/*', '*/', ';'];
100
+ /**
101
+ * SQL keywords from DANGEROUS_PATTERNS (excluding special chars)
102
+ * Pre-filtered at module load time
103
+ */
104
+ const SQL_KEYWORDS = DANGEROUS_PATTERNS.filter(p => !SPECIAL_CHAR_PATTERNS.includes(p));
105
+ /**
106
+ * Escape regex metacharacters in a string for safe use in RegExp constructor
107
+ * Prevents ReDoS attacks when using user-influenced patterns
108
+ */
109
+ function escapeRegexPattern(pattern) {
110
+ return pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
111
+ }
112
+ /**
113
+ * Validate that escaped patterns don't contain unescaped alternation chars
114
+ * Prevents regex injection if patterns are incorrectly added to SQL_KEYWORDS
115
+ */
116
+ function validateEscapedPatterns(escaped) {
117
+ for (const pattern of escaped) {
118
+ // After escaping, only \\| should exist (escaped pipe), not bare |
119
+ if (/(?<!\\)\|/.test(pattern)) {
120
+ throw new Error(`[SECURITY] Invalid pattern in SQL_KEYWORDS after escaping: contains unescaped alternation`);
121
+ }
122
+ }
123
+ }
124
+ /**
125
+ * Pre-compiled regex for all SQL keywords with word boundaries
126
+ * Combined into single alternation pattern for O(1) matching
127
+ * Example: /\b(DROP|DELETE|INSERT|...)\b/i
128
+ *
129
+ * Security: Validates escaped patterns to prevent injection via malformed SQL_KEYWORDS
130
+ */
131
+ const SQL_KEYWORDS_REGEX = (() => {
132
+ const escaped = SQL_KEYWORDS.map(escapeRegexPattern);
133
+ validateEscapedPatterns(escaped);
134
+ return new RegExp(`\\b(${escaped.join('|')})\\b`, 'i');
135
+ })();
136
+ /**
137
+ * Check if a string contains any dangerous SQL patterns
138
+ *
139
+ * Uses case-insensitive matching and word boundary detection
140
+ * for most patterns to reduce false positives.
141
+ *
142
+ * Performance: O(1) Set lookup for special chars + O(1) pre-compiled regex
143
+ * for SQL keywords (previously O(n) with n=22 patterns).
144
+ *
145
+ * Defense in depth: Rejects inputs exceeding MAX_QUERY_INPUT_LENGTH
146
+ * to prevent performance issues with very long strings.
147
+ *
148
+ * Security: Uses String() to freeze input as primitive, preventing TOCTOU
149
+ * race conditions with Proxy objects or getter-modified values.
150
+ *
151
+ * @param input - The input string to check
152
+ * @returns true if dangerous pattern found, false otherwise
153
+ */
154
+ export function containsDangerousPattern(input) {
155
+ // Security: Freeze input as string primitive to prevent TOCTOU attacks
156
+ // where a Proxy or getter could return different values on each access
157
+ const frozenInput = String(input);
158
+ // Defense in depth: reject excessively long inputs
159
+ if (frozenInput.length > MAX_QUERY_INPUT_LENGTH) {
160
+ console.warn(`[SECURITY] Input length ${frozenInput.length} exceeds maximum ${MAX_QUERY_INPUT_LENGTH}`);
161
+ return true;
162
+ }
163
+ // O(1) check for special character patterns via string.includes
164
+ // Using index-based loop to avoid iterator object creation overhead
165
+ for (let i = 0; i < SPECIAL_CHAR_PATTERNS.length; i++) {
166
+ if (frozenInput.includes(SPECIAL_CHAR_PATTERNS[i])) {
167
+ return true;
168
+ }
169
+ }
170
+ // O(1) check for SQL keywords via pre-compiled combined regex
171
+ return SQL_KEYWORDS_REGEX.test(frozenInput);
172
+ }
173
+ /**
174
+ * Validate that user input does not contain dangerous patterns
175
+ *
176
+ * Throws an error if dangerous patterns are detected, including
177
+ * the field name for better error messages.
178
+ *
179
+ * @param input - The input string to validate
180
+ * @param fieldName - Name of the field being validated (for error messages)
181
+ * @throws Error if dangerous pattern is found
182
+ */
183
+ export function validateQueryInput(input, fieldName) {
184
+ if (containsDangerousPattern(input)) {
185
+ throw new Error(`Invalid ${fieldName}: contains potentially dangerous SQL pattern`);
186
+ }
187
+ }
188
+ /**
189
+ * Composable value sanitizer with configurable validation and escaping
190
+ *
191
+ * Provides flexible control over which operations to apply:
192
+ * - validate: Check for dangerous SQL patterns
193
+ * - escapeString: Escape for ClickHouse string context
194
+ * - escapeLike: Escape LIKE wildcards (%, _)
195
+ *
196
+ * @example
197
+ * // Validate only (no escaping)
198
+ * sanitizeValue(input, { escapeString: false, fieldName: 'search' });
199
+ *
200
+ * // Escape only (no validation) - use when input is already trusted
201
+ * sanitizeValue(input, { validate: false });
202
+ *
203
+ * // Full sanitization for LIKE clause
204
+ * sanitizeValue(input, { escapeLike: true, fieldName: 'search' });
205
+ *
206
+ * @param value - The value to sanitize
207
+ * @param options - Sanitization options
208
+ * @returns Sanitized string
209
+ * @throws Error if validation enabled and dangerous pattern found
210
+ */
211
+ export function sanitizeValue(value, options = {}) {
212
+ const { validate = true, escapeString = true, escapeLike = false, fieldName = 'value', allowEmpty = true, } = options;
213
+ // Step 0: Check for empty string if not allowed
214
+ if (!allowEmpty && value === '') {
215
+ throw new Error(`Invalid ${fieldName}: empty string not allowed`);
216
+ }
217
+ // Step 1: Validate if enabled
218
+ if (validate) {
219
+ validateQueryInput(value, fieldName);
220
+ }
221
+ // Step 2: Apply escaping pipeline
222
+ let result = value;
223
+ if (escapeLike) {
224
+ result = escapeClickHouseLike(result);
225
+ }
226
+ if (escapeString) {
227
+ result = escapeClickHouseString(result);
228
+ }
229
+ return result;
230
+ }
231
+ /**
232
+ * Escape and validate a string value for use in WHERE clause conditions
233
+ *
234
+ * @deprecated Use sanitizeValue() for more flexibility:
235
+ * sanitizeValue(value, { fieldName }) - same behavior
236
+ * sanitizeValue(value, { validate: false }) - escape only
237
+ *
238
+ * @param value - The value to escape
239
+ * @param fieldName - Name of the field (for error messages)
240
+ * @returns Escaped string safe for ClickHouse queries
241
+ * @throws Error if dangerous pattern is found
242
+ */
243
+ export function escapeFilterValueSafe(value, fieldName) {
244
+ return sanitizeValue(value, { fieldName });
245
+ }
246
+ /**
247
+ * Escape and validate a value for use in LIKE clauses
248
+ *
249
+ * @deprecated Use sanitizeValue() for more flexibility:
250
+ * sanitizeValue(value, { escapeLike: true, fieldName }) - same behavior
251
+ * sanitizeValue(value, { escapeLike: true, validate: false }) - escape only
252
+ *
253
+ * @param value - The value to escape
254
+ * @param fieldName - Name of the field (for error messages)
255
+ * @returns Escaped string safe for ClickHouse LIKE clauses
256
+ * @throws Error if dangerous pattern is found
257
+ */
258
+ export function escapeLikeValueSafe(value, fieldName) {
259
+ return sanitizeValue(value, { escapeLike: true, fieldName });
260
+ }
261
+ //# sourceMappingURL=query-sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-sanitizer.js","sourceRoot":"","sources":["../../src/lib/query-sanitizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Unit tests for query-sanitizer.ts
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=query-sanitizer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-sanitizer.test.d.ts","sourceRoot":"","sources":["../../src/lib/query-sanitizer.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}