@reveldigital/mcp-graphql-proxy 1.0.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 (70) hide show
  1. package/dist/bin/cli.d.ts +6 -0
  2. package/dist/bin/cli.d.ts.map +1 -0
  3. package/dist/bin/cli.js +7 -0
  4. package/dist/bin/cli.js.map +1 -0
  5. package/dist/core/cache.d.ts +61 -0
  6. package/dist/core/cache.d.ts.map +1 -0
  7. package/dist/core/cache.js +147 -0
  8. package/dist/core/cache.js.map +1 -0
  9. package/dist/core/graphql-client.d.ts +48 -0
  10. package/dist/core/graphql-client.d.ts.map +1 -0
  11. package/dist/core/graphql-client.js +210 -0
  12. package/dist/core/graphql-client.js.map +1 -0
  13. package/dist/core/query-builder.d.ts +90 -0
  14. package/dist/core/query-builder.d.ts.map +1 -0
  15. package/dist/core/query-builder.js +259 -0
  16. package/dist/core/query-builder.js.map +1 -0
  17. package/dist/core/response-optimizer.d.ts +59 -0
  18. package/dist/core/response-optimizer.d.ts.map +1 -0
  19. package/dist/core/response-optimizer.js +197 -0
  20. package/dist/core/response-optimizer.js.map +1 -0
  21. package/dist/index.d.ts +16 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +377 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/types/auth.d.ts +146 -0
  26. package/dist/types/auth.d.ts.map +1 -0
  27. package/dist/types/auth.js +22 -0
  28. package/dist/types/auth.js.map +1 -0
  29. package/dist/types/cache.d.ts +162 -0
  30. package/dist/types/cache.d.ts.map +1 -0
  31. package/dist/types/cache.js +34 -0
  32. package/dist/types/cache.js.map +1 -0
  33. package/dist/types/config.d.ts +108 -0
  34. package/dist/types/config.d.ts.map +1 -0
  35. package/dist/types/config.js +37 -0
  36. package/dist/types/config.js.map +1 -0
  37. package/dist/types/graphql-proxy.d.ts +243 -0
  38. package/dist/types/graphql-proxy.d.ts.map +1 -0
  39. package/dist/types/graphql-proxy.js +142 -0
  40. package/dist/types/graphql-proxy.js.map +1 -0
  41. package/dist/types/index.d.ts +15 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +16 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/dist/types/logging.d.ts +223 -0
  46. package/dist/types/logging.d.ts.map +1 -0
  47. package/dist/types/logging.js +67 -0
  48. package/dist/types/logging.js.map +1 -0
  49. package/dist/types/mcp.d.ts +160 -0
  50. package/dist/types/mcp.d.ts.map +1 -0
  51. package/dist/types/mcp.js +126 -0
  52. package/dist/types/mcp.js.map +1 -0
  53. package/dist/types/metrics.d.ts +237 -0
  54. package/dist/types/metrics.d.ts.map +1 -0
  55. package/dist/types/metrics.js +26 -0
  56. package/dist/types/metrics.js.map +1 -0
  57. package/dist/types/rate-limit.d.ts +144 -0
  58. package/dist/types/rate-limit.d.ts.map +1 -0
  59. package/dist/types/rate-limit.js +43 -0
  60. package/dist/types/rate-limit.js.map +1 -0
  61. package/dist/types/tenant.d.ts +176 -0
  62. package/dist/types/tenant.d.ts.map +1 -0
  63. package/dist/types/tenant.js +63 -0
  64. package/dist/types/tenant.js.map +1 -0
  65. package/dist/types/transformation.d.ts +198 -0
  66. package/dist/types/transformation.d.ts.map +1 -0
  67. package/dist/types/transformation.js +51 -0
  68. package/dist/types/transformation.js.map +1 -0
  69. package/package.json +77 -0
  70. package/src/types/schema.graphql +2712 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * MCP Protocol Types
