@getaegis/cli 0.8.0 → 0.8.1

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 (210) hide show
  1. package/README.md +5 -0
  2. package/dist/agent/agent.d.ts +98 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.js +212 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/index.d.ts +3 -0
  7. package/dist/agent/index.d.ts.map +1 -0
  8. package/dist/agent/index.js +2 -0
  9. package/dist/agent/index.js.map +1 -0
  10. package/dist/cli/auth.d.ts +19 -0
  11. package/dist/cli/auth.d.ts.map +1 -0
  12. package/dist/cli/auth.js +44 -0
  13. package/dist/cli/auth.js.map +1 -0
  14. package/dist/cli/commands/agent.d.ts +6 -0
  15. package/dist/cli/commands/agent.d.ts.map +1 -0
  16. package/dist/cli/commands/agent.js +241 -0
  17. package/dist/cli/commands/agent.js.map +1 -0
  18. package/dist/cli/commands/config.d.ts +6 -0
  19. package/dist/cli/commands/config.d.ts.map +1 -0
  20. package/dist/cli/commands/config.js +125 -0
  21. package/dist/cli/commands/config.js.map +1 -0
  22. package/dist/cli/commands/dashboard.d.ts +6 -0
  23. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  24. package/dist/cli/commands/dashboard.js +189 -0
  25. package/dist/cli/commands/dashboard.js.map +1 -0
  26. package/dist/cli/commands/doctor.d.ts +6 -0
  27. package/dist/cli/commands/doctor.d.ts.map +1 -0
  28. package/dist/cli/commands/doctor.js +39 -0
  29. package/dist/cli/commands/doctor.js.map +1 -0
  30. package/dist/cli/commands/gate.d.ts +6 -0
  31. package/dist/cli/commands/gate.d.ts.map +1 -0
  32. package/dist/cli/commands/gate.js +196 -0
  33. package/dist/cli/commands/gate.js.map +1 -0
  34. package/dist/cli/commands/init.d.ts +6 -0
  35. package/dist/cli/commands/init.d.ts.map +1 -0
  36. package/dist/cli/commands/init.js +109 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/ledger.d.ts +6 -0
  39. package/dist/cli/commands/ledger.d.ts.map +1 -0
  40. package/dist/cli/commands/ledger.js +140 -0
  41. package/dist/cli/commands/ledger.js.map +1 -0
  42. package/dist/cli/commands/mcp.d.ts +6 -0
  43. package/dist/cli/commands/mcp.d.ts.map +1 -0
  44. package/dist/cli/commands/mcp.js +224 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/policy.d.ts +6 -0
  47. package/dist/cli/commands/policy.d.ts.map +1 -0
  48. package/dist/cli/commands/policy.js +126 -0
  49. package/dist/cli/commands/policy.js.map +1 -0
  50. package/dist/cli/commands/user.d.ts +6 -0
  51. package/dist/cli/commands/user.d.ts.map +1 -0
  52. package/dist/cli/commands/user.js +150 -0
  53. package/dist/cli/commands/user.js.map +1 -0
  54. package/dist/cli/commands/vault-manager.d.ts +6 -0
  55. package/dist/cli/commands/vault-manager.d.ts.map +1 -0
  56. package/dist/cli/commands/vault-manager.js +240 -0
  57. package/dist/cli/commands/vault-manager.js.map +1 -0
  58. package/dist/cli/commands/vault.d.ts +6 -0
  59. package/dist/cli/commands/vault.d.ts.map +1 -0
  60. package/dist/cli/commands/vault.js +241 -0
  61. package/dist/cli/commands/vault.js.map +1 -0
  62. package/dist/cli/commands/webhook.d.ts +6 -0
  63. package/dist/cli/commands/webhook.d.ts.map +1 -0
  64. package/dist/cli/commands/webhook.js +151 -0
  65. package/dist/cli/commands/webhook.js.map +1 -0
  66. package/dist/cli/helpers.d.ts +12 -0
  67. package/dist/cli/helpers.d.ts.map +1 -0
  68. package/dist/cli/helpers.js +61 -0
  69. package/dist/cli/helpers.js.map +1 -0
  70. package/dist/cli/index.d.ts +17 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +17 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/validation.d.ts +37 -0
  75. package/dist/cli/validation.d.ts.map +1 -0
  76. package/dist/cli/validation.js +104 -0
  77. package/dist/cli/validation.js.map +1 -0
  78. package/dist/cli.d.ts +3 -0
  79. package/dist/cli.d.ts.map +1 -0
  80. package/dist/cli.js +30 -0
  81. package/dist/cli.js.map +1 -0
  82. package/dist/config.d.ts +108 -0
  83. package/dist/config.d.ts.map +1 -0
  84. package/dist/config.js +355 -0
  85. package/dist/config.js.map +1 -0
  86. package/dist/dashboard/dashboard-server.d.ts +95 -0
  87. package/dist/dashboard/dashboard-server.d.ts.map +1 -0
  88. package/dist/dashboard/dashboard-server.js +329 -0
  89. package/dist/dashboard/dashboard-server.js.map +1 -0
  90. package/dist/dashboard/index.d.ts +3 -0
  91. package/dist/dashboard/index.d.ts.map +1 -0
  92. package/dist/dashboard/index.js +2 -0
  93. package/dist/dashboard/index.js.map +1 -0
  94. package/dist/dashboard/public/assets/index-CpMruPNh.css +1 -0
  95. package/dist/dashboard/public/assets/index-DkHiw9_f.js +148 -0
  96. package/dist/dashboard/public/favicon.svg +6 -0
  97. package/dist/dashboard/public/index.html +14 -0
  98. package/dist/db.d.ts +15 -0
  99. package/dist/db.d.ts.map +1 -0
  100. package/dist/db.js +190 -0
  101. package/dist/db.js.map +1 -0
  102. package/dist/doctor.d.ts +37 -0
  103. package/dist/doctor.d.ts.map +1 -0
  104. package/dist/doctor.js +196 -0
  105. package/dist/doctor.js.map +1 -0
  106. package/dist/gate/body-inspector.d.ts +31 -0
  107. package/dist/gate/body-inspector.d.ts.map +1 -0
  108. package/dist/gate/body-inspector.js +193 -0
  109. package/dist/gate/body-inspector.js.map +1 -0
  110. package/dist/gate/gate.d.ts +168 -0
  111. package/dist/gate/gate.d.ts.map +1 -0
  112. package/dist/gate/gate.js +1016 -0
  113. package/dist/gate/gate.js.map +1 -0
  114. package/dist/gate/index.d.ts +7 -0
  115. package/dist/gate/index.d.ts.map +1 -0
  116. package/dist/gate/index.js +4 -0
  117. package/dist/gate/index.js.map +1 -0
  118. package/dist/gate/rate-limiter.d.ts +59 -0
  119. package/dist/gate/rate-limiter.d.ts.map +1 -0
  120. package/dist/gate/rate-limiter.js +120 -0
  121. package/dist/gate/rate-limiter.js.map +1 -0
  122. package/dist/index.d.ts +26 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +16 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/ledger/index.d.ts +3 -0
  127. package/dist/ledger/index.d.ts.map +1 -0
  128. package/dist/ledger/index.js +2 -0
  129. package/dist/ledger/index.js.map +1 -0
  130. package/dist/ledger/ledger.d.ts +98 -0
  131. package/dist/ledger/ledger.d.ts.map +1 -0
  132. package/dist/ledger/ledger.js +145 -0
  133. package/dist/ledger/ledger.js.map +1 -0
  134. package/dist/logger/index.d.ts +3 -0
  135. package/dist/logger/index.d.ts.map +1 -0
  136. package/dist/logger/index.js +2 -0
  137. package/dist/logger/index.js.map +1 -0
  138. package/dist/logger/logger.d.ts +58 -0
  139. package/dist/logger/logger.d.ts.map +1 -0
  140. package/dist/logger/logger.js +201 -0
  141. package/dist/logger/logger.js.map +1 -0
  142. package/dist/mcp/index.d.ts +3 -0
  143. package/dist/mcp/index.d.ts.map +1 -0
  144. package/dist/mcp/index.js +2 -0
  145. package/dist/mcp/index.js.map +1 -0
  146. package/dist/mcp/mcp-server.d.ts +130 -0
  147. package/dist/mcp/mcp-server.d.ts.map +1 -0
  148. package/dist/mcp/mcp-server.js +775 -0
  149. package/dist/mcp/mcp-server.js.map +1 -0
  150. package/dist/metrics/index.d.ts +3 -0
  151. package/dist/metrics/index.d.ts.map +1 -0
  152. package/dist/metrics/index.js +2 -0
  153. package/dist/metrics/index.js.map +1 -0
  154. package/dist/metrics/metrics.d.ts +88 -0
  155. package/dist/metrics/metrics.d.ts.map +1 -0
  156. package/dist/metrics/metrics.js +179 -0
  157. package/dist/metrics/metrics.js.map +1 -0
  158. package/dist/policy/index.d.ts +3 -0
  159. package/dist/policy/index.d.ts.map +1 -0
  160. package/dist/policy/index.js +2 -0
  161. package/dist/policy/index.js.map +1 -0
  162. package/dist/policy/policy.d.ts +119 -0
  163. package/dist/policy/policy.d.ts.map +1 -0
  164. package/dist/policy/policy.js +426 -0
  165. package/dist/policy/policy.js.map +1 -0
  166. package/dist/user/index.d.ts +3 -0
  167. package/dist/user/index.d.ts.map +1 -0
  168. package/dist/user/index.js +2 -0
  169. package/dist/user/index.js.map +1 -0
  170. package/dist/user/user.d.ts +102 -0
  171. package/dist/user/user.d.ts.map +1 -0
  172. package/dist/user/user.js +216 -0
  173. package/dist/user/user.js.map +1 -0
  174. package/dist/vault/crypto.d.ts +28 -0
  175. package/dist/vault/crypto.d.ts.map +1 -0
  176. package/dist/vault/crypto.js +44 -0
  177. package/dist/vault/crypto.js.map +1 -0
  178. package/dist/vault/index.d.ts +10 -0
  179. package/dist/vault/index.d.ts.map +1 -0
  180. package/dist/vault/index.js +6 -0
  181. package/dist/vault/index.js.map +1 -0
  182. package/dist/vault/seal.d.ts +68 -0
  183. package/dist/vault/seal.d.ts.map +1 -0
  184. package/dist/vault/seal.js +110 -0
  185. package/dist/vault/seal.js.map +1 -0
  186. package/dist/vault/shamir.d.ts +33 -0
  187. package/dist/vault/shamir.d.ts.map +1 -0
  188. package/dist/vault/shamir.js +174 -0
  189. package/dist/vault/shamir.js.map +1 -0
  190. package/dist/vault/vault-manager.d.ts +62 -0
  191. package/dist/vault/vault-manager.d.ts.map +1 -0
  192. package/dist/vault/vault-manager.js +141 -0
  193. package/dist/vault/vault-manager.js.map +1 -0
  194. package/dist/vault/vault.d.ts +104 -0
  195. package/dist/vault/vault.d.ts.map +1 -0
  196. package/dist/vault/vault.js +259 -0
  197. package/dist/vault/vault.js.map +1 -0
  198. package/dist/version.d.ts +3 -0
  199. package/dist/version.d.ts.map +1 -0
  200. package/dist/version.js +18 -0
  201. package/dist/version.js.map +1 -0
  202. package/dist/webhook/index.d.ts +3 -0
  203. package/dist/webhook/index.d.ts.map +1 -0
  204. package/dist/webhook/index.js +2 -0
  205. package/dist/webhook/index.js.map +1 -0
  206. package/dist/webhook/webhook.d.ts +114 -0
  207. package/dist/webhook/webhook.d.ts.map +1 -0
  208. package/dist/webhook/webhook.js +269 -0
  209. package/dist/webhook/webhook.js.map +1 -0
  210. package/package.json +7 -3
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Request Body Inspector — scans outbound request bodies for credential-like
3
+ * patterns that may indicate an agent is trying to exfiltrate secrets.
4
+ *
5
+ * This is a defence-in-depth measure. Even though the agent never sees
6
+ * decrypted credentials directly, an agent could attempt to send previously
7
+ * obtained secrets (e.g. from environment variables, config files) through
8
+ * Gate to an attacker-controlled domain. The body inspector catches this.
9
+ *
10
+ * Sensitivity modes:
11
+ * - "off" — no scanning (fastest, least secure)
12
+ * - "warn" — scan and log matches but allow the request through
13
+ * - "block" — scan and block requests containing credential patterns (default)
14
+ */
15
+ const CREDENTIAL_PATTERNS = [
16
+ // Bearer tokens embedded in body text
17
+ {
18
+ name: 'Bearer token',
19
+ pattern: /Bearer\s+[A-Za-z0-9\-._~+/]+=*/gi,
20
+ minLength: 20,
21
+ },
22
+ // ── Vendor-specific prefixes ───────────────────────────────────
23
+ // OpenAI / Anthropic
24
+ {
25
+ name: 'API key (sk-* prefix)',
26
+ pattern: /\bsk-[A-Za-z0-9]{20,}\b/g,
27
+ },
28
+ {
29
+ name: 'API key (pk-* prefix)',
30
+ pattern: /\bpk-[A-Za-z0-9]{20,}\b/g,
31
+ },
32
+ // Slack tokens
33
+ {
34
+ name: 'Slack token (xoxb/xoxp/xoxa/xoxr)',
35
+ pattern: /\bxox[bpar]-[A-Za-z0-9-]{10,}\b/g,
36
+ },
37
+ // GitHub tokens
38
+ {
39
+ name: 'GitHub token (ghp/gho/ghu/ghs/ghr)',
40
+ pattern: /\bgh[pousr]_[A-Za-z0-9]{30,}\b/g,
41
+ },
42
+ // AWS access keys
43
+ {
44
+ name: 'AWS access key',
45
+ pattern: /\bAKIA[A-Z0-9]{16}\b/g,
46
+ },
47
+ // AWS secret keys (40-char base64-like after common JSON/YAML key names)
48
+ {
49
+ name: 'AWS secret key pattern',
50
+ pattern: /(?:aws_secret_access_key|secret_key|secretAccessKey)["':\s]*[A-Za-z0-9/+=]{40}/gi,
51
+ },
52
+ // Google Cloud / Firebase API keys
53
+ {
54
+ name: 'Google API key (AIza* prefix)',
55
+ pattern: /\bAIza[A-Za-z0-9_-]{35}\b/g,
56
+ },
57
+ // Google OAuth tokens
58
+ {
59
+ name: 'Google OAuth token (ya29.*)',
60
+ pattern: /\bya29\.[A-Za-z0-9_-]{20,}\b/g,
61
+ },
62
+ // Stripe keys
63
+ {
64
+ name: 'Stripe key (sk_live/pk_live/rk_live)',
65
+ pattern: /\b[spr]k_live_[A-Za-z0-9]{20,}\b/g,
66
+ },
67
+ // Stripe test keys (still credentials — should not be in body)
68
+ {
69
+ name: 'Stripe test key (sk_test/pk_test/rk_test)',
70
+ pattern: /\b[spr]k_test_[A-Za-z0-9]{20,}\b/g,
71
+ },
72
+ // Twilio API keys
73
+ {
74
+ name: 'Twilio API key',
75
+ pattern: /\bSK[0-9a-f]{32}\b/g,
76
+ },
77
+ // SendGrid API keys
78
+ {
79
+ name: 'SendGrid API key',
80
+ pattern: /\bSG\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\b/g,
81
+ },
82
+ // npm tokens
83
+ {
84
+ name: 'npm token',
85
+ pattern: /\bnpm_[A-Za-z0-9]{36}\b/g,
86
+ },
87
+ // Discord bot tokens (base64.base64.base64 format)
88
+ {
89
+ name: 'Discord bot token',
90
+ pattern: /\b[A-Za-z0-9]{24,}\.[A-Za-z0-9_-]{6}\.[A-Za-z0-9_-]{27,}\b/g,
91
+ },
92
+ // Azure connection strings
93
+ {
94
+ name: 'Azure connection string',
95
+ pattern: /DefaultEndpointsProtocol=https?;AccountName=[^;]+;AccountKey=[^;]+/gi,
96
+ },
97
+ // Mailgun API keys
98
+ {
99
+ name: 'Mailgun API key',
100
+ pattern: /\bkey-[A-Za-z0-9]{32}\b/g,
101
+ },
102
+ // Heroku API keys
103
+ {
104
+ name: 'Heroku API key',
105
+ pattern: /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/g,
106
+ },
107
+ // ── Database connection strings ────────────────────────────────
108
+ // PostgreSQL / MySQL / MongoDB / Redis connection URIs with credentials
109
+ {
110
+ name: 'Database connection string',
111
+ pattern: /\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|rediss):\/\/[^\s"']+:[^\s"']+@[^\s"']+\b/gi,
112
+ },
113
+ // ── Crypto wallet keys ─────────────────────────────────────────
114
+ // Ethereum / EVM private keys (0x + 64 hex chars)
115
+ {
116
+ name: 'Ethereum private key (0x + 64 hex)',
117
+ pattern: /\b0x[0-9a-fA-F]{64}\b/g,
118
+ },
119
+ // ── Generic heuristics ─────────────────────────────────────────
120
+ // Generic long hex strings (likely keys/tokens — 40+ hex chars)
121
+ {
122
+ name: 'Long hex string (possible key)',
123
+ pattern: /\b[0-9a-f]{40,}\b/gi,
124
+ },
125
+ // Base64-encoded strings that are suspiciously long (likely encoded credentials)
126
+ {
127
+ name: 'Long base64 string (possible encoded credential)',
128
+ pattern: /\b[A-Za-z0-9+/]{50,}={0,2}\b/g,
129
+ },
130
+ // JWT tokens (eyJ prefix = base64-encoded JSON header)
131
+ {
132
+ name: 'JWT token',
133
+ pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,
134
+ },
135
+ // Basic auth in body (username:password in base64)
136
+ {
137
+ name: 'Basic auth credential',
138
+ pattern: /Basic\s+[A-Za-z0-9+/]+=*/gi,
139
+ minLength: 15,
140
+ },
141
+ // Authorization header value embedded in body
142
+ {
143
+ name: 'Authorization value in body',
144
+ pattern: /["']?authorization["']?\s*[:=]\s*["'][^"']{10,}["']/gi,
145
+ },
146
+ // Generic "api_key", "api-key", "apikey" with a value
147
+ {
148
+ name: 'API key assignment',
149
+ pattern: /["']?(?:api[-_]?key|api[-_]?secret|access[-_]?token|secret[-_]?key|client[-_]?secret|auth[-_]?token)["']?\s*[:=]\s*["'][^"']{8,}["']/gi,
150
+ },
151
+ // Private key blocks (RSA, EC, DSA, ENCRYPTED, generic)
152
+ {
153
+ name: 'Private key block',
154
+ pattern: /-----BEGIN\s(?:RSA\s|EC\s|DSA\s|ENCRYPTED\s|OPENSSH\s)?PRIVATE\sKEY-----/g,
155
+ },
156
+ // Password-like assignments in JSON/YAML/config
157
+ {
158
+ name: 'Password assignment',
159
+ pattern: /["']?(?:password|passwd|pwd|secret)["']?\s*[:=]\s*["'][^"']{8,}["']/gi,
160
+ },
161
+ ];
162
+ export class BodyInspector {
163
+ /**
164
+ * Scan a request body string for credential-like patterns.
165
+ *
166
+ * @param body The raw request body as a string
167
+ * @returns An InspectionResult indicating whether suspicious patterns were found
168
+ */
169
+ inspect(body) {
170
+ if (!body || body.length === 0) {
171
+ return { suspicious: false, matches: [] };
172
+ }
173
+ const matches = [];
174
+ for (const { name, pattern, minLength } of CREDENTIAL_PATTERNS) {
175
+ // Reset lastIndex for global regexes
176
+ pattern.lastIndex = 0;
177
+ const found = body.match(pattern);
178
+ if (found) {
179
+ for (const match of found) {
180
+ if (minLength && match.length < minLength)
181
+ continue;
182
+ // Don't include the actual matched value in the log — it might be a credential!
183
+ matches.push(`${name} detected (${match.length} chars)`);
184
+ }
185
+ }
186
+ }
187
+ return {
188
+ suspicious: matches.length > 0,
189
+ matches,
190
+ };
191
+ }
192
+ }
193
+ //# sourceMappingURL=body-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"body-inspector.js","sourceRoot":"","sources":["../../src/gate/body-inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import type { AgentRegistry } from '../agent/index.js';
2
+ import type { Ledger } from '../ledger/index.js';
3
+ import type { AegisMetrics } from '../metrics/index.js';
4
+ import type { Policy } from '../policy/index.js';
5
+ import type { Vault } from '../vault/index.js';
6
+ import type { WebhookManager } from '../webhook/index.js';
7
+ /**
8
+ * Check whether an HTTP method is permitted by a credential's scopes.
9
+ * Returns true if the method is allowed, false if blocked.
10
+ */
11
+ export declare function methodMatchesScope(method: string, scopes: string[]): boolean;
12
+ export interface TlsOptions {
13
+ /** Path to the PEM-encoded certificate file */
14
+ certPath: string;
15
+ /** Path to the PEM-encoded private key file */
16
+ keyPath: string;
17
+ }
18
+ export interface GateOptions {
19
+ port: number;
20
+ vault: Vault;
21
+ ledger: Ledger;
22
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
23
+ /** TLS configuration — if provided, Gate starts as HTTPS */
24
+ tls?: TlsOptions;
25
+ /** Maximum time (ms) to wait for in-flight requests during shutdown (default: 10000) */
26
+ shutdownTimeoutMs?: number;
27
+ /** Agent registry — required when requireAgentAuth is true */
28
+ agentRegistry?: AgentRegistry;
29
+ /** When true, every request must include a valid X-Aegis-Agent token */
30
+ requireAgentAuth?: boolean;
31
+ /** Directory containing YAML policy files — enables policy evaluation */
32
+ policyDir?: string;
33
+ /** Policy enforcement mode: "enforce" blocks violations, "dry-run" logs but allows (default: "enforce") */
34
+ policyMode?: 'enforce' | 'dry-run';
35
+ /** Prometheus metrics collector — if provided, Gate records request/block metrics */
36
+ metrics?: AegisMetrics;
37
+ /** Webhook manager — if provided, Gate emits webhook events on blocks */
38
+ webhooks?: WebhookManager;
39
+ /** Callback fired after every audit entry is logged — used by dashboard for live feed */
40
+ onAuditEntry?: (entry: AuditBroadcast) => void;
41
+ /** Testing: redirect outbound requests to a local server */
42
+ _testUpstream?: {
43
+ protocol: 'http' | 'https';
44
+ hostname: string;
45
+ port: number;
46
+ };
47
+ /** Testing: inject policies directly without loading from disk */
48
+ _testPolicies?: Map<string, Policy>;
49
+ }
50
+ /** Shape of the audit entry broadcast to the dashboard live feed. */
51
+ export interface AuditBroadcast {
52
+ timestamp: string;
53
+ credentialId: string | null;
54
+ credentialName: string | null;
55
+ service: string;
56
+ targetDomain: string;
57
+ method: string;
58
+ path: string;
59
+ status: 'allowed' | 'blocked' | 'system';
60
+ blockedReason: string | null;
61
+ responseCode: number | null;
62
+ agentName: string | null;
63
+ agentTokenPrefix: string | null;
64
+ channel: 'gate' | 'mcp';
65
+ }
66
+ /**
67
+ * Aegis Gate — HTTP proxy that sits between an AI agent and external APIs.
68
+ *
69
+ * The agent makes requests to: http://localhost:{port}/{service}/actual/api/path
70
+ * Gate resolves the service → looks up credential → injects auth → forwards to real API.
71
+ *
72
+ * The agent NEVER sees the credential.
73
+ */
74
+ export declare class Gate {
75
+ private server;
76
+ private vault;
77
+ private ledger;
78
+ private port;
79
+ private logger;
80
+ private tlsOptions?;
81
+ private testUpstream?;
82
+ private rateLimiter;
83
+ private bodyInspector;
84
+ private shuttingDown;
85
+ private activeRequests;
86
+ private shutdownTimeoutMs;
87
+ private agentRegistry?;
88
+ private requireAgentAuth;
89
+ private policyMap;
90
+ private policyMode;
91
+ private policyDir?;
92
+ private policyWatcher?;
93
+ private metrics?;
94
+ private webhooks?;
95
+ private onAuditEntry?;
96
+ constructor(options: GateOptions);
97
+ /**
98
+ * Start the Gate proxy server.
99
+ */
100
+ /**
101
+ * Whether the Gate is running with TLS.
102
+ */
103
+ get isTls(): boolean;
104
+ /**
105
+ * Whether policies are loaded and active.
106
+ */
107
+ get hasPolicies(): boolean;
108
+ /**
109
+ * The current policy enforcement mode.
110
+ */
111
+ get currentPolicyMode(): 'enforce' | 'dry-run';
112
+ /**
113
+ * Load policies from a directory.
114
+ */
115
+ private loadPolicies;
116
+ /**
117
+ * Reload policies from the configured directory.
118
+ * Called on file system changes for hot-reload.
119
+ */
120
+ reloadPolicies(): void;
121
+ /**
122
+ * Start watching the policy directory for changes (hot-reload).
123
+ * Debounces changes to avoid rapid reloads.
124
+ */
125
+ private startPolicyWatcher;
126
+ start(): Promise<void>;
127
+ /**
128
+ * The port the server is listening on (may differ from constructor if 0 was passed).
129
+ */
130
+ get listeningPort(): number;
131
+ /**
132
+ * Stop the Gate proxy server gracefully.
133
+ *
134
+ * 1. Sets `shuttingDown = true` — new requests receive 503 Service Unavailable.
135
+ * 2. Waits for in-flight requests to complete (up to `shutdownTimeoutMs`).
136
+ * 3. Closes the server socket and returns.
137
+ *
138
+ * During the drain phase the server still accepts connections so clients get
139
+ * a clean 503 rather than a connection-refused error.
140
+ */
141
+ stop(): Promise<{
142
+ drained: boolean;
143
+ activeAtClose: number;
144
+ }>;
145
+ /**
146
+ * Whether the Gate is currently shutting down (draining in-flight requests).
147
+ */
148
+ get isShuttingDown(): boolean;
149
+ /**
150
+ * The number of currently in-flight requests.
151
+ */
152
+ get inFlightRequests(): number;
153
+ private handleRequest;
154
+ /**
155
+ * Inject the credential into outbound request headers based on auth type.
156
+ * For `query` auth, the secret is appended as a URL query parameter instead.
157
+ */
158
+ private injectCredential;
159
+ /**
160
+ * Log an allowed request and broadcast to dashboard live feed.
161
+ */
162
+ private auditAllowed;
163
+ /**
164
+ * Log a blocked request and broadcast to dashboard live feed.
165
+ */
166
+ private auditBlocked;
167
+ }
168
+ //# sourceMappingURL=gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../src/gate/gate.ts"],"names":[],"mappings":"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"}