@dotsetlabs/tollgate 0.1.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 (215) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +885 -0
  3. package/dist/analyzers/filesystem.d.ts +26 -0
  4. package/dist/analyzers/filesystem.d.ts.map +1 -0
  5. package/dist/analyzers/filesystem.js +284 -0
  6. package/dist/analyzers/filesystem.js.map +1 -0
  7. package/dist/analyzers/http.d.ts +90 -0
  8. package/dist/analyzers/http.d.ts.map +1 -0
  9. package/dist/analyzers/http.js +433 -0
  10. package/dist/analyzers/http.js.map +1 -0
  11. package/dist/analyzers/index.d.ts +101 -0
  12. package/dist/analyzers/index.d.ts.map +1 -0
  13. package/dist/analyzers/index.js +342 -0
  14. package/dist/analyzers/index.js.map +1 -0
  15. package/dist/analyzers/loader.d.ts +114 -0
  16. package/dist/analyzers/loader.d.ts.map +1 -0
  17. package/dist/analyzers/loader.js +184 -0
  18. package/dist/analyzers/loader.js.map +1 -0
  19. package/dist/analyzers/prompt-injection.d.ts +95 -0
  20. package/dist/analyzers/prompt-injection.d.ts.map +1 -0
  21. package/dist/analyzers/prompt-injection.js +725 -0
  22. package/dist/analyzers/prompt-injection.js.map +1 -0
  23. package/dist/analyzers/sdk.d.ts +230 -0
  24. package/dist/analyzers/sdk.d.ts.map +1 -0
  25. package/dist/analyzers/sdk.js +283 -0
  26. package/dist/analyzers/sdk.js.map +1 -0
  27. package/dist/analyzers/shell.d.ts +20 -0
  28. package/dist/analyzers/shell.d.ts.map +1 -0
  29. package/dist/analyzers/shell.js +297 -0
  30. package/dist/analyzers/shell.js.map +1 -0
  31. package/dist/analyzers/sql.d.ts +37 -0
  32. package/dist/analyzers/sql.d.ts.map +1 -0
  33. package/dist/analyzers/sql.js +455 -0
  34. package/dist/analyzers/sql.js.map +1 -0
  35. package/dist/analyzers/types.d.ts +117 -0
  36. package/dist/analyzers/types.d.ts.map +1 -0
  37. package/dist/analyzers/types.js +46 -0
  38. package/dist/analyzers/types.js.map +1 -0
  39. package/dist/approval/interactive.d.ts +72 -0
  40. package/dist/approval/interactive.d.ts.map +1 -0
  41. package/dist/approval/interactive.js +550 -0
  42. package/dist/approval/interactive.js.map +1 -0
  43. package/dist/approval/terminal.d.ts +59 -0
  44. package/dist/approval/terminal.d.ts.map +1 -0
  45. package/dist/approval/terminal.js +238 -0
  46. package/dist/approval/terminal.js.map +1 -0
  47. package/dist/approval/types.d.ts +66 -0
  48. package/dist/approval/types.d.ts.map +1 -0
  49. package/dist/approval/types.js +2 -0
  50. package/dist/approval/types.js.map +1 -0
  51. package/dist/audit/exporter.d.ts +138 -0
  52. package/dist/audit/exporter.d.ts.map +1 -0
  53. package/dist/audit/exporter.js +366 -0
  54. package/dist/audit/exporter.js.map +1 -0
  55. package/dist/audit/logger.d.ts +156 -0
  56. package/dist/audit/logger.d.ts.map +1 -0
  57. package/dist/audit/logger.js +406 -0
  58. package/dist/audit/logger.js.map +1 -0
  59. package/dist/audit/redaction.d.ts +110 -0
  60. package/dist/audit/redaction.d.ts.map +1 -0
  61. package/dist/audit/redaction.js +307 -0
  62. package/dist/audit/redaction.js.map +1 -0
  63. package/dist/audit/schema.d.ts +76 -0
  64. package/dist/audit/schema.d.ts.map +1 -0
  65. package/dist/audit/schema.js +122 -0
  66. package/dist/audit/schema.js.map +1 -0
  67. package/dist/cli/commands/doctor.d.ts +34 -0
  68. package/dist/cli/commands/doctor.d.ts.map +1 -0
  69. package/dist/cli/commands/doctor.js +431 -0
  70. package/dist/cli/commands/doctor.js.map +1 -0
  71. package/dist/cli/commands/export.d.ts +18 -0
  72. package/dist/cli/commands/export.d.ts.map +1 -0
  73. package/dist/cli/commands/export.js +63 -0
  74. package/dist/cli/commands/export.js.map +1 -0
  75. package/dist/cli/commands/init.d.ts +12 -0
  76. package/dist/cli/commands/init.d.ts.map +1 -0
  77. package/dist/cli/commands/init.js +102 -0
  78. package/dist/cli/commands/init.js.map +1 -0
  79. package/dist/cli/commands/logs.d.ts +11 -0
  80. package/dist/cli/commands/logs.d.ts.map +1 -0
  81. package/dist/cli/commands/logs.js +60 -0
  82. package/dist/cli/commands/logs.js.map +1 -0
  83. package/dist/cli/commands/scan.d.ts +29 -0
  84. package/dist/cli/commands/scan.d.ts.map +1 -0
  85. package/dist/cli/commands/scan.js +251 -0
  86. package/dist/cli/commands/scan.js.map +1 -0
  87. package/dist/cli/commands/serve.d.ts +26 -0
  88. package/dist/cli/commands/serve.d.ts.map +1 -0
  89. package/dist/cli/commands/serve.js +424 -0
  90. package/dist/cli/commands/serve.js.map +1 -0
  91. package/dist/cli/commands/start.d.ts +20 -0
  92. package/dist/cli/commands/start.d.ts.map +1 -0
  93. package/dist/cli/commands/start.js +82 -0
  94. package/dist/cli/commands/start.js.map +1 -0
  95. package/dist/cli/commands/stats.d.ts +10 -0
  96. package/dist/cli/commands/stats.d.ts.map +1 -0
  97. package/dist/cli/commands/stats.js +42 -0
  98. package/dist/cli/commands/stats.js.map +1 -0
  99. package/dist/cli/commands/templates.d.ts +26 -0
  100. package/dist/cli/commands/templates.d.ts.map +1 -0
  101. package/dist/cli/commands/templates.js +221 -0
  102. package/dist/cli/commands/templates.js.map +1 -0
  103. package/dist/cli/commands/validate.d.ts +12 -0
  104. package/dist/cli/commands/validate.d.ts.map +1 -0
  105. package/dist/cli/commands/validate.js +107 -0
  106. package/dist/cli/commands/validate.js.map +1 -0
  107. package/dist/cli/commands/wrap.d.ts +19 -0
  108. package/dist/cli/commands/wrap.d.ts.map +1 -0
  109. package/dist/cli/commands/wrap.js +59 -0
  110. package/dist/cli/commands/wrap.js.map +1 -0
  111. package/dist/cli/index.d.ts +17 -0
  112. package/dist/cli/index.d.ts.map +1 -0
  113. package/dist/cli/index.js +202 -0
  114. package/dist/cli/index.js.map +1 -0
  115. package/dist/cli/ui.d.ts +139 -0
  116. package/dist/cli/ui.d.ts.map +1 -0
  117. package/dist/cli/ui.js +271 -0
  118. package/dist/cli/ui.js.map +1 -0
  119. package/dist/constants.d.ts +33 -0
  120. package/dist/constants.d.ts.map +1 -0
  121. package/dist/constants.js +54 -0
  122. package/dist/constants.js.map +1 -0
  123. package/dist/errors.d.ts +28 -0
  124. package/dist/errors.d.ts.map +1 -0
  125. package/dist/errors.js +37 -0
  126. package/dist/errors.js.map +1 -0
  127. package/dist/index.d.ts +49 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +82 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/orchestrator/index.d.ts +11 -0
  132. package/dist/orchestrator/index.d.ts.map +1 -0
  133. package/dist/orchestrator/index.js +10 -0
  134. package/dist/orchestrator/index.js.map +1 -0
  135. package/dist/orchestrator/manager.d.ts +127 -0
  136. package/dist/orchestrator/manager.d.ts.map +1 -0
  137. package/dist/orchestrator/manager.js +498 -0
  138. package/dist/orchestrator/manager.js.map +1 -0
  139. package/dist/orchestrator/types.d.ts +141 -0
  140. package/dist/orchestrator/types.d.ts.map +1 -0
  141. package/dist/orchestrator/types.js +9 -0
  142. package/dist/orchestrator/types.js.map +1 -0
  143. package/dist/policy/engine.d.ts +55 -0
  144. package/dist/policy/engine.d.ts.map +1 -0
  145. package/dist/policy/engine.js +288 -0
  146. package/dist/policy/engine.js.map +1 -0
  147. package/dist/policy/natural-language.d.ts +141 -0
  148. package/dist/policy/natural-language.d.ts.map +1 -0
  149. package/dist/policy/natural-language.js +552 -0
  150. package/dist/policy/natural-language.js.map +1 -0
  151. package/dist/policy/parser.d.ts +141 -0
  152. package/dist/policy/parser.d.ts.map +1 -0
  153. package/dist/policy/parser.js +314 -0
  154. package/dist/policy/parser.js.map +1 -0
  155. package/dist/policy/types.d.ts +428 -0
  156. package/dist/policy/types.d.ts.map +1 -0
  157. package/dist/policy/types.js +32 -0
  158. package/dist/policy/types.js.map +1 -0
  159. package/dist/policy/validator.d.ts +72 -0
  160. package/dist/policy/validator.d.ts.map +1 -0
  161. package/dist/policy/validator.js +453 -0
  162. package/dist/policy/validator.js.map +1 -0
  163. package/dist/proxy/bridge.d.ts +84 -0
  164. package/dist/proxy/bridge.d.ts.map +1 -0
  165. package/dist/proxy/bridge.js +217 -0
  166. package/dist/proxy/bridge.js.map +1 -0
  167. package/dist/proxy/client.d.ts +130 -0
  168. package/dist/proxy/client.d.ts.map +1 -0
  169. package/dist/proxy/client.js +290 -0
  170. package/dist/proxy/client.js.map +1 -0
  171. package/dist/proxy/server.d.ts +111 -0
  172. package/dist/proxy/server.d.ts.map +1 -0
  173. package/dist/proxy/server.js +444 -0
  174. package/dist/proxy/server.js.map +1 -0
  175. package/dist/scanner.d.ts +91 -0
  176. package/dist/scanner.d.ts.map +1 -0
  177. package/dist/scanner.js +373 -0
  178. package/dist/scanner.js.map +1 -0
  179. package/dist/session/index.d.ts +32 -0
  180. package/dist/session/index.d.ts.map +1 -0
  181. package/dist/session/index.js +31 -0
  182. package/dist/session/index.js.map +1 -0
  183. package/dist/session/manager.d.ts +166 -0
  184. package/dist/session/manager.d.ts.map +1 -0
  185. package/dist/session/manager.js +454 -0
  186. package/dist/session/manager.js.map +1 -0
  187. package/dist/session/sqlite-store.d.ts +54 -0
  188. package/dist/session/sqlite-store.d.ts.map +1 -0
  189. package/dist/session/sqlite-store.js +209 -0
  190. package/dist/session/sqlite-store.js.map +1 -0
  191. package/dist/session/types.d.ts +179 -0
  192. package/dist/session/types.d.ts.map +1 -0
  193. package/dist/session/types.js +38 -0
  194. package/dist/session/types.js.map +1 -0
  195. package/dist/templates.d.ts +64 -0
  196. package/dist/templates.d.ts.map +1 -0
  197. package/dist/templates.js +451 -0
  198. package/dist/templates.js.map +1 -0
  199. package/dist/utils/config.d.ts +57 -0
  200. package/dist/utils/config.d.ts.map +1 -0
  201. package/dist/utils/config.js +104 -0
  202. package/dist/utils/config.js.map +1 -0
  203. package/dist/utils/errors.d.ts +18 -0
  204. package/dist/utils/errors.d.ts.map +1 -0
  205. package/dist/utils/errors.js +35 -0
  206. package/dist/utils/errors.js.map +1 -0
  207. package/dist/utils/logger.d.ts +144 -0
  208. package/dist/utils/logger.d.ts.map +1 -0
  209. package/dist/utils/logger.js +300 -0
  210. package/dist/utils/logger.js.map +1 -0
  211. package/dist/wizard.d.ts +68 -0
  212. package/dist/wizard.d.ts.map +1 -0
  213. package/dist/wizard.js +395 -0
  214. package/dist/wizard.js.map +1 -0
  215. package/package.json +99 -0
