@mcp-audit-gateway/core 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 (145) hide show
  1. package/.github/workflows/npm-publish.yml +21 -0
  2. package/CONTRIBUTING.md +41 -0
  3. package/LICENSE +21 -0
  4. package/README.md +156 -0
  5. package/dist/attestation/audit-log.d.ts +25 -0
  6. package/dist/attestation/audit-log.d.ts.map +1 -0
  7. package/dist/attestation/audit-log.js +95 -0
  8. package/dist/attestation/audit-log.js.map +1 -0
  9. package/dist/attestation/bugfix.test.d.ts +2 -0
  10. package/dist/attestation/bugfix.test.d.ts.map +1 -0
  11. package/dist/attestation/bugfix.test.js +103 -0
  12. package/dist/attestation/bugfix.test.js.map +1 -0
  13. package/dist/attestation/chain.test.d.ts +2 -0
  14. package/dist/attestation/chain.test.d.ts.map +1 -0
  15. package/dist/attestation/chain.test.js +153 -0
  16. package/dist/attestation/chain.test.js.map +1 -0
  17. package/dist/attestation/keygen.d.ts +5 -0
  18. package/dist/attestation/keygen.d.ts.map +1 -0
  19. package/dist/attestation/keygen.js +12 -0
  20. package/dist/attestation/keygen.js.map +1 -0
  21. package/dist/attestation/signer.d.ts +25 -0
  22. package/dist/attestation/signer.d.ts.map +1 -0
  23. package/dist/attestation/signer.js +93 -0
  24. package/dist/attestation/signer.js.map +1 -0
  25. package/dist/attestation/signer.test.d.ts +2 -0
  26. package/dist/attestation/signer.test.d.ts.map +1 -0
  27. package/dist/attestation/signer.test.js +62 -0
  28. package/dist/attestation/signer.test.js.map +1 -0
  29. package/dist/attestation/verify.d.ts +26 -0
  30. package/dist/attestation/verify.d.ts.map +1 -0
  31. package/dist/attestation/verify.js +104 -0
  32. package/dist/attestation/verify.js.map +1 -0
  33. package/dist/attestation/verify.test.d.ts +2 -0
  34. package/dist/attestation/verify.test.d.ts.map +1 -0
  35. package/dist/attestation/verify.test.js +79 -0
  36. package/dist/attestation/verify.test.js.map +1 -0
  37. package/dist/cli.d.ts +3 -0
  38. package/dist/cli.d.ts.map +1 -0
  39. package/dist/cli.js +364 -0
  40. package/dist/cli.js.map +1 -0
  41. package/dist/index.d.ts +12 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +12 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/integration.test.d.ts +2 -0
  46. package/dist/integration.test.d.ts.map +1 -0
  47. package/dist/integration.test.js +88 -0
  48. package/dist/integration.test.js.map +1 -0
  49. package/dist/policy/engine.d.ts +24 -0
  50. package/dist/policy/engine.d.ts.map +1 -0
  51. package/dist/policy/engine.js +130 -0
  52. package/dist/policy/engine.js.map +1 -0
  53. package/dist/policy/engine.test.d.ts +2 -0
  54. package/dist/policy/engine.test.d.ts.map +1 -0
  55. package/dist/policy/engine.test.js +80 -0
  56. package/dist/policy/engine.test.js.map +1 -0
  57. package/dist/proxy/gateway.d.ts +54 -0
  58. package/dist/proxy/gateway.d.ts.map +1 -0
  59. package/dist/proxy/gateway.js +245 -0
  60. package/dist/proxy/gateway.js.map +1 -0
  61. package/dist/proxy/gateway.test.d.ts +2 -0
  62. package/dist/proxy/gateway.test.d.ts.map +1 -0
  63. package/dist/proxy/gateway.test.js +93 -0
  64. package/dist/proxy/gateway.test.js.map +1 -0
  65. package/dist/proxy/mcp-server-adapter.d.ts +21 -0
  66. package/dist/proxy/mcp-server-adapter.d.ts.map +1 -0
  67. package/dist/proxy/mcp-server-adapter.js +98 -0
  68. package/dist/proxy/mcp-server-adapter.js.map +1 -0
  69. package/dist/proxy/mcp-server-adapter.test.d.ts +2 -0
  70. package/dist/proxy/mcp-server-adapter.test.d.ts.map +1 -0
  71. package/dist/proxy/mcp-server-adapter.test.js +160 -0
  72. package/dist/proxy/mcp-server-adapter.test.js.map +1 -0
  73. package/dist/proxy/upstream-manager.d.ts +49 -0
  74. package/dist/proxy/upstream-manager.d.ts.map +1 -0
  75. package/dist/proxy/upstream-manager.js +246 -0
  76. package/dist/proxy/upstream-manager.js.map +1 -0
  77. package/dist/proxy/upstream-manager.test.d.ts +2 -0
  78. package/dist/proxy/upstream-manager.test.d.ts.map +1 -0
  79. package/dist/proxy/upstream-manager.test.js +413 -0
  80. package/dist/proxy/upstream-manager.test.js.map +1 -0
  81. package/dist/telemetry/logger.d.ts +26 -0
  82. package/dist/telemetry/logger.d.ts.map +1 -0
  83. package/dist/telemetry/logger.js +48 -0
  84. package/dist/telemetry/logger.js.map +1 -0
  85. package/dist/telemetry/logger.test.d.ts +2 -0
  86. package/dist/telemetry/logger.test.d.ts.map +1 -0
  87. package/dist/telemetry/logger.test.js +124 -0
  88. package/dist/telemetry/logger.test.js.map +1 -0
  89. package/dist/telemetry/metrics.d.ts +41 -0
  90. package/dist/telemetry/metrics.d.ts.map +1 -0
  91. package/dist/telemetry/metrics.js +64 -0
  92. package/dist/telemetry/metrics.js.map +1 -0
  93. package/dist/telemetry/metrics.test.d.ts +2 -0
  94. package/dist/telemetry/metrics.test.d.ts.map +1 -0
  95. package/dist/telemetry/metrics.test.js +93 -0
  96. package/dist/telemetry/metrics.test.js.map +1 -0
  97. package/dist/telemetry/tracer.d.ts +16 -0
  98. package/dist/telemetry/tracer.d.ts.map +1 -0
  99. package/dist/telemetry/tracer.js +71 -0
  100. package/dist/telemetry/tracer.js.map +1 -0
  101. package/dist/types.d.ts +477 -0
  102. package/dist/types.d.ts.map +1 -0
  103. package/dist/types.js +68 -0
  104. package/dist/types.js.map +1 -0
  105. package/dist/wrap/proxy.d.ts +2 -0
  106. package/dist/wrap/proxy.d.ts.map +1 -0
  107. package/dist/wrap/proxy.js +152 -0
  108. package/dist/wrap/proxy.js.map +1 -0
  109. package/dist/wrap/proxy.test.d.ts +2 -0
  110. package/dist/wrap/proxy.test.d.ts.map +1 -0
  111. package/dist/wrap/proxy.test.js +155 -0
  112. package/dist/wrap/proxy.test.js.map +1 -0
  113. package/examples/README.md +33 -0
  114. package/examples/claude-desktop.json +50 -0
  115. package/examples/multi-agent-production.json +72 -0
  116. package/gateway.config.example.json +61 -0
  117. package/package.json +49 -0
  118. package/src/attestation/audit-log.ts +126 -0
  119. package/src/attestation/bugfix.test.ts +113 -0
  120. package/src/attestation/chain.test.ts +188 -0
  121. package/src/attestation/keygen.ts +18 -0
  122. package/src/attestation/signer.test.ts +75 -0
  123. package/src/attestation/signer.ts +105 -0
  124. package/src/attestation/verify.test.ts +86 -0
  125. package/src/attestation/verify.ts +131 -0
  126. package/src/cli.ts +407 -0
  127. package/src/index.ts +21 -0
  128. package/src/integration.test.ts +108 -0
  129. package/src/policy/engine.test.ts +95 -0
  130. package/src/policy/engine.ts +162 -0
  131. package/src/proxy/gateway.test.ts +108 -0
  132. package/src/proxy/gateway.ts +328 -0
  133. package/src/proxy/mcp-server-adapter.test.ts +197 -0
  134. package/src/proxy/mcp-server-adapter.ts +140 -0
  135. package/src/proxy/upstream-manager.test.ts +534 -0
  136. package/src/proxy/upstream-manager.ts +326 -0
  137. package/src/telemetry/logger.test.ts +139 -0
  138. package/src/telemetry/logger.ts +72 -0
  139. package/src/telemetry/metrics.test.ts +125 -0
  140. package/src/telemetry/metrics.ts +83 -0
  141. package/src/telemetry/tracer.ts +90 -0
  142. package/src/types.ts +113 -0
  143. package/src/wrap/proxy.test.ts +175 -0
  144. package/src/wrap/proxy.ts +192 -0
  145. package/tsconfig.json +18 -0