3
+ *
4
+ * Extended MCP types with proxy metadata for request/response handling.
5
+ */
6
+ /**
7
+ * Get category for an MCP method
8
+ */
9
+ export function getMCPMethodCategory(method) {
10
+ if (method === 'initialize' || method === 'initialized') {
11
+ return 'initialization';
12
+ }
13
+ if (method.startsWith('tools/')) {
14
+ return 'tools';
15
+ }
16
+ if (method.startsWith('resources/')) {
17
+ return 'resources';
18
+ }
19
+ if (method.startsWith('prompts/')) {
20
+ return 'prompts';
21
+ }
22
+ if (method.startsWith('logging/')) {
23
+ return 'logging';
24
+ }
25
+ if (method.startsWith('completion/')) {
26
+ return 'completion';
27
+ }
28
+ if (method.startsWith('notifications/')) {
29
+ return 'notification';
30
+ }
31
+ return 'unknown';
32
+ }
33
+ /**
34
+ * Check if an MCP method has side effects (should not be cached)
35
+ */
36
+ export function hasSideEffects(method) {
37
+ const sideEffectMethods = [
38
+ 'tools/call',
39
+ 'resources/subscribe',
40
+ 'resources/unsubscribe',
41
+ ];
42
+ return sideEffectMethods.includes(method);
43
+ }
44
+ /**
45
+ * Check if an MCP method is a notification (no response expected)
46
+ */
47
+ export function isNotification(method) {
48
+ return method.startsWith('notifications/') || method === 'initialized';
49
+ }
50
+ /**
51
+ * MCP error codes
52
+ */
53
+ export const MCP_ERROR_CODES = {
54
+ PARSE_ERROR: -32700,
55
+ INVALID_REQUEST: -32600,
56
+ METHOD_NOT_FOUND: -32601,
57
+ INVALID_PARAMS: -32602,
58
+ INTERNAL_ERROR: -32603,
59
+ // Custom proxy error codes
60
+ RATE_LIMITED: -32001,
61
+ AUTHENTICATION_FAILED: -32002,
62
+ UPSTREAM_ERROR: -32003,
63
+ TIMEOUT: -32004,
64
+ CACHE_ERROR: -32005,
65
+ };
66
+ /**
67
+ * Create a JSON-RPC error response
68
+ */
69
+ export function createErrorResponse(id, code, message, data) {
70
+ return {
71
+ jsonrpc: '2.0',
72
+ id,
73
+ error: {
74
+ code,
75
+ message,
76
+ data,
77
+ },
78
+ };
79
+ }
80
+ /**
81
+ * Create a JSON-RPC success response
82
+ */
83
+ export function createSuccessResponse(id, result) {
84
+ return {
85
+ jsonrpc: '2.0',
86
+ id,
87
+ result,
88
+ };
89
+ }
90
+ /**
91
+ * Extract method from JSON-RPC message
92
+ */
93
+ export function extractMethod(message) {
94
+ if ('method' in message) {
95
+ return message.method;
96
+ }
97
+ return undefined;
98
+ }
99
+ /**
100
+ * Extract ID from JSON-RPC message
101
+ */
102
+ export function extractId(message) {
103
+ if ('id' in message) {
104
+ return message.id ?? null;
105
+ }
106
+ return null;
107
+ }
108
+ /**
109
+ * Check if message is a request (has method and id)
110
+ */
111
+ export function isRequest(message) {
112
+ return 'method' in message && 'id' in message;
113
+ }
114
+ /**
115
+ * Check if message is a response (has result or error)
116
+ */
117
+ export function isResponse(message) {
118
+ return 'result' in message || 'error' in message;
119
+ }
120
+ /**
121
+ * Check if message is an error response
122
+ */
123
+ export function isErrorResponse(message) {
124
+ return 'error' in message;
125
+ }
126
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Metrics Types
3
+ *
4
+ * Metrics collection, aggregation, and export interfaces.
5
+ */
6
+ /**
7
+ * Metrics configuration
8
+ */
9
+ export interface MetricsConfig {
10
+ /** Enable metrics collection */
11
+ enabled: boolean;
12
+ /** Metrics export targets */
13
+ exporters: MetricsExporter[];
14
+ /** Collection interval in seconds */
15
+ collectionIntervalSeconds: number;
16
+ /** Histogram buckets for latency (in milliseconds) */
17
+ latencyBuckets: number[];
18
+ /** Enable per-operation metrics */
19
+ perOperationMetrics: boolean;
20
+ /** Enable per-tenant metrics */
21
+ perTenantMetrics: boolean;
22
+ /** Enable cache metrics */
23
+ cacheMetrics: boolean;
24
+ /** Enable rate limit metrics */
25
+ rateLimitMetrics: boolean;
26
+ /** Metric name prefix */
27
+ prefix: string;
28
+ }
29
+ /**
30
+ * Metrics exporter configuration
31
+ */
32
+ export interface MetricsExporter {
33
+ /** Exporter type */
34
+ type: 'prometheus' | 'statsd' | 'console' | 'http' | 'opentelemetry';
35
+ /** Exporter-specific options */
36
+ options: MetricsExporterOptions;
37
+ /** Export interval in seconds */
38
+ intervalSeconds?: number;
39
+ }
40
+ /**
41
+ * Exporter-specific options
42
+ */
43
+ export interface MetricsExporterOptions {
44
+ /** HTTP endpoint for http/prometheus exporters */
45
+ endpoint?: string;
46
+ /** Port for prometheus scrape endpoint */
47
+ port?: number;
48
+ /** StatsD host */
49
+ host?: string;
50
+ /** StatsD port */
51
+ statsdPort?: number;
52
+ /** Push gateway URL for prometheus */
53
+ pushGateway?: string;
54
+ /** Labels to add to all metrics */
55
+ labels?: Record<string, string>;
56
+ }
57
+ /**
58
+ * Request metrics aggregation
59
+ */
60
+ export interface RequestMetrics {
61
+ /** Total request count */
62
+ totalRequests: number;
63
+ /** Successful request count */
64
+ successfulRequests: number;
65
+ /** Failed request count */
66
+ failedRequests: number;
67
+ /** Rate limited request count */
68
+ rateLimitedRequests: number;
69
+ /** Latency histogram */
70
+ latencyHistogram: HistogramData;
71
+ /** Requests per second (current rate) */
72
+ requestsPerSecond: number;
73
+ /** Error rate percentage */
74
+ errorRate: number;
75
+ /** Average request duration in ms */
76
+ avgDurationMs: number;
77
+ }
78
+ /**
79
+ * Histogram data structure
80
+ */
81
+ export interface HistogramData {
82
+ /** Bucket counts (bucket upper bound -> count) */
83
+ buckets: Map<number, number>;
84
+ /** Sum of all values */
85
+ sum: number;
86
+ /** Count of observations */
87
+ count: number;
88
+ /** Minimum value */
89
+ min: number;
90
+ /** Maximum value */
91
+ max: number;
92
+ /** P50 (median) latency */
93
+ p50: number;
94
+ /** P90 latency */
95
+ p90: number;
96
+ /** P95 latency */
97
+ p95: number;
98
+ /** P99 latency */
99
+ p99: number;
100
+ }
101
+ /**
102
+ * Operation-level metrics
103
+ */
104
+ export interface OperationMetrics {
105
+ /** Operation name (MCP method) */
106
+ operation: string;
107
+ /** Request metrics for this operation */
108
+ requests: RequestMetrics;
109
+ /** Cache hit rate for this operation */
110
+ cacheHitRate: number;
111
+ /** Average payload size in bytes */
112
+ avgPayloadSize: number;
113
+ /** Last request timestamp */
114
+ lastRequestAt?: Date;
115
+ }
116
+ /**
117
+ * Tenant-level metrics
118
+ */
119
+ export interface TenantMetrics {
120
+ /** Tenant ID */
121
+ tenantId: string;
122
+ /** Request metrics for this tenant */
123
+ requests: RequestMetrics;
124
+ /** Rate limit hit count */
125
+ rateLimitHits: number;
126
+ /** Quota usage percentage */
127
+ quotaUsagePercent: number;
128
+ /** Active sessions */
129
+ activeSessions: number;
130
+ }
131
+ /**
132
+ * System metrics
133
+ */
134
+ export interface SystemMetrics {
135
+ /** Process uptime in seconds */
136
+ uptimeSeconds: number;
137
+ /** Memory usage */
138
+ memory: MemoryMetrics;
139
+ /** CPU usage */
140
+ cpu: CpuMetrics;
141
+ /** Active connections */
142
+ activeConnections: number;
143
+ /** Upstream server health */
144
+ upstreamHealth: HealthStatus;
145
+ /** Pending requests */
146
+ pendingRequests: number;
147
+ }
148
+ /**
149
+ * Memory metrics
150
+ */
151
+ export interface MemoryMetrics {
152
+ /** Heap used in bytes */
153
+ heapUsed: number;
154
+ /** Heap total in bytes */
155
+ heapTotal: number;
156
+ /** External memory in bytes */
157
+ external: number;
158
+ /** Array buffers in bytes */
159
+ arrayBuffers: number;
160
+ /** RSS in bytes */
161
+ rss: number;
162
+ /** Heap usage percentage */
163
+ heapUsagePercent: number;
164
+ }
165
+ /**
166
+ * CPU metrics
167
+ */
168
+ export interface CpuMetrics {
169
+ /** CPU usage percentage */
170
+ usagePercent: number;
171
+ /** User CPU time in ms */
172
+ userTimeMs: number;
173
+ /** System CPU time in ms */
174
+ systemTimeMs: number;
175
+ }
176
+ /**
177
+ * Health status values
178
+ */
179
+ export type HealthStatus = 'healthy' | 'degraded' | 'unhealthy' | 'unknown';
180
+ /**
181
+ * Aggregated metrics snapshot
182
+ */
183
+ export interface MetricsSnapshot {
184
+ /** Snapshot timestamp */
185
+ timestamp: Date;
186
+ /** Snapshot duration in seconds */
187
+ durationSeconds: number;
188
+ /** System metrics */
189
+ system: SystemMetrics;
190
+ /** Request metrics */
191
+ requests: RequestMetrics;
192
+ /** Cache metrics */
193
+ cache: CacheMetricsSnapshot;
194
+ /** Rate limit metrics */
195
+ rateLimit: RateLimitMetricsSnapshot;
196
+ /** Per-operation metrics (if enabled) */
197
+ operations?: Map<string, OperationMetrics>;
198
+ /** Per-tenant metrics (if enabled) */
199
+ tenants?: Map<string, TenantMetrics>;
200
+ }
201
+ /**
202
+ * Cache metrics snapshot
203
+ */
204
+ export interface CacheMetricsSnapshot {
205
+ /** Total hits */
206
+ hits: number;
207
+ /** Total misses */
208
+ misses: number;
209
+ /** Hit rate percentage */
210
+ hitRate: number;
211
+ /** Current size in bytes */
212
+ sizeBytes: number;
213
+ /** Entry count */
214
+ entryCount: number;
215
+ /** Evictions */
216
+ evictions: number;
217
+ }
218
+ /**
219
+ * Rate limit metrics snapshot
220
+ */
221
+ export interface RateLimitMetricsSnapshot {
222
+ /** Total rate limit checks */
223
+ totalChecks: number;
224
+ /** Rate limited requests */
225
+ limitedRequests: number;
226
+ /** Limit rate percentage */
227
+ limitRate: number;
228
+ /** By operation */
229
+ byOperation?: Map<string, number>;
230
+ /** By tenant */
231
+ byTenant?: Map<string, number>;
232
+ }
233
+ /**
234
+ * Default metrics configuration
235
+ */
236
+ export declare const DEFAULT_METRICS_CONFIG: MetricsConfig;
237
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/types/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Metrics Types
3
+ *
4
+ * Metrics collection, aggregation, and export interfaces.
5
+ */
6
+ /**
7
+ * Default metrics configuration
8
+ */
9
+ export const DEFAULT_METRICS_CONFIG = {
10
+ enabled: true,
11
+ exporters: [
12
+ {
13
+ type: 'console',
14
+ options: {},
15
+ intervalSeconds: 60,
16
+ },
17
+ ],
18
+ collectionIntervalSeconds: 10,
19
+ latencyBuckets: [5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000],
20
+ perOperationMetrics: true,
21
+ perTenantMetrics: true,
22
+ cacheMetrics: true,
23
+ rateLimitMetrics: true,
24
+ prefix: 'reveldigital_mcp_proxy_',
25
+ };
26
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/types/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqTH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE;QACT;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,EAAE;YACX,eAAe,EAAE,EAAE;SACpB;KACF;IACD,yBAAyB,EAAE,EAAE;IAC7B,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;IACvE,mBAAmB,EAAE,IAAI;IACzB,gBAAgB,EAAE,IAAI;IACtB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,IAAI;IACtB,MAAM,EAAE,yBAAyB;CAClC,CAAC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Rate Limiting Types
3
+ *
4
+ * Rate limiting configuration and state interfaces.
5
+ */
6
+ /**
7
+ * Rate limiting configuration
8
+ */
9
+ export interface RateLimitConfig {
10
+ /** Enable rate limiting */
11
+ enabled: boolean;
12
+ /** Rate limiting algorithm */
13
+ algorithm: RateLimitAlgorithm;
14
+ /** Global rate limits */
15
+ global: RateLimitRule;
16
+ /** Per-operation rate limits */
17
+ operations: Record<string, RateLimitRule>;
18
+ /** Per-tenant rate limits */
19
+ tenants: Record<string, TenantRateLimitConfig>;
20
+ /** Response when rate limited */
21
+ response: RateLimitResponse;
22
+ /** Storage backend for distributed rate limiting */
23
+ storage: RateLimitStorage;
24
+ }
25
+ /**
26
+ * Rate limiting algorithms
27
+ */
28
+ export type RateLimitAlgorithm = 'sliding-window' | 'token-bucket' | 'fixed-window' | 'leaky-bucket';
29
+ /**
30
+ * Rate limit rule definition
31
+ */
32
+ export interface RateLimitRule {
33
+ /** Maximum requests allowed */
34
+ maxRequests: number;
35
+ /** Time window in seconds */
36
+ windowSeconds: number;
37
+ /** Burst allowance (for token bucket) */
38
+ burstSize?: number;
39
+ /** Token refill rate per second (for token bucket) */
40
+ refillRate?: number;
41
+ /** Penalty duration in seconds when limit exceeded */
42
+ penaltySeconds?: number;
43
+ }
44
+ /**
45
+ * Tenant-specific rate limit configuration
46
+ */
47
+ export interface TenantRateLimitConfig {
48
+ /** Override global limits */
49
+ global?: RateLimitRule;
50
+ /** Override per-operation limits */
51
+ operations?: Record<string, RateLimitRule>;
52
+ /** Priority tier (higher = more lenient) */
53
+ tier: RateLimitTier;
54
+ }
55
+ /**
56
+ * Rate limiting tiers for multi-tenant environments
57
+ */
58
+ export type RateLimitTier = 'free' | 'standard' | 'premium' | 'enterprise' | 'unlimited';
59
+ /**
60
+ * Rate limit tier multipliers
61
+ */
62
+ export declare const RATE_LIMIT_TIER_MULTIPLIERS: Record<RateLimitTier, number>;
63
+ /**
64
+ * Response when rate limited
65
+ */
66
+ export interface RateLimitResponse {
67
+ /** HTTP status code */
68
+ statusCode: number;
69
+ /** Error message template */
70
+ message: string;
71
+ /** Include Retry-After header */
72
+ includeRetryAfter: boolean;
73
+ /** Include rate limit headers (X-RateLimit-*) */
74
+ includeRateLimitHeaders: boolean;
75
+ }
76
+ /**
77
+ * Rate limit storage backend
78
+ */
79
+ export interface RateLimitStorage {
80
+ /** Storage type */
81
+ type: 'memory' | 'redis';
82
+ /** Redis options if type is 'redis' */
83
+ redisOptions?: {
84
+ host: string;
85
+ port: number;
86
+ password?: string;
87
+ db?: number;
88
+ keyPrefix?: string;
89
+ };
90
+ }
91
+ /**
92
+ * Rate limit state for a specific key
93
+ */
94
+ export interface RateLimitState {
95
+ /** Rate limit key (e.g., "tenant:method" or "global") */
96
+ key: string;
97
+ /** Number of requests in current window */
98
+ requestCount: number;
99
+ /** Window start timestamp */
100
+ windowStart: Date;
101
+ /** Remaining requests */
102
+ remaining: number;
103
+ /** Time until reset in milliseconds */
104
+ resetAtMs: number;
105
+ /** Is currently rate limited */
106
+ isLimited: boolean;
107
+ /** Limit applied */
108
+ limit: number;
109
+ /** Window size in seconds */
110
+ windowSeconds: number;
111
+ /** Penalty end time if in penalty period */
112
+ penaltyEndAt?: Date;
113
+ }
114
+ /**
115
+ * Rate limit check result
116
+ */
117
+ export interface RateLimitResult {
118
+ /** Is the request allowed? */
119
+ allowed: boolean;
120
+ /** Current rate limit state */
121
+ state: RateLimitState;
122
+ /** Headers to include in response */
123
+ headers: RateLimitHeaders;
124
+ /** Retry after in seconds (if not allowed) */
125
+ retryAfterSeconds?: number;
126
+ }
127
+ /**
128
+ * Rate limit response headers
129
+ */
130
+ export interface RateLimitHeaders {
131
+ /** Total limit */
132
+ 'X-RateLimit-Limit': string;
133
+ /** Remaining requests */
134
+ 'X-RateLimit-Remaining': string;
135
+ /** Reset timestamp (Unix epoch seconds) */
136
+ 'X-RateLimit-Reset': string;
137
+ /** Retry-After in seconds (when limited) */
138
+ 'Retry-After'?: string;
139
+ }
140
+ /**
141
+ * Default rate limit configuration
142
+ */
143
+ export declare const DEFAULT_RATE_LIMIT_CONFIG: RateLimitConfig;
144
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/types/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Rate Limiting Types
3
+ *
4
+ * Rate limiting configuration and state interfaces.
5
+ */
6
+ /**
7
+ * Rate limit tier multipliers
8
+ */
9
+ export const RATE_LIMIT_TIER_MULTIPLIERS = {
10
+ free: 1,
11
+ standard: 2,
12
+ premium: 5,
13
+ enterprise: 10,
14
+ unlimited: Infinity,
15
+ };
16
+ /**
17
+ * Default rate limit configuration
18
+ */
19
+ export const DEFAULT_RATE_LIMIT_CONFIG = {
20
+ enabled: true,
21
+ algorithm: 'sliding-window',
22
+ global: {
23
+ maxRequests: 1000,
24
+ windowSeconds: 60,
25
+ },
26
+ operations: {
27
+ 'tools/call': {
28
+ maxRequests: 100,
29
+ windowSeconds: 60,
30
+ },
31
+ },
32
+ tenants: {},
33
+ response: {
34
+ statusCode: 429,
35
+ message: 'Rate limit exceeded. Please retry after {retryAfter} seconds.',
36
+ includeRetryAfter: true,
37
+ includeRateLimitHeaders: true,
38
+ },
39
+ storage: {
40
+ type: 'memory',
41
+ },
42
+ };
43
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/types/rate-limit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwEH;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAkC;IACxE,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,QAAQ;CACpB,CAAC;AAsGF;;GAEG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAoB;IACxD,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,gBAAgB;IAC3B,MAAM,EAAE;QACN,WAAW,EAAE,IAAI;QACjB,aAAa,EAAE,EAAE;KAClB;IACD,UAAU,EAAE;QACV,YAAY,EAAE;YACZ,WAAW,EAAE,GAAG;YAChB,aAAa,EAAE,EAAE;SAClB;KACF;IACD,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE;QACR,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,+DAA+D;QACxE,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,IAAI;KAC9B;IACD,OAAO,EAAE;QACP,IAAI,EAAE,QAAQ;KACf;CACF,CAAC"}