@@ -0,0 +1,433 @@
1
+ /**
2
+ * HTTP/API Request Analyzer
3
+ *
4
+ * Classifies HTTP requests by risk level based on:
5
+ * - HTTP method (GET = read, POST/PUT = write, DELETE = destructive)
6
+ * - Target host (internal IPs, localhost, cloud metadata = dangerous)
7
+ * - Sensitive headers (Authorization, Cookie, API keys)
8
+ * - Dangerous protocols (file://, ftp://)
9
+ *
10
+ * This analyzer is designed to prevent:
11
+ * - Server-Side Request Forgery (SSRF) attacks
12
+ * - Unauthorized access to internal services
13
+ * - Credential leakage
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const analyzer = new HttpAnalyzer();
18
+ *
19
+ * // Analyze a URL string
20
+ * analyzer.analyze('https://api.example.com/users');
21
+ * // → { risk: 'read', reason: 'GET request to external host' }
22
+ *
23
+ * // Analyze a JSON-encoded request
24
+ * analyzer.analyze(JSON.stringify({
25
+ * url: 'https://api.example.com/users',
26
+ * method: 'POST',
27
+ * headers: { 'Content-Type': 'application/json' }
28
+ * }));
29
+ * // → { risk: 'write', reason: 'POST request to external host' }
30
+ *
31
+ * // Dangerous request detection
32
+ * analyzer.analyze('http://169.254.169.254/latest/meta-data/');
33
+ * // → { risk: 'dangerous', reason: 'SSRF: AWS metadata endpoint' }
34
+ * ```
35
+ */
36
+ // ============================================================================
37
+ // HTTP Analyzer Implementation
38
+ // ============================================================================
39
+ /**
40
+ * HTTP/API Request Analyzer
41
+ *
42
+ * Analyzes HTTP requests and URLs to determine risk levels.
43
+ * Prevents SSRF attacks, credential leakage, and unauthorized access.
44
+ */
45
+ export class HttpAnalyzer {
46
+ name = 'http';
47
+ // -------------------------------------------------------------------------
48
+ // SSRF Prevention Patterns
49
+ // -------------------------------------------------------------------------
50
+ /**
51
+ * Cloud metadata endpoints - critical SSRF targets
52
+ */
53
+ METADATA_ENDPOINTS = [
54
+ {
55
+ pattern: /169\.254\.169\.254/,
56
+ risk: 'dangerous',
57
+ reason: 'SSRF: AWS/Azure metadata endpoint detected',
58
+ category: 'cloud_metadata',
59
+ },
60
+ {
61
+ pattern: /metadata\.google\.internal/i,
62
+ risk: 'dangerous',
63
+ reason: 'SSRF: GCP metadata endpoint detected',
64
+ category: 'cloud_metadata',
65
+ },
66
+ {
67
+ pattern: /100\.100\.100\.200/,
68
+ risk: 'dangerous',
69
+ reason: 'SSRF: Alibaba Cloud metadata endpoint detected',
70
+ category: 'cloud_metadata',
71
+ },
72
+ {
73
+ pattern: /169\.254\.170\.2/,
74
+ risk: 'dangerous',
75
+ reason: 'SSRF: AWS ECS container credentials endpoint',
76
+ category: 'cloud_metadata',
77
+ },
78
+ ];
79
+ /**
80
+ * Internal/private IP ranges - SSRF and network access control
81
+ */
82
+ INTERNAL_IP_PATTERNS = [
83
+ // Localhost variants
84
+ {
85
+ pattern: /^https?:\/\/localhost(:[0-9]+)?/i,
86
+ risk: 'dangerous',
87
+ reason: 'SSRF: Request to localhost',
88
+ category: 'internal_network',
89
+ },
90
+ {
91
+ pattern: /^https?:\/\/127\.[0-9]+\.[0-9]+\.[0-9]+/,
92
+ risk: 'dangerous',
93
+ reason: 'SSRF: Request to loopback address (127.x.x.x)',
94
+ category: 'internal_network',
95
+ },
96
+ {
97
+ pattern: /^https?:\/\/\[::1\]/,
98
+ risk: 'dangerous',
99
+ reason: 'SSRF: Request to IPv6 loopback',
100
+ category: 'internal_network',
101
+ },
102
+ // Full IPv6 loopback notation
103
+ {
104
+ pattern: /^https?:\/\/\[0:0:0:0:0:0:0:1\]/,
105
+ risk: 'dangerous',
106
+ reason: 'SSRF: Request to IPv6 loopback (expanded)',
107
+ category: 'internal_network',
108
+ },
109
+ // Mixed notation IPv6 loopback
110
+ {
111
+ pattern: /^https?:\/\/\[::ffff:127\.\d{1,3}\.\d{1,3}\.\d{1,3}\]/,
112
+ risk: 'dangerous',
113
+ reason: 'SSRF: Request to IPv4-mapped IPv6 loopback',
114
+ category: 'internal_network',
115
+ },
116
+ {
117
+ pattern: /^https?:\/\/0\.0\.0\.0/,
118
+ risk: 'dangerous',
119
+ reason: 'SSRF: Request to 0.0.0.0',
120
+ category: 'internal_network',
121
+ },
122
+ // Private IP ranges (RFC 1918)
123
+ {
124
+ pattern: /^https?:\/\/10\.[0-9]+\.[0-9]+\.[0-9]+/,
125
+ risk: 'dangerous',
126
+ reason: 'SSRF: Request to private IP range (10.x.x.x)',
127
+ category: 'internal_network',
128
+ },
129
+ {
130
+ pattern: /^https?:\/\/172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]+\.[0-9]+/,
131
+ risk: 'dangerous',
132
+ reason: 'SSRF: Request to private IP range (172.16-31.x.x)',
133
+ category: 'internal_network',
134
+ },
135
+ {
136
+ pattern: /^https?:\/\/192\.168\.[0-9]+\.[0-9]+/,
137
+ risk: 'dangerous',
138
+ reason: 'SSRF: Request to private IP range (192.168.x.x)',
139
+ category: 'internal_network',
140
+ },
141
+ // Link-local
142
+ {
143
+ pattern: /^https?:\/\/169\.254\.[0-9]+\.[0-9]+/,
144
+ risk: 'dangerous',
145
+ reason: 'SSRF: Request to link-local address',
146
+ category: 'internal_network',
147
+ },
148
+ // Octal IP notation (e.g., 0177.0.0.1 = 127.0.0.1)
149
+ {
150
+ pattern: /^https?:\/\/0[0-7]+\./,
151
+ risk: 'dangerous',
152
+ reason: 'SSRF: Octal IP notation detected (possible bypass attempt)',
153
+ category: 'internal_network',
154
+ },
155
+ // Hex IP notation (e.g., 0x7f.0x0.0x0.0x1 = 127.0.0.1)
156
+ {
157
+ pattern: /^https?:\/\/0x[0-9a-fA-F]+/,
158
+ risk: 'dangerous',
159
+ reason: 'SSRF: Hexadecimal IP notation detected (possible bypass attempt)',
160
+ category: 'internal_network',
161
+ },
162
+ // Decimal encoded IP (e.g., 2130706433 = 127.0.0.1)
163
+ {
164
+ pattern: /^https?:\/\/\d{8,10}(\/|:|$)/,
165
+ risk: 'dangerous',
166
+ reason: 'SSRF: Decimal encoded IP detected (possible bypass attempt)',
167
+ category: 'internal_network',
168
+ },
169
+ ];
170
+ // -------------------------------------------------------------------------
171
+ // Dangerous Protocol Patterns
172
+ // -------------------------------------------------------------------------
173
+ DANGEROUS_PROTOCOLS = [
174
+ {
175
+ pattern: /^file:\/\//i,
176
+ risk: 'dangerous',
177
+ reason: 'Dangerous protocol: file:// - Local file access attempt',
178
+ category: 'dangerous_protocol',
179
+ },
180
+ {
181
+ pattern: /^ftp:\/\//i,
182
+ risk: 'destructive',
183
+ reason: 'Insecure protocol: ftp:// - Unencrypted file transfer',
184
+ category: 'dangerous_protocol',
185
+ },
186
+ {
187
+ pattern: /^gopher:\/\//i,
188
+ risk: 'dangerous',
189
+ reason: 'Dangerous protocol: gopher:// - Often used in SSRF attacks',
190
+ category: 'dangerous_protocol',
191
+ },
192
+ {
193
+ pattern: /^dict:\/\//i,
194
+ risk: 'dangerous',
195
+ reason: 'Dangerous protocol: dict:// - Often used in SSRF attacks',
196
+ category: 'dangerous_protocol',
197
+ },
198
+ {
199
+ pattern: /^ldap:\/\//i,
200
+ risk: 'dangerous',
201
+ reason: 'Dangerous protocol: ldap:// - Directory access',
202
+ category: 'dangerous_protocol',
203
+ },
204
+ ];
205
+ // -------------------------------------------------------------------------
206
+ // Sensitive Header Patterns
207
+ // -------------------------------------------------------------------------
208
+ /**
209
+ * Headers that indicate sensitive operations.
210
+ * These don't block the request but elevate risk level.
211
+ */
212
+ SENSITIVE_HEADERS = [
213
+ 'authorization',
214
+ 'x-api-key',
215
+ 'x-auth-token',
216
+ 'cookie',
217
+ 'x-csrf-token',
218
+ 'x-xsrf-token',
219
+ 'proxy-authorization',
220
+ ];
221
+ // -------------------------------------------------------------------------
222
+ // HTTP Method Risk Classification
223
+ // -------------------------------------------------------------------------
224
+ /**
225
+ * Maps HTTP methods to their base risk level.
226
+ */
227
+ METHOD_RISK = {
228
+ // Safe methods - no side effects
229
+ OPTIONS: 'safe',
230
+ HEAD: 'safe',
231
+ TRACE: 'safe',
232
+ // Read methods
233
+ GET: 'read',
234
+ // Write methods
235
+ POST: 'write',
236
+ PUT: 'write',
237
+ PATCH: 'write',
238
+ // Destructive methods
239
+ DELETE: 'destructive',
240
+ };
241
+ // -------------------------------------------------------------------------
242
+ // Main Analysis Method
243
+ // -------------------------------------------------------------------------
244
+ analyze(input, context) {
245
+ // Parse the input (could be URL string or JSON object)
246
+ const request = this.parseInput(input, context);
247
+ if (!request.url) {
248
+ return {
249
+ risk: 'write',
250
+ reason: 'Could not parse URL from input',
251
+ };
252
+ }
253
+ // Check for dangerous protocols first
254
+ for (const { pattern, risk, reason, category } of this.DANGEROUS_PROTOCOLS) {
255
+ if (pattern.test(request.url)) {
256
+ return {
257
+ risk,
258
+ reason,
259
+ triggers: [category],
260
+ metadata: { category, url: this.sanitizeUrl(request.url) },
261
+ };
262
+ }
263
+ }
264
+ // Check for cloud metadata endpoints (highest priority SSRF targets)
265
+ for (const { pattern, risk, reason, category } of this.METADATA_ENDPOINTS) {
266
+ if (pattern.test(request.url)) {
267
+ return {
268
+ risk,
269
+ reason,
270
+ triggers: [category],
271
+ metadata: { category, url: this.sanitizeUrl(request.url) },
272
+ };
273
+ }
274
+ }
275
+ // Check for internal/private IPs
276
+ for (const { pattern, risk, reason, category } of this.INTERNAL_IP_PATTERNS) {
277
+ if (pattern.test(request.url)) {
278
+ return {
279
+ risk,
280
+ reason,
281
+ triggers: [category],
282
+ metadata: { category, url: this.sanitizeUrl(request.url) },
283
+ };
284
+ }
285
+ }
286
+ // Get base risk from HTTP method
287
+ const method = request.method.toUpperCase();
288
+ let baseRisk = this.METHOD_RISK[method] ?? 'write';
289
+ const triggers = [];
290
+ // Check for sensitive headers (elevates risk)
291
+ const sensitiveHeaders = this.detectSensitiveHeaders(request.headers);
292
+ if (sensitiveHeaders.length > 0) {
293
+ triggers.push('sensitive_headers');
294
+ // Elevate risk if we're sending credentials
295
+ if (baseRisk === 'safe') {
296
+ baseRisk = 'read';
297
+ }
298
+ else if (baseRisk === 'read') {
299
+ baseRisk = 'write';
300
+ }
301
+ }
302
+ // Build reason string
303
+ const hostInfo = this.extractHost(request.url);
304
+ let reason = `${method} request`;
305
+ if (hostInfo) {
306
+ reason += ` to ${hostInfo}`;
307
+ }
308
+ if (sensitiveHeaders.length > 0) {
309
+ reason += ` (includes ${sensitiveHeaders.join(', ')})`;
310
+ }
311
+ return {
312
+ risk: baseRisk,
313
+ reason,
314
+ triggers: triggers.length > 0 ? triggers : undefined,
315
+ metadata: {
316
+ method,
317
+ host: hostInfo,
318
+ hasSensitiveHeaders: sensitiveHeaders.length > 0,
319
+ },
320
+ };
321
+ }
322
+ // -------------------------------------------------------------------------
323
+ // Helper Methods
324
+ // -------------------------------------------------------------------------
325
+ /**
326
+ * Parses input into a structured request object.
327
+ * Accepts either a URL string or a JSON-encoded request object.
328
+ */
329
+ parseInput(input, context) {
330
+ const trimmed = input.trim();
331
+ // Try to parse as JSON first
332
+ if (trimmed.startsWith('{')) {
333
+ try {
334
+ const parsed = JSON.parse(trimmed);
335
+ return {
336
+ url: String(parsed.url ?? parsed.uri ?? ''),
337
+ method: String(parsed.method ?? 'GET').toUpperCase(),
338
+ headers: this.normalizeHeaders(parsed.headers),
339
+ body: parsed.body ? String(parsed.body) : undefined,
340
+ };
341
+ }
342
+ catch {
343
+ // Not valid JSON, treat as URL
344
+ }
345
+ }
346
+ // Infer method from context if available
347
+ const method = this.inferMethod(context?.tool);
348
+ // Treat as URL string
349
+ return {
350
+ url: trimmed,
351
+ method,
352
+ headers: {},
353
+ };
354
+ }
355
+ /**
356
+ * Normalizes headers object to lowercase keys.
357
+ */
358
+ normalizeHeaders(headers) {
359
+ if (!headers || typeof headers !== 'object') {
360
+ return {};
361
+ }
362
+ const normalized = {};
363
+ for (const [key, value] of Object.entries(headers)) {
364
+ normalized[key.toLowerCase()] = String(value);
365
+ }
366
+ return normalized;
367
+ }
368
+ /**
369
+ * Infers HTTP method from tool name.
370
+ */
371
+ inferMethod(tool) {
372
+ if (!tool)
373
+ return 'GET';
374
+ const lowerTool = tool.toLowerCase();
375
+ if (lowerTool.includes('delete') || lowerTool.includes('remove')) {
376
+ return 'DELETE';
377
+ }
378
+ if (lowerTool.includes('post') || lowerTool.includes('create') || lowerTool.includes('send')) {
379
+ return 'POST';
380
+ }
381
+ if (lowerTool.includes('put') || lowerTool.includes('update') || lowerTool.includes('replace')) {
382
+ return 'PUT';
383
+ }
384
+ if (lowerTool.includes('patch') || lowerTool.includes('modify')) {
385
+ return 'PATCH';
386
+ }
387
+ return 'GET';
388
+ }
389
+ /**
390
+ * Detects sensitive headers in the request.
391
+ */
392
+ detectSensitiveHeaders(headers) {
393
+ const found = [];
394
+ for (const headerName of Object.keys(headers)) {
395
+ const lowerName = headerName.toLowerCase();
396
+ if (this.SENSITIVE_HEADERS.includes(lowerName)) {
397
+ found.push(headerName);
398
+ }
399
+ }
400
+ return found;
401
+ }
402
+ /**
403
+ * Extracts host from URL for display.
404
+ */
405
+ extractHost(url) {
406
+ try {
407
+ const parsed = new URL(url);
408
+ return parsed.host;
409
+ }
410
+ catch {
411
+ // Try to extract host with regex for malformed URLs
412
+ const match = url.match(/^https?:\/\/([^/:]+)/i);
413
+ return match?.[1] ?? null;
414
+ }
415
+ }
416
+ /**
417
+ * Sanitizes URL for safe logging (removes credentials).
418
+ */
419
+ sanitizeUrl(url) {
420
+ try {
421
+ const parsed = new URL(url);
422
+ // Remove username and password
423
+ parsed.username = '';
424
+ parsed.password = '';
425
+ return parsed.toString();
426
+ }
427
+ catch {
428
+ // Return as-is if parsing fails
429
+ return url;
430
+ }
431
+ }
432
+ }
433
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/analyzers/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ export * from './types.js';
2
+ export { SqlAnalyzer } from './sql.js';
3
+ export { FilesystemAnalyzer } from './filesystem.js';
4
+ export { ShellAnalyzer } from './shell.js';
5
+ export { HttpAnalyzer } from './http.js';
6
+ export { PromptInjectionAnalyzer } from './prompt-injection.js';
7
+ export { defineAnalyzer, defineAsyncAnalyzer, createPatternAnalyzer, isCustomAnalyzer, isAsyncAnalyzer, type AnalyzerDefinition, type CustomAnalyzer, } from './sdk.js';
8
+ export { loadAnalyzer, loadAnalyzers, loadAnalyzersFromConfig, initializeAnalyzers, cleanupAnalyzers, unloadAnalyzer, listCustomAnalyzers, resolveAnalyzerPath, type LoadResult, type LoaderOptions, } from './loader.js';
9
+ import type { ContentAnalyzer, AnalysisResult, AnalyzerContext, RiskMapping, RiskLevel } from './types.js';
10
+ /** Concrete policy actions (excludes 'smart' which is resolved to one of these) */
11
+ export type ConcreteAction = 'allow' | 'deny' | 'prompt';
12
+ /**
13
+ * Registry of all available analyzers
14
+ */
15
+ export declare class AnalyzerRegistry {
16
+ private analyzers;
17
+ private customAnalyzers;
18
+ private timeoutMs;
19
+ constructor(timeoutMs?: number);
20
+ /**
21
+ * Register a new analyzer
22
+ */
23
+ register(analyzer: ContentAnalyzer): void;
24
+ /**
25
+ * Unregister an analyzer by name
26
+ */
27
+ unregister(name: string): boolean;
28
+ /**
29
+ * Get an analyzer by name
30
+ */
31
+ get(name: string): ContentAnalyzer | undefined;
32
+ /**
33
+ * Check if an analyzer exists
34
+ */
35
+ has(name: string): boolean;
36
+ /**
37
+ * List all registered analyzer names
38
+ */
39
+ list(): string[];
40
+ /**
41
+ * List only custom (non-built-in) analyzer names
42
+ */
43
+ listCustom(): string[];
44
+ /**
45
+ * Set the timeout for analyzer operations.
46
+ */
47
+ setTimeout(timeoutMs: number): void;
48
+ /**
49
+ * Get the current timeout for analyzer operations.
50
+ */
51
+ getTimeout(): number;
52
+ /**
53
+ * Analyze content with a specific analyzer
54
+ */
55
+ analyze(analyzerName: string, content: string, context?: AnalyzerContext): AnalysisResult;
56
+ /**
57
+ * Analyze content with a specific analyzer with timeout protection.
58
+ * Returns a 'dangerous' result if the analysis times out.
59
+ *
60
+ * @param analyzerName - Name of the analyzer to use
61
+ * @param content - Content to analyze
62
+ * @param context - Optional analyzer context
63
+ * @param timeoutMs - Optional timeout override (defaults to registry timeout)
64
+ */
65
+ analyzeWithTimeout(analyzerName: string, content: string, context?: AnalyzerContext, timeoutMs?: number): Promise<AnalysisResult>;
66
+ /**
67
+ * Analyze content with a specific analyzer (async version)
68
+ * Supports both sync and async analyzers
69
+ */
70
+ analyzeAsync(analyzerName: string, content: string, context?: AnalyzerContext): Promise<AnalysisResult>;
71
+ /**
72
+ * Initialize all custom analyzers
73
+ */
74
+ initializeCustomAnalyzers(): Promise<void>;
75
+ /**
76
+ * Cleanup all custom analyzers
77
+ */
78
+ cleanupCustomAnalyzers(): Promise<void>;
79
+ /**
80
+ * Get custom content extraction function for an analyzer
81
+ */
82
+ getContentExtractor(analyzerName: string): ((tool: string, args: Record<string, unknown>) => string | null) | undefined;
83
+ }
84
+ /**
85
+ * Convert a risk level to a concrete policy action using a risk mapping
86
+ */
87
+ export declare function riskToAction(risk: RiskLevel, mapping?: RiskMapping): ConcreteAction;
88
+ /**
89
+ * Global analyzer registry instance
90
+ */
91
+ export declare const analyzerRegistry: AnalyzerRegistry;
92
+ /**
93
+ * Helper to determine which analyzer to use based on tool/server
94
+ */
95
+ export declare function inferAnalyzer(server: string, tool: string, _args?: Record<string, unknown>): string | null;
96
+ /**
97
+ * Extract the content to analyze from tool arguments.
98
+ * First checks if the analyzer has a custom extractor, then falls back to built-in extraction.
99
+ */
100
+ export declare function extractAnalyzableContent(analyzerName: string, tool: string, args: Record<string, unknown>): string | null;
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyzers/index.ts"],"names":[],"mappings":"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"}