mcp-perforce-server 1.0.2 → 2.0.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.
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Security and compliance utilities for MCP Perforce server
3
+ */
4
+ export interface RateLimitConfig {
5
+ maxRequests: number;
6
+ windowMs: number;
7
+ blockDurationMs: number;
8
+ }
9
+ export interface AuditLogEntry {
10
+ timestamp: string;
11
+ tool: string;
12
+ user: string;
13
+ client: string;
14
+ operation: string;
15
+ args: Record<string, any>;
16
+ result: 'success' | 'error' | 'blocked';
17
+ errorCode?: string;
18
+ duration: number;
19
+ memoryUsage: {
20
+ rss: number;
21
+ heapUsed: number;
22
+ heapTotal: number;
23
+ };
24
+ }
25
+ export interface ComplianceConfig {
26
+ enableAuditLogging: boolean;
27
+ enableRateLimiting: boolean;
28
+ enableMemoryLimits: boolean;
29
+ enableInputSanitization: boolean;
30
+ maxMemoryMB: number;
31
+ auditLogRetentionDays: number;
32
+ }
33
+ export declare class SecurityManager {
34
+ private rateLimitStore;
35
+ private auditLog;
36
+ private complianceConfig;
37
+ constructor(config?: Partial<ComplianceConfig>);
38
+ /**
39
+ * Rate limiting implementation
40
+ */
41
+ checkRateLimit(identifier: string, config?: RateLimitConfig): {
42
+ allowed: boolean;
43
+ remaining: number;
44
+ resetTime: number;
45
+ blockedUntil?: number;
46
+ };
47
+ /**
48
+ * Input sanitization for file patterns and paths
49
+ */
50
+ sanitizeInput(input: string, type: 'filespec' | 'pattern' | 'path'): {
51
+ sanitized: string;
52
+ valid: boolean;
53
+ warnings: string[];
54
+ };
55
+ /**
56
+ * Memory usage monitoring and limits
57
+ */
58
+ checkMemoryUsage(): {
59
+ withinLimits: boolean;
60
+ usage: NodeJS.MemoryUsage;
61
+ warnings: string[];
62
+ };
63
+ /**
64
+ * Force garbage collection if available (requires --expose-gc)
65
+ */
66
+ forceGarbageCollection(): boolean;
67
+ /**
68
+ * Audit logging
69
+ */
70
+ logAuditEntry(entry: Omit<AuditLogEntry, 'timestamp' | 'memoryUsage'>): void;
71
+ /**
72
+ * Get audit log entries
73
+ */
74
+ getAuditLog(filter?: {
75
+ tool?: string;
76
+ user?: string;
77
+ result?: 'success' | 'error' | 'blocked';
78
+ since?: Date;
79
+ }): AuditLogEntry[];
80
+ /**
81
+ * Clean up old audit log entries
82
+ */
83
+ private cleanupAuditLogs;
84
+ /**
85
+ * Export audit log for compliance reporting
86
+ */
87
+ exportAuditLog(format?: 'json' | 'csv'): string;
88
+ /**
89
+ * Get compliance configuration
90
+ */
91
+ getComplianceConfig(): ComplianceConfig;
92
+ /**
93
+ * Update compliance configuration
94
+ */
95
+ updateComplianceConfig(config: Partial<ComplianceConfig>): void;
96
+ }
97
+ export declare const securityManager: SecurityManager;
98
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/p4/security.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,uBAAuB,EAAE,OAAO,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAkF;IACxG,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAiBlD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,eAI1C,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;IAgDrF;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAwD9H;;OAEG;IACH,gBAAgB,IAAI;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE;IAwB5F;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAQjC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,GAAG,aAAa,CAAC,GAAG,IAAI;IA8B5E;;OAEG;IACH,WAAW,CAAC,MAAM,CAAC,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACzC,KAAK,CAAC,EAAE,IAAI,CAAC;KACd,GAAG,aAAa,EAAE;IAqBnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,cAAc,CAAC,MAAM,GAAE,MAAM,GAAG,KAAc,GAAG,MAAM;IAuBvD;;OAEG;IACH,mBAAmB,IAAI,gBAAgB;IAIvC;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI;CAGhE;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ /**
3
+ * Security and compliance utilities for MCP Perforce server
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.securityManager = exports.SecurityManager = void 0;
40
+ const path = __importStar(require("path"));
41
+ class SecurityManager {
42
+ constructor(config = {}) {
43
+ this.rateLimitStore = new Map();
44
+ this.auditLog = [];
45
+ this.complianceConfig = {
46
+ enableAuditLogging: process.env.P4_ENABLE_AUDIT_LOGGING === 'true',
47
+ enableRateLimiting: process.env.P4_ENABLE_RATE_LIMITING !== 'false',
48
+ enableMemoryLimits: process.env.P4_ENABLE_MEMORY_LIMITS !== 'false',
49
+ enableInputSanitization: process.env.P4_ENABLE_INPUT_SANITIZATION !== 'false',
50
+ maxMemoryMB: parseInt(process.env.P4_MAX_MEMORY_MB || '512'),
51
+ auditLogRetentionDays: parseInt(process.env.P4_AUDIT_RETENTION_DAYS || '90'),
52
+ ...config,
53
+ };
54
+ // Clean up audit logs periodically
55
+ if (this.complianceConfig.enableAuditLogging) {
56
+ setInterval(() => this.cleanupAuditLogs(), 24 * 60 * 60 * 1000); // Daily cleanup
57
+ }
58
+ }
59
+ /**
60
+ * Rate limiting implementation
61
+ */
62
+ checkRateLimit(identifier, config = {
63
+ maxRequests: parseInt(process.env.P4_RATE_LIMIT_REQUESTS || '100'),
64
+ windowMs: parseInt(process.env.P4_RATE_LIMIT_WINDOW_MS || '600000'), // 10 minutes
65
+ blockDurationMs: parseInt(process.env.P4_RATE_LIMIT_BLOCK_MS || '3600000'), // 1 hour
66
+ }) {
67
+ if (!this.complianceConfig.enableRateLimiting) {
68
+ return { allowed: true, remaining: config.maxRequests, resetTime: Date.now() + config.windowMs };
69
+ }
70
+ const now = Date.now();
71
+ const record = this.rateLimitStore.get(identifier);
72
+ // Check if currently blocked
73
+ if (record?.blockedUntil && now < record.blockedUntil) {
74
+ return {
75
+ allowed: false,
76
+ remaining: 0,
77
+ resetTime: record.resetTime,
78
+ blockedUntil: record.blockedUntil,
79
+ };
80
+ }
81
+ // Reset window if expired
82
+ if (!record || now > record.resetTime) {
83
+ this.rateLimitStore.set(identifier, {
84
+ count: 1,
85
+ resetTime: now + config.windowMs,
86
+ });
87
+ return { allowed: true, remaining: config.maxRequests - 1, resetTime: now + config.windowMs };
88
+ }
89
+ // Increment counter
90
+ record.count++;
91
+ // Check if limit exceeded
92
+ if (record.count > config.maxRequests) {
93
+ record.blockedUntil = now + config.blockDurationMs;
94
+ return {
95
+ allowed: false,
96
+ remaining: 0,
97
+ resetTime: record.resetTime,
98
+ blockedUntil: record.blockedUntil,
99
+ };
100
+ }
101
+ return {
102
+ allowed: true,
103
+ remaining: config.maxRequests - record.count,
104
+ resetTime: record.resetTime,
105
+ };
106
+ }
107
+ /**
108
+ * Input sanitization for file patterns and paths
109
+ */
110
+ sanitizeInput(input, type) {
111
+ if (!this.complianceConfig.enableInputSanitization) {
112
+ return { sanitized: input, valid: true, warnings: [] };
113
+ }
114
+ const warnings = [];
115
+ let sanitized = input.trim();
116
+ switch (type) {
117
+ case 'filespec':
118
+ // Perforce filespec validation - prevent dangerous patterns
119
+ if (sanitized.includes('..') && !sanitized.startsWith('//')) {
120
+ warnings.push('Relative path traversal detected in filespec');
121
+ }
122
+ if (sanitized.includes('*') && sanitized.includes('..')) {
123
+ warnings.push('Wildcard with path traversal detected');
124
+ }
125
+ // Remove potentially dangerous characters
126
+ sanitized = sanitized.replace(/[<>|;&$]/g, '');
127
+ break;
128
+ case 'pattern':
129
+ // Regex pattern validation for grep operations
130
+ if (sanitized.length > 1000) {
131
+ warnings.push('Pattern too long, truncated to 1000 characters');
132
+ sanitized = sanitized.substring(0, 1000);
133
+ }
134
+ // Basic regex safety checks
135
+ const dangerousPatterns = [
136
+ /\\0/, // Null bytes
137
+ /\(\?\</, // Lookbehinds (can cause ReDoS)
138
+ /(x*)*y/, // Potential ReDoS patterns
139
+ ];
140
+ for (const pattern of dangerousPatterns) {
141
+ if (pattern.test(sanitized)) {
142
+ warnings.push('Potentially dangerous regex pattern detected');
143
+ }
144
+ }
145
+ break;
146
+ case 'path':
147
+ // File path validation
148
+ if (path.isAbsolute(sanitized) && !sanitized.startsWith('//')) {
149
+ warnings.push('Absolute path detected, ensure it\'s intended');
150
+ }
151
+ if (sanitized.includes('\0')) {
152
+ warnings.push('Null bytes detected in path');
153
+ sanitized = sanitized.replace(/\0/g, '');
154
+ }
155
+ break;
156
+ }
157
+ const valid = warnings.length === 0 || warnings.every(w => !w.includes('dangerous'));
158
+ return { sanitized, valid, warnings };
159
+ }
160
+ /**
161
+ * Memory usage monitoring and limits
162
+ */
163
+ checkMemoryUsage() {
164
+ if (!this.complianceConfig.enableMemoryLimits) {
165
+ return { withinLimits: true, usage: process.memoryUsage(), warnings: [] };
166
+ }
167
+ const usage = process.memoryUsage();
168
+ const maxBytes = this.complianceConfig.maxMemoryMB * 1024 * 1024;
169
+ const warnings = [];
170
+ if (usage.rss > maxBytes) {
171
+ warnings.push(`RSS memory usage (${Math.round(usage.rss / 1024 / 1024)}MB) exceeds limit (${this.complianceConfig.maxMemoryMB}MB)`);
172
+ }
173
+ if (usage.heapUsed > maxBytes * 0.8) {
174
+ warnings.push(`Heap usage (${Math.round(usage.heapUsed / 1024 / 1024)}MB) near limit (${this.complianceConfig.maxMemoryMB}MB)`);
175
+ }
176
+ return {
177
+ withinLimits: warnings.length === 0,
178
+ usage,
179
+ warnings,
180
+ };
181
+ }
182
+ /**
183
+ * Force garbage collection if available (requires --expose-gc)
184
+ */
185
+ forceGarbageCollection() {
186
+ if (typeof global.gc === 'function') {
187
+ global.gc();
188
+ return true;
189
+ }
190
+ return false;
191
+ }
192
+ /**
193
+ * Audit logging
194
+ */
195
+ logAuditEntry(entry) {
196
+ if (!this.complianceConfig.enableAuditLogging) {
197
+ return;
198
+ }
199
+ const auditEntry = {
200
+ ...entry,
201
+ timestamp: new Date().toISOString(),
202
+ memoryUsage: process.memoryUsage(),
203
+ };
204
+ this.auditLog.push(auditEntry);
205
+ // Keep only recent entries
206
+ const cutoffTime = Date.now() - (this.complianceConfig.auditLogRetentionDays * 24 * 60 * 60 * 1000);
207
+ this.auditLog = this.auditLog.filter(entry => new Date(entry.timestamp).getTime() > cutoffTime);
208
+ // Log to console if debug enabled
209
+ if (process.env.LOG_LEVEL === 'debug') {
210
+ console.error('[AUDIT]', JSON.stringify({
211
+ ...auditEntry,
212
+ memoryUsage: {
213
+ rss: Math.round(auditEntry.memoryUsage.rss / 1024 / 1024),
214
+ heapUsed: Math.round(auditEntry.memoryUsage.heapUsed / 1024 / 1024),
215
+ heapTotal: Math.round(auditEntry.memoryUsage.heapTotal / 1024 / 1024),
216
+ },
217
+ }));
218
+ }
219
+ }
220
+ /**
221
+ * Get audit log entries
222
+ */
223
+ getAuditLog(filter) {
224
+ let filtered = this.auditLog;
225
+ if (filter) {
226
+ if (filter.tool) {
227
+ filtered = filtered.filter(entry => entry.tool === filter.tool);
228
+ }
229
+ if (filter.user) {
230
+ filtered = filtered.filter(entry => entry.user === filter.user);
231
+ }
232
+ if (filter.result) {
233
+ filtered = filtered.filter(entry => entry.result === filter.result);
234
+ }
235
+ if (filter.since) {
236
+ filtered = filtered.filter(entry => new Date(entry.timestamp) >= filter.since);
237
+ }
238
+ }
239
+ return filtered.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
240
+ }
241
+ /**
242
+ * Clean up old audit log entries
243
+ */
244
+ cleanupAuditLogs() {
245
+ const cutoffTime = Date.now() - (this.complianceConfig.auditLogRetentionDays * 24 * 60 * 60 * 1000);
246
+ const beforeCount = this.auditLog.length;
247
+ this.auditLog = this.auditLog.filter(entry => new Date(entry.timestamp).getTime() > cutoffTime);
248
+ const afterCount = this.auditLog.length;
249
+ if (beforeCount !== afterCount) {
250
+ console.error(`[AUDIT] Cleaned up ${beforeCount - afterCount} old audit log entries`);
251
+ }
252
+ }
253
+ /**
254
+ * Export audit log for compliance reporting
255
+ */
256
+ exportAuditLog(format = 'json') {
257
+ if (format === 'csv') {
258
+ const headers = ['timestamp', 'tool', 'user', 'client', 'operation', 'result', 'errorCode', 'duration', 'rss', 'heapUsed', 'heapTotal'];
259
+ const rows = this.auditLog.map(entry => [
260
+ entry.timestamp,
261
+ entry.tool,
262
+ entry.user,
263
+ entry.client,
264
+ entry.operation,
265
+ entry.result,
266
+ entry.errorCode || '',
267
+ entry.duration.toString(),
268
+ Math.round(entry.memoryUsage.rss / 1024 / 1024).toString(),
269
+ Math.round(entry.memoryUsage.heapUsed / 1024 / 1024).toString(),
270
+ Math.round(entry.memoryUsage.heapTotal / 1024 / 1024).toString(),
271
+ ]);
272
+ return [headers, ...rows].map(row => row.map(cell => `"${cell}"`).join(',')).join('\n');
273
+ }
274
+ return JSON.stringify(this.auditLog, null, 2);
275
+ }
276
+ /**
277
+ * Get compliance configuration
278
+ */
279
+ getComplianceConfig() {
280
+ return { ...this.complianceConfig };
281
+ }
282
+ /**
283
+ * Update compliance configuration
284
+ */
285
+ updateComplianceConfig(config) {
286
+ this.complianceConfig = { ...this.complianceConfig, ...config };
287
+ }
288
+ }
289
+ exports.SecurityManager = SecurityManager;
290
+ // Global security manager instance
291
+ exports.securityManager = new SecurityManager();
292
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/p4/security.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAmCA,cAAM,iBAAiB;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAc;;IAyB7B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IA0anB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B;AA8CD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAqCA,cAAM,iBAAiB;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAc;;IA0B7B,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,iBAAiB;IAsjCnB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B;AAkED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}