@@ -0,0 +1,477 @@
1
+ import { z } from "zod";
2
+ export declare const UpstreamConfigSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ namespace: z.ZodString;
5
+ transport: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
6
+ type: z.ZodLiteral<"stdio">;
7
+ command: z.ZodString;
8
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
9
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ type: "stdio";
12
+ command: string;
13
+ args?: string[] | undefined;
14
+ env?: Record<string, string> | undefined;
15
+ }, {
16
+ type: "stdio";
17
+ command: string;
18
+ args?: string[] | undefined;
19
+ env?: Record<string, string> | undefined;
20
+ }>, z.ZodObject<{
21
+ type: z.ZodLiteral<"streamable-http">;
22
+ url: z.ZodString;
23
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ type: "streamable-http";
26
+ url: string;
27
+ headers?: Record<string, string> | undefined;
28
+ }, {
29
+ type: "streamable-http";
30
+ url: string;
31
+ headers?: Record<string, string> | undefined;
32
+ }>]>;
33
+ healthCheckIntervalMs: z.ZodOptional<z.ZodNumber>;
34
+ }, "strip", z.ZodTypeAny, {
35
+ name: string;
36
+ namespace: string;
37
+ transport: {
38
+ type: "stdio";
39
+ command: string;
40
+ args?: string[] | undefined;
41
+ env?: Record<string, string> | undefined;
42
+ } | {
43
+ type: "streamable-http";
44
+ url: string;
45
+ headers?: Record<string, string> | undefined;
46
+ };
47
+ healthCheckIntervalMs?: number | undefined;
48
+ }, {
49
+ name: string;
50
+ namespace: string;
51
+ transport: {
52
+ type: "stdio";
53
+ command: string;
54
+ args?: string[] | undefined;
55
+ env?: Record<string, string> | undefined;
56
+ } | {
57
+ type: "streamable-http";
58
+ url: string;
59
+ headers?: Record<string, string> | undefined;
60
+ };
61
+ healthCheckIntervalMs?: number | undefined;
62
+ }>;
63
+ export declare const PolicyRuleSchema: z.ZodObject<{
64
+ effect: z.ZodEnum<["allow", "deny"]>;
65
+ principals: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
66
+ tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
67
+ namespaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
68
+ rateLimit: z.ZodOptional<z.ZodObject<{
69
+ maxPerMinute: z.ZodOptional<z.ZodNumber>;
70
+ maxPerHour: z.ZodOptional<z.ZodNumber>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ maxPerMinute?: number | undefined;
73
+ maxPerHour?: number | undefined;
74
+ }, {
75
+ maxPerMinute?: number | undefined;
76
+ maxPerHour?: number | undefined;
77
+ }>>;
78
+ }, "strip", z.ZodTypeAny, {
79
+ effect: "allow" | "deny";
80
+ principals?: string[] | undefined;
81
+ tools?: string[] | undefined;
82
+ namespaces?: string[] | undefined;
83
+ rateLimit?: {
84
+ maxPerMinute?: number | undefined;
85
+ maxPerHour?: number | undefined;
86
+ } | undefined;
87
+ }, {
88
+ effect: "allow" | "deny";
89
+ principals?: string[] | undefined;
90
+ tools?: string[] | undefined;
91
+ namespaces?: string[] | undefined;
92
+ rateLimit?: {
93
+ maxPerMinute?: number | undefined;
94
+ maxPerHour?: number | undefined;
95
+ } | undefined;
96
+ }>;
97
+ export declare const AttestationConfigSchema: z.ZodObject<{
98
+ enabled: z.ZodDefault<z.ZodBoolean>;
99
+ algorithm: z.ZodDefault<z.ZodEnum<["ed25519", "hmac-sha256"]>>;
100
+ keyPath: z.ZodOptional<z.ZodString>;
101
+ secret: z.ZodOptional<z.ZodString>;
102
+ includeParams: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
103
+ includeResult: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ enabled: boolean;
106
+ algorithm: "ed25519" | "hmac-sha256";
107
+ includeParams: boolean;
108
+ includeResult: boolean;
109
+ keyPath?: string | undefined;
110
+ secret?: string | undefined;
111
+ }, {
112
+ enabled?: boolean | undefined;
113
+ algorithm?: "ed25519" | "hmac-sha256" | undefined;
114
+ keyPath?: string | undefined;
115
+ secret?: string | undefined;
116
+ includeParams?: boolean | undefined;
117
+ includeResult?: boolean | undefined;
118
+ }>;
119
+ export declare const TelemetryConfigSchema: z.ZodObject<{
120
+ enabled: z.ZodDefault<z.ZodBoolean>;
121
+ exporterEndpoint: z.ZodOptional<z.ZodString>;
122
+ serviceName: z.ZodDefault<z.ZodString>;
123
+ sampleRate: z.ZodDefault<z.ZodNumber>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ enabled: boolean;
126
+ serviceName: string;
127
+ sampleRate: number;
128
+ exporterEndpoint?: string | undefined;
129
+ }, {
130
+ enabled?: boolean | undefined;
131
+ exporterEndpoint?: string | undefined;
132
+ serviceName?: string | undefined;
133
+ sampleRate?: number | undefined;
134
+ }>;
135
+ export declare const GatewayConfigSchema: z.ZodObject<{
136
+ name: z.ZodDefault<z.ZodString>;
137
+ version: z.ZodDefault<z.ZodString>;
138
+ listen: z.ZodDefault<z.ZodObject<{
139
+ transport: z.ZodDefault<z.ZodEnum<["stdio", "streamable-http"]>>;
140
+ port: z.ZodDefault<z.ZodNumber>;
141
+ host: z.ZodDefault<z.ZodString>;
142
+ principalHeader: z.ZodOptional<z.ZodString>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ transport: "stdio" | "streamable-http";
145
+ port: number;
146
+ host: string;
147
+ principalHeader?: string | undefined;
148
+ }, {
149
+ transport?: "stdio" | "streamable-http" | undefined;
150
+ port?: number | undefined;
151
+ host?: string | undefined;
152
+ principalHeader?: string | undefined;
153
+ }>>;
154
+ upstreams: z.ZodArray<z.ZodObject<{
155
+ name: z.ZodString;
156
+ namespace: z.ZodString;
157
+ transport: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
158
+ type: z.ZodLiteral<"stdio">;
159
+ command: z.ZodString;
160
+ args: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
161
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
162
+ }, "strip", z.ZodTypeAny, {
163
+ type: "stdio";
164
+ command: string;
165
+ args?: string[] | undefined;
166
+ env?: Record<string, string> | undefined;
167
+ }, {
168
+ type: "stdio";
169
+ command: string;
170
+ args?: string[] | undefined;
171
+ env?: Record<string, string> | undefined;
172
+ }>, z.ZodObject<{
173
+ type: z.ZodLiteral<"streamable-http">;
174
+ url: z.ZodString;
175
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ type: "streamable-http";
178
+ url: string;
179
+ headers?: Record<string, string> | undefined;
180
+ }, {
181
+ type: "streamable-http";
182
+ url: string;
183
+ headers?: Record<string, string> | undefined;
184
+ }>]>;
185
+ healthCheckIntervalMs: z.ZodOptional<z.ZodNumber>;
186
+ }, "strip", z.ZodTypeAny, {
187
+ name: string;
188
+ namespace: string;
189
+ transport: {
190
+ type: "stdio";
191
+ command: string;
192
+ args?: string[] | undefined;
193
+ env?: Record<string, string> | undefined;
194
+ } | {
195
+ type: "streamable-http";
196
+ url: string;
197
+ headers?: Record<string, string> | undefined;
198
+ };
199
+ healthCheckIntervalMs?: number | undefined;
200
+ }, {
201
+ name: string;
202
+ namespace: string;
203
+ transport: {
204
+ type: "stdio";
205
+ command: string;
206
+ args?: string[] | undefined;
207
+ env?: Record<string, string> | undefined;
208
+ } | {
209
+ type: "streamable-http";
210
+ url: string;
211
+ headers?: Record<string, string> | undefined;
212
+ };
213
+ healthCheckIntervalMs?: number | undefined;
214
+ }>, "many">;
215
+ policy: z.ZodDefault<z.ZodObject<{
216
+ defaultEffect: z.ZodDefault<z.ZodEnum<["allow", "deny"]>>;
217
+ rules: z.ZodDefault<z.ZodArray<z.ZodObject<{
218
+ effect: z.ZodEnum<["allow", "deny"]>;
219
+ principals: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
220
+ tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
221
+ namespaces: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
222
+ rateLimit: z.ZodOptional<z.ZodObject<{
223
+ maxPerMinute: z.ZodOptional<z.ZodNumber>;
224
+ maxPerHour: z.ZodOptional<z.ZodNumber>;
225
+ }, "strip", z.ZodTypeAny, {
226
+ maxPerMinute?: number | undefined;
227
+ maxPerHour?: number | undefined;
228
+ }, {
229
+ maxPerMinute?: number | undefined;
230
+ maxPerHour?: number | undefined;
231
+ }>>;
232
+ }, "strip", z.ZodTypeAny, {
233
+ effect: "allow" | "deny";
234
+ principals?: string[] | undefined;
235
+ tools?: string[] | undefined;
236
+ namespaces?: string[] | undefined;
237
+ rateLimit?: {
238
+ maxPerMinute?: number | undefined;
239
+ maxPerHour?: number | undefined;
240
+ } | undefined;
241
+ }, {
242
+ effect: "allow" | "deny";
243
+ principals?: string[] | undefined;
244
+ tools?: string[] | undefined;
245
+ namespaces?: string[] | undefined;
246
+ rateLimit?: {
247
+ maxPerMinute?: number | undefined;
248
+ maxPerHour?: number | undefined;
249
+ } | undefined;
250
+ }>, "many">>;
251
+ }, "strip", z.ZodTypeAny, {
252
+ defaultEffect: "allow" | "deny";
253
+ rules: {
254
+ effect: "allow" | "deny";
255
+ principals?: string[] | undefined;
256
+ tools?: string[] | undefined;
257
+ namespaces?: string[] | undefined;
258
+ rateLimit?: {
259
+ maxPerMinute?: number | undefined;
260
+ maxPerHour?: number | undefined;
261
+ } | undefined;
262
+ }[];
263
+ }, {
264
+ defaultEffect?: "allow" | "deny" | undefined;
265
+ rules?: {
266
+ effect: "allow" | "deny";
267
+ principals?: string[] | undefined;
268
+ tools?: string[] | undefined;
269
+ namespaces?: string[] | undefined;
270
+ rateLimit?: {
271
+ maxPerMinute?: number | undefined;
272
+ maxPerHour?: number | undefined;
273
+ } | undefined;
274
+ }[] | undefined;
275
+ }>>;
276
+ attestation: z.ZodDefault<z.ZodObject<{
277
+ enabled: z.ZodDefault<z.ZodBoolean>;
278
+ algorithm: z.ZodDefault<z.ZodEnum<["ed25519", "hmac-sha256"]>>;
279
+ keyPath: z.ZodOptional<z.ZodString>;
280
+ secret: z.ZodOptional<z.ZodString>;
281
+ includeParams: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
282
+ includeResult: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
283
+ }, "strip", z.ZodTypeAny, {
284
+ enabled: boolean;
285
+ algorithm: "ed25519" | "hmac-sha256";
286
+ includeParams: boolean;
287
+ includeResult: boolean;
288
+ keyPath?: string | undefined;
289
+ secret?: string | undefined;
290
+ }, {
291
+ enabled?: boolean | undefined;
292
+ algorithm?: "ed25519" | "hmac-sha256" | undefined;
293
+ keyPath?: string | undefined;
294
+ secret?: string | undefined;
295
+ includeParams?: boolean | undefined;
296
+ includeResult?: boolean | undefined;
297
+ }>>;
298
+ telemetry: z.ZodDefault<z.ZodObject<{
299
+ enabled: z.ZodDefault<z.ZodBoolean>;
300
+ exporterEndpoint: z.ZodOptional<z.ZodString>;
301
+ serviceName: z.ZodDefault<z.ZodString>;
302
+ sampleRate: z.ZodDefault<z.ZodNumber>;
303
+ }, "strip", z.ZodTypeAny, {
304
+ enabled: boolean;
305
+ serviceName: string;
306
+ sampleRate: number;
307
+ exporterEndpoint?: string | undefined;
308
+ }, {
309
+ enabled?: boolean | undefined;
310
+ exporterEndpoint?: string | undefined;
311
+ serviceName?: string | undefined;
312
+ sampleRate?: number | undefined;
313
+ }>>;
314
+ auditLog: z.ZodDefault<z.ZodObject<{
315
+ enabled: z.ZodDefault<z.ZodBoolean>;
316
+ path: z.ZodDefault<z.ZodString>;
317
+ rotateAfterMb: z.ZodDefault<z.ZodNumber>;
318
+ }, "strip", z.ZodTypeAny, {
319
+ path: string;
320
+ enabled: boolean;
321
+ rotateAfterMb: number;
322
+ }, {
323
+ path?: string | undefined;
324
+ enabled?: boolean | undefined;
325
+ rotateAfterMb?: number | undefined;
326
+ }>>;
327
+ }, "strip", z.ZodTypeAny, {
328
+ name: string;
329
+ version: string;
330
+ listen: {
331
+ transport: "stdio" | "streamable-http";
332
+ port: number;
333
+ host: string;
334
+ principalHeader?: string | undefined;
335
+ };
336
+ upstreams: {
337
+ name: string;
338
+ namespace: string;
339
+ transport: {
340
+ type: "stdio";
341
+ command: string;
342
+ args?: string[] | undefined;
343
+ env?: Record<string, string> | undefined;
344
+ } | {
345
+ type: "streamable-http";
346
+ url: string;
347
+ headers?: Record<string, string> | undefined;
348
+ };
349
+ healthCheckIntervalMs?: number | undefined;
350
+ }[];
351
+ policy: {
352
+ defaultEffect: "allow" | "deny";
353
+ rules: {
354
+ effect: "allow" | "deny";
355
+ principals?: string[] | undefined;
356
+ tools?: string[] | undefined;
357
+ namespaces?: string[] | undefined;
358
+ rateLimit?: {
359
+ maxPerMinute?: number | undefined;
360
+ maxPerHour?: number | undefined;
361
+ } | undefined;
362
+ }[];
363
+ };
364
+ attestation: {
365
+ enabled: boolean;
366
+ algorithm: "ed25519" | "hmac-sha256";
367
+ includeParams: boolean;
368
+ includeResult: boolean;
369
+ keyPath?: string | undefined;
370
+ secret?: string | undefined;
371
+ };
372
+ telemetry: {
373
+ enabled: boolean;
374
+ serviceName: string;
375
+ sampleRate: number;
376
+ exporterEndpoint?: string | undefined;
377
+ };
378
+ auditLog: {
379
+ path: string;
380
+ enabled: boolean;
381
+ rotateAfterMb: number;
382
+ };
383
+ }, {
384
+ upstreams: {
385
+ name: string;
386
+ namespace: string;
387
+ transport: {
388
+ type: "stdio";
389
+ command: string;
390
+ args?: string[] | undefined;
391
+ env?: Record<string, string> | undefined;
392
+ } | {
393
+ type: "streamable-http";
394
+ url: string;
395
+ headers?: Record<string, string> | undefined;
396
+ };
397
+ healthCheckIntervalMs?: number | undefined;
398
+ }[];
399
+ name?: string | undefined;
400
+ version?: string | undefined;
401
+ listen?: {
402
+ transport?: "stdio" | "streamable-http" | undefined;
403
+ port?: number | undefined;
404
+ host?: string | undefined;
405
+ principalHeader?: string | undefined;
406
+ } | undefined;
407
+ policy?: {
408
+ defaultEffect?: "allow" | "deny" | undefined;
409
+ rules?: {
410
+ effect: "allow" | "deny";
411
+ principals?: string[] | undefined;
412
+ tools?: string[] | undefined;
413
+ namespaces?: string[] | undefined;
414
+ rateLimit?: {
415
+ maxPerMinute?: number | undefined;
416
+ maxPerHour?: number | undefined;
417
+ } | undefined;
418
+ }[] | undefined;
419
+ } | undefined;
420
+ attestation?: {
421
+ enabled?: boolean | undefined;
422
+ algorithm?: "ed25519" | "hmac-sha256" | undefined;
423
+ keyPath?: string | undefined;
424
+ secret?: string | undefined;
425
+ includeParams?: boolean | undefined;
426
+ includeResult?: boolean | undefined;
427
+ } | undefined;
428
+ telemetry?: {
429
+ enabled?: boolean | undefined;
430
+ exporterEndpoint?: string | undefined;
431
+ serviceName?: string | undefined;
432
+ sampleRate?: number | undefined;
433
+ } | undefined;
434
+ auditLog?: {
435
+ path?: string | undefined;
436
+ enabled?: boolean | undefined;
437
+ rotateAfterMb?: number | undefined;
438
+ } | undefined;
439
+ }>;
440
+ export type UpstreamConfig = z.infer<typeof UpstreamConfigSchema>;
441
+ export type PolicyRule = z.infer<typeof PolicyRuleSchema>;
442
+ export type AttestationConfig = z.infer<typeof AttestationConfigSchema>;
443
+ export type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>;
444
+ export type GatewayConfig = z.infer<typeof GatewayConfigSchema>;
445
+ export interface UpstreamStatus {
446
+ name: string;
447
+ namespace: string;
448
+ status: "healthy" | "degraded" | "unavailable" | "cooldown";
449
+ toolCount: number;
450
+ lastSuccessfulContact: string | null;
451
+ degradedReason?: string;
452
+ unavailableReason?: string;
453
+ }
454
+ export interface AuditRecord {
455
+ id: string;
456
+ timestamp: string;
457
+ method: string;
458
+ toolName?: string;
459
+ namespace?: string;
460
+ upstream?: string;
461
+ principal?: string;
462
+ durationMs: number;
463
+ success: boolean;
464
+ errorCode?: number;
465
+ previousHash?: string;
466
+ attestation?: string;
467
+ }
468
+ export interface ToolEntry {
469
+ name: string;
470
+ originalName: string;
471
+ namespace: string;
472
+ upstream: string;
473
+ description?: string;
474
+ inputSchema?: unknown;
475
+ annotations?: Record<string, unknown>;
476
+ }
477
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;EAOlC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKhC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB9B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC"}
package/dist/types.js ADDED
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ export const UpstreamConfigSchema = z.object({
3
+ name: z.string(),
4
+ namespace: z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/),
5
+ transport: z.discriminatedUnion("type", [
6
+ z.object({
7
+ type: z.literal("stdio"),
8
+ command: z.string(),
9
+ args: z.array(z.string()).optional(),
10
+ env: z.record(z.string()).optional(),
11
+ }),
12
+ z.object({
13
+ type: z.literal("streamable-http"),
14
+ url: z.string().url(),
15
+ headers: z.record(z.string()).optional(),
16
+ }),
17
+ ]),
18
+ healthCheckIntervalMs: z.number().positive().optional(),
19
+ });
20
+ export const PolicyRuleSchema = z.object({
21
+ effect: z.enum(["allow", "deny"]),
22
+ principals: z.array(z.string()).optional(),
23
+ tools: z.array(z.string()).optional(),
24
+ namespaces: z.array(z.string()).optional(),
25
+ rateLimit: z
26
+ .object({
27
+ maxPerMinute: z.number().positive().optional(),
28
+ maxPerHour: z.number().positive().optional(),
29
+ })
30
+ .optional(),
31
+ });
32
+ export const AttestationConfigSchema = z.object({
33
+ enabled: z.boolean().default(true),
34
+ algorithm: z.enum(["ed25519", "hmac-sha256"]).default("ed25519"),
35
+ keyPath: z.string().optional(),
36
+ secret: z.string().optional(),
37
+ includeParams: z.boolean().optional().default(false),
38
+ includeResult: z.boolean().optional().default(false),
39
+ });
40
+ export const TelemetryConfigSchema = z.object({
41
+ enabled: z.boolean().default(true),
42
+ exporterEndpoint: z.string().url().optional(),
43
+ serviceName: z.string().default("mcp-audit-gateway"),
44
+ sampleRate: z.number().min(0).max(1).default(1.0),
45
+ });
46
+ export const GatewayConfigSchema = z.object({
47
+ name: z.string().default("mcp-audit-gateway"),
48
+ version: z.string().default("0.1.0"),
49
+ listen: z.object({
50
+ transport: z.enum(["stdio", "streamable-http"]).default("streamable-http"),
51
+ port: z.number().positive().default(3100),
52
+ host: z.string().default("127.0.0.1"),
53
+ principalHeader: z.string().optional(),
54
+ }).default({}),
55
+ upstreams: z.array(UpstreamConfigSchema).min(1),
56
+ policy: z.object({
57
+ defaultEffect: z.enum(["allow", "deny"]).default("allow"),
58
+ rules: z.array(PolicyRuleSchema).default([]),
59
+ }).default({}),
60
+ attestation: AttestationConfigSchema.default({}),
61
+ telemetry: TelemetryConfigSchema.default({}),
62
+ auditLog: z.object({
63
+ enabled: z.boolean().default(true),
64
+ path: z.string().default("./audit.jsonl"),
65
+ rotateAfterMb: z.number().positive().default(100),
66
+ }).default({}),
67
+ });
68
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runWrapProxy(command: string, args: string[]): Promise<void>;
2
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/wrap/proxy.ts"],"names":[],"mappings":"AA6BA,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFjF"}