@dcyfr/ai 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +27 -1
  2. package/README.md +343 -4
  3. package/dist/ai/index.d.ts +2 -0
  4. package/dist/ai/index.d.ts.map +1 -1
  5. package/dist/ai/index.js +2 -0
  6. package/dist/ai/index.js.map +1 -1
  7. package/dist/ai/mcp/index.d.ts +14 -2
  8. package/dist/ai/mcp/index.d.ts.map +1 -1
  9. package/dist/ai/mcp/index.js +11 -1
  10. package/dist/ai/mcp/index.js.map +1 -1
  11. package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
  12. package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
  13. package/dist/ai/mcp/servers/analytics/index.js +556 -0
  14. package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
  15. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
  16. package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
  17. package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
  18. package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
  19. package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
  20. package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
  21. package/dist/ai/mcp/servers/content-manager/index.js +236 -0
  22. package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
  23. package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
  24. package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
  25. package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
  26. package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
  27. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
  28. package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
  29. package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
  30. package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
  31. package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
  32. package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
  33. package/dist/ai/mcp/servers/promptintel/index.js +323 -0
  34. package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
  35. package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
  36. package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
  37. package/dist/ai/mcp/servers/shared/cache.js +117 -0
  38. package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
  39. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
  40. package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
  41. package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
  42. package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
  43. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
  44. package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
  45. package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
  46. package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
  47. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
  48. package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
  49. package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
  50. package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
  51. package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
  52. package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
  53. package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
  54. package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
  55. package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
  56. package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
  57. package/dist/ai/mcp/servers/shared/types.js +6 -0
  58. package/dist/ai/mcp/servers/shared/types.js.map +1 -0
  59. package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
  60. package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
  61. package/dist/ai/mcp/servers/shared/utils.js +183 -0
  62. package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
  63. package/dist/ai/memory/config.d.ts +87 -0
  64. package/dist/ai/memory/config.d.ts.map +1 -0
  65. package/dist/ai/memory/config.js +154 -0
  66. package/dist/ai/memory/config.js.map +1 -0
  67. package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
  68. package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
  69. package/dist/ai/memory/dcyfr-memory.js +270 -0
  70. package/dist/ai/memory/dcyfr-memory.js.map +1 -0
  71. package/dist/ai/memory/index.d.ts +15 -0
  72. package/dist/ai/memory/index.d.ts.map +1 -0
  73. package/dist/ai/memory/index.js +15 -0
  74. package/dist/ai/memory/index.js.map +1 -0
  75. package/dist/ai/memory/mem0-client.d.ts +108 -0
  76. package/dist/ai/memory/mem0-client.d.ts.map +1 -0
  77. package/dist/ai/memory/mem0-client.js +166 -0
  78. package/dist/ai/memory/mem0-client.js.map +1 -0
  79. package/dist/ai/memory/types.d.ts +175 -0
  80. package/dist/ai/memory/types.d.ts.map +1 -0
  81. package/dist/ai/memory/types.js +10 -0
  82. package/dist/ai/memory/types.js.map +1 -0
  83. package/package.json +24 -2
@@ -0,0 +1,185 @@
1
+ /**
2
+ * PromptIntel API Client
3
+ * Handles authentication, rate limiting, and error handling for PostgREST API
4
+ * Supports filtering, ordering, and pagination via PostgREST query parameters
5
+ */
6
+ export class PromptIntelClient {
7
+ baseUrl;
8
+ apiKey;
9
+ timeout;
10
+ constructor(config) {
11
+ if (!config.apiKey) {
12
+ throw new Error('PromptIntel API key is required');
13
+ }
14
+ this.baseUrl = config.baseUrl || 'https://api.promptintel.novahunting.ai/api/v1';
15
+ this.apiKey = config.apiKey;
16
+ this.timeout = config.timeout || 10000;
17
+ }
18
+ /**
19
+ * Build request headers with authentication
20
+ */
21
+ buildHeaders() {
22
+ return {
23
+ 'Authorization': `Bearer ${this.apiKey}`,
24
+ 'Content-Type': 'application/json',
25
+ 'Accept': 'application/json',
26
+ };
27
+ }
28
+ /**
29
+ * Build URL with PostgREST query parameters
30
+ * Supports filtering, ordering, pagination, and column selection
31
+ */
32
+ buildUrl(endpoint, params) {
33
+ const url = new URL(`${this.baseUrl}${endpoint}`);
34
+ if (params) {
35
+ // Column selection
36
+ if (params.select) {
37
+ url.searchParams.set('select', params.select);
38
+ }
39
+ // Filtering by severity
40
+ if (params.severity) {
41
+ url.searchParams.set('severity', `eq.${params.severity}`);
42
+ }
43
+ // Filtering by category
44
+ if (params.category) {
45
+ url.searchParams.set('category', `eq.${params.category}`);
46
+ }
47
+ // Pagination
48
+ if (params.limit) {
49
+ url.searchParams.set('limit', String(params.limit));
50
+ }
51
+ if (params.offset) {
52
+ url.searchParams.set('offset', String(params.offset));
53
+ }
54
+ // Ordering
55
+ if (params.order) {
56
+ url.searchParams.set('order', params.order);
57
+ }
58
+ }
59
+ return url.toString();
60
+ }
61
+ /**
62
+ * Fetch with timeout support
63
+ */
64
+ async fetchWithTimeout(url, options) {
65
+ const controller = new AbortController();
66
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
67
+ try {
68
+ const response = await fetch(url, {
69
+ ...options,
70
+ signal: controller.signal,
71
+ });
72
+ clearTimeout(timeoutId);
73
+ return response;
74
+ }
75
+ catch (error) {
76
+ clearTimeout(timeoutId);
77
+ throw error;
78
+ }
79
+ }
80
+ /**
81
+ * Handle error responses
82
+ */
83
+ async handleErrorResponse(response) {
84
+ const contentType = response.headers.get('content-type');
85
+ let errorData = {
86
+ error: `HTTP ${response.status}`,
87
+ };
88
+ try {
89
+ if (contentType?.includes('application/json')) {
90
+ errorData = (await response.json());
91
+ }
92
+ else {
93
+ const text = await response.text();
94
+ errorData.message = text;
95
+ }
96
+ }
97
+ catch {
98
+ // If parsing fails, just use status text
99
+ errorData.message = response.statusText;
100
+ }
101
+ throw new Error(`PromptIntel API error: ${errorData.error} - ${errorData.message || 'Unknown error'}`);
102
+ }
103
+ /**
104
+ * Fetch IoPC (Indicators of Prompt Compromise)
105
+ * Returns adversarial prompt patterns and attack indicators
106
+ */
107
+ async getPrompts(params) {
108
+ const url = this.buildUrl('/prompts', params);
109
+ const response = await this.fetchWithTimeout(url, {
110
+ method: 'GET',
111
+ headers: this.buildHeaders(),
112
+ });
113
+ if (!response.ok) {
114
+ await this.handleErrorResponse(response);
115
+ }
116
+ const data = (await response.json());
117
+ return Array.isArray(data) ? data : [data];
118
+ }
119
+ /**
120
+ * Fetch threat taxonomy
121
+ * Returns hierarchical classification of attack techniques
122
+ */
123
+ async getTaxonomy(params) {
124
+ const url = this.buildUrl('/taxonomy', params);
125
+ const response = await this.fetchWithTimeout(url, {
126
+ method: 'GET',
127
+ headers: this.buildHeaders(),
128
+ });
129
+ if (!response.ok) {
130
+ await this.handleErrorResponse(response);
131
+ }
132
+ const data = (await response.json());
133
+ return Array.isArray(data) ? data : [data];
134
+ }
135
+ /**
136
+ * Fetch agent reports (all or user's own)
137
+ */
138
+ async getAgentReports(mine = false, params) {
139
+ const endpoint = mine ? '/agents/reports/mine' : '/agents/reports';
140
+ const url = this.buildUrl(endpoint, params);
141
+ const response = await this.fetchWithTimeout(url, {
142
+ method: 'GET',
143
+ headers: this.buildHeaders(),
144
+ });
145
+ if (!response.ok) {
146
+ await this.handleErrorResponse(response);
147
+ }
148
+ const data = (await response.json());
149
+ return Array.isArray(data) ? data : [data];
150
+ }
151
+ /**
152
+ * Submit a new security finding or vulnerability report
153
+ */
154
+ async submitReport(report) {
155
+ const url = this.buildUrl('/agents/reports');
156
+ const response = await this.fetchWithTimeout(url, {
157
+ method: 'POST',
158
+ headers: {
159
+ ...this.buildHeaders(),
160
+ 'Prefer': 'return=representation',
161
+ },
162
+ body: JSON.stringify(report),
163
+ });
164
+ if (!response.ok) {
165
+ await this.handleErrorResponse(response);
166
+ }
167
+ const data = (await response.json());
168
+ return Array.isArray(data) ? data[0] : data;
169
+ }
170
+ /**
171
+ * Check API health and connectivity
172
+ * Does not require authentication
173
+ */
174
+ async healthCheck() {
175
+ const url = `${this.baseUrl}/health`;
176
+ const response = await this.fetchWithTimeout(url, {
177
+ method: 'GET',
178
+ });
179
+ if (!response.ok) {
180
+ await this.handleErrorResponse(response);
181
+ }
182
+ return (await response.json());
183
+ }
184
+ }
185
+ //# sourceMappingURL=promptintel-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptintel-client.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/promptintel-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * PromptIntel API Types
3
+ * Type definitions for PromptIntel threat intelligence platform
4
+ * Shared across MCP server and API client
5
+ */
6
+ /**
7
+ * Indicator of Prompt Compromise (IoPC)
8
+ * Represents an adversarial prompt pattern or attack technique
9
+ */
10
+ export interface PromptIntelIoPC {
11
+ id: string;
12
+ title: string;
13
+ description: string;
14
+ severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
15
+ category: string;
16
+ prompt_pattern: string;
17
+ detection_pattern?: string;
18
+ mitigation?: string;
19
+ cwe_ids?: string[];
20
+ created_at: string;
21
+ updated_at: string;
22
+ }
23
+ /**
24
+ * Threat Taxonomy
25
+ * Hierarchical classification of attack techniques and defense strategies
26
+ */
27
+ export interface PromptIntelTaxonomy {
28
+ id: string;
29
+ name: string;
30
+ description: string;
31
+ category_type: 'attack' | 'defense' | 'technique';
32
+ parent_id?: string;
33
+ created_at: string;
34
+ }
35
+ /**
36
+ * Agent Report
37
+ * User-submitted security finding or vulnerability report
38
+ */
39
+ export interface PromptIntelAgentReport {
40
+ id: string;
41
+ agent_name: string;
42
+ title: string;
43
+ description: string;
44
+ severity: 'critical' | 'high' | 'medium' | 'low';
45
+ findings: Record<string, unknown>;
46
+ metadata: Record<string, unknown>;
47
+ created_at: string;
48
+ user_id?: string;
49
+ }
50
+ /**
51
+ * Search Parameters for PostgREST queries
52
+ * Supports filtering, ordering, and pagination
53
+ */
54
+ export interface PromptIntelSearchParams {
55
+ select?: string;
56
+ severity?: string;
57
+ category?: string;
58
+ limit?: number;
59
+ offset?: number;
60
+ order?: string;
61
+ }
62
+ /**
63
+ * API Client Configuration
64
+ */
65
+ export interface PromptIntelClientConfig {
66
+ apiKey: string;
67
+ baseUrl?: string;
68
+ timeout?: number;
69
+ }
70
+ /**
71
+ * Health Check Response
72
+ */
73
+ export interface PromptIntelHealthResponse {
74
+ status: 'healthy' | 'degraded' | 'down';
75
+ timestamp: string;
76
+ }
77
+ /**
78
+ * API Error Response
79
+ */
80
+ export interface PromptIntelErrorResponse {
81
+ error: string;
82
+ message: string;
83
+ details?: Record<string, unknown>;
84
+ }
85
+ //# sourceMappingURL=promptintel-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptintel-types.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/promptintel-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PromptIntel API Types
3
+ * Type definitions for PromptIntel threat intelligence platform
4
+ * Shared across MCP server and API client
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=promptintel-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptintel-types.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/promptintel-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Rate Limiter for API requests
3
+ * Enforces request rate limits with queueing
4
+ *
5
+ * Used by Semantic Scholar MCP to respect 1 req/sec limit
6
+ */
7
+ export interface RateLimiterStats {
8
+ queueLength: number;
9
+ totalRequests: number;
10
+ rejectedRequests: number;
11
+ averageWaitTime: number;
12
+ lastRequestTime: number;
13
+ }
14
+ export declare class RateLimiter {
15
+ private queue;
16
+ private processing;
17
+ private lastRequestTime;
18
+ private readonly minInterval;
19
+ private totalRequests;
20
+ private rejectedRequests;
21
+ private waitTimes;
22
+ /**
23
+ * Create a rate limiter
24
+ * @param requestsPerSecond - Maximum requests per second (e.g., 1 for Semantic Scholar)
25
+ */
26
+ constructor(requestsPerSecond: number);
27
+ /**
28
+ * Enqueue a request to be executed with rate limiting
29
+ * @param fn - Async function to execute
30
+ * @returns Promise that resolves with the function's result
31
+ */
32
+ enqueue<T>(fn: () => Promise<T>): Promise<T>;
33
+ /**
34
+ * Process the request queue with rate limiting
35
+ */
36
+ private processQueue;
37
+ /**
38
+ * Get current queue length
39
+ */
40
+ getQueueLength(): number;
41
+ /**
42
+ * Get rate limiter statistics
43
+ */
44
+ getStats(): RateLimiterStats;
45
+ /**
46
+ * Clear the queue (use with caution)
47
+ */
48
+ clearQueue(): void;
49
+ /**
50
+ * Reset statistics
51
+ */
52
+ resetStats(): void;
53
+ }
54
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAKL;IAER,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAAgB;IAEjC;;;OAGG;gBACS,iBAAiB,EAAE,MAAM;IAOrC;;;;OAIG;IACG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAclD;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,QAAQ,IAAI,gBAAgB;IAgB5B;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACH,UAAU,IAAI,IAAI;CAKnB"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Rate Limiter for API requests
3
+ * Enforces request rate limits with queueing
4
+ *
5
+ * Used by Semantic Scholar MCP to respect 1 req/sec limit
6
+ */
7
+ export class RateLimiter {
8
+ queue = [];
9
+ processing = false;
10
+ lastRequestTime = 0;
11
+ minInterval; // milliseconds between requests
12
+ totalRequests = 0;
13
+ rejectedRequests = 0;
14
+ waitTimes = [];
15
+ /**
16
+ * Create a rate limiter
17
+ * @param requestsPerSecond - Maximum requests per second (e.g., 1 for Semantic Scholar)
18
+ */
19
+ constructor(requestsPerSecond) {
20
+ if (requestsPerSecond <= 0) {
21
+ throw new Error("requestsPerSecond must be positive");
22
+ }
23
+ this.minInterval = 1000 / requestsPerSecond;
24
+ }
25
+ /**
26
+ * Enqueue a request to be executed with rate limiting
27
+ * @param fn - Async function to execute
28
+ * @returns Promise that resolves with the function's result
29
+ */
30
+ async enqueue(fn) {
31
+ return new Promise((resolve, reject) => {
32
+ this.queue.push({
33
+ fn,
34
+ resolve,
35
+ reject,
36
+ enqueuedAt: Date.now(),
37
+ });
38
+ // Start processing if not already running
39
+ void this.processQueue();
40
+ });
41
+ }
42
+ /**
43
+ * Process the request queue with rate limiting
44
+ */
45
+ async processQueue() {
46
+ if (this.processing || this.queue.length === 0) {
47
+ return;
48
+ }
49
+ this.processing = true;
50
+ while (this.queue.length > 0) {
51
+ const now = Date.now();
52
+ const timeSinceLastRequest = now - this.lastRequestTime;
53
+ // Wait if we need to respect the rate limit
54
+ if (timeSinceLastRequest < this.minInterval) {
55
+ const waitTime = this.minInterval - timeSinceLastRequest;
56
+ await new Promise((resolve) => setTimeout(resolve, waitTime));
57
+ }
58
+ const task = this.queue.shift();
59
+ if (!task)
60
+ continue;
61
+ // Track wait time
62
+ const waitTime = Date.now() - task.enqueuedAt;
63
+ this.waitTimes.push(waitTime);
64
+ if (this.waitTimes.length > 100) {
65
+ this.waitTimes.shift(); // Keep last 100 wait times
66
+ }
67
+ this.lastRequestTime = Date.now();
68
+ this.totalRequests++;
69
+ try {
70
+ const result = await task.fn();
71
+ task.resolve(result);
72
+ }
73
+ catch (error) {
74
+ this.rejectedRequests++;
75
+ task.reject(error);
76
+ }
77
+ }
78
+ this.processing = false;
79
+ }
80
+ /**
81
+ * Get current queue length
82
+ */
83
+ getQueueLength() {
84
+ return this.queue.length;
85
+ }
86
+ /**
87
+ * Get rate limiter statistics
88
+ */
89
+ getStats() {
90
+ const averageWaitTime = this.waitTimes.length > 0
91
+ ? this.waitTimes.reduce((sum, time) => sum + time, 0) /
92
+ this.waitTimes.length
93
+ : 0;
94
+ return {
95
+ queueLength: this.queue.length,
96
+ totalRequests: this.totalRequests,
97
+ rejectedRequests: this.rejectedRequests,
98
+ averageWaitTime: Math.round(averageWaitTime),
99
+ lastRequestTime: this.lastRequestTime,
100
+ };
101
+ }
102
+ /**
103
+ * Clear the queue (use with caution)
104
+ */
105
+ clearQueue() {
106
+ const queueLength = this.queue.length;
107
+ this.queue.forEach((task) => {
108
+ task.reject(new Error("Queue cleared"));
109
+ });
110
+ this.queue = [];
111
+ console.warn(`Rate limiter queue cleared (${queueLength} tasks rejected)`);
112
+ }
113
+ /**
114
+ * Reset statistics
115
+ */
116
+ resetStats() {
117
+ this.totalRequests = 0;
118
+ this.rejectedRequests = 0;
119
+ this.waitTimes = [];
120
+ }
121
+ }
122
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Upstash Redis client for MCP servers and main app
3
+ * Supports multi-environment setup with automatic key namespacing
4
+ *
5
+ * Environments:
6
+ * - Production: Dedicated database (no key prefix)
7
+ * - Preview: Shared database with preview:{PR}:* prefix
8
+ * - Development: Shared database with dev:{username}:* prefix
9
+ * - Test: In-memory fallback (no Redis)
10
+ *
11
+ * Upstash provides serverless Redis with HTTP-based REST API, perfect for
12
+ * Vercel Edge Functions and serverless deployments (no persistent connections needed)
13
+ */
14
+ import { Redis } from '@upstash/redis';
15
+ /**
16
+ * Get environment-specific key prefix for Redis isolation
17
+ *
18
+ * SIMPLIFIED ARCHITECTURE (2026-01-30):
19
+ * - Production: No prefix (dedicated database)
20
+ * - Everything else (Dev + Preview): 'preview:' prefix (SHARED)
21
+ *
22
+ * This allows dev and preview to share the same cached data,
23
+ * reducing complexity and ensuring consistency across environments.
24
+ *
25
+ * FIX (2026-02-01): More defensive production check to prevent prefix in production
26
+ */
27
+ export declare function getRedisKeyPrefix(): string;
28
+ /**
29
+ * Upstash Redis client with environment-aware key prefixing
30
+ * Auto-initializes on first use with environment credentials
31
+ *
32
+ * Compatible with standard Redis API:
33
+ * - get, set, setex, del
34
+ * - incr, zadd, zrange, lpush, lrange
35
+ * - All operations work via HTTP REST API
36
+ *
37
+ * Automatic key namespacing:
38
+ * - Production: no prefix (dedicated database)
39
+ * - Preview: preview:{PR}:key
40
+ * - Development: dev:{username}:key
41
+ */
42
+ export declare const redis: Redis;
43
+ /**
44
+ * Get current Redis environment for debugging
45
+ * Returns: 'production' | 'preview' | 'development' | 'test' | 'unknown'
46
+ */
47
+ export declare function getRedisEnvironment(): string;
48
+ /**
49
+ * Close Redis connection (for cleanup)
50
+ * Note: Upstash uses HTTP, so no persistent connection to close
51
+ * This is kept for API compatibility with previous implementation
52
+ */
53
+ export declare function closeRedisClient(): Promise<void>;
54
+ //# sourceMappingURL=redis-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/redis-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AA4EvC;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAe1C;AAoCD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,KAAK,OAyDhB,CAAC;AAEH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,kBAIrC"}