mcp-macos 2.1.5 → 3.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.
- package/README.md +7 -60
- package/dist/config/index.d.ts +5 -32
- package/dist/config/index.js +5 -112
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +1 -144
- package/dist/config/schema.js +1 -34
- package/dist/config/schema.js.map +1 -1
- package/dist/index.d.ts +1 -6
- package/dist/index.js +5 -46
- package/dist/index.js.map +1 -1
- package/dist/utils/errorHandling.js +1 -1
- package/dist/utils/errorHandling.js.map +1 -1
- package/package.json +2 -9
- package/dist/server/transports/http/auth.d.ts +0 -34
- package/dist/server/transports/http/auth.js +0 -148
- package/dist/server/transports/http/auth.js.map +0 -1
- package/dist/server/transports/http/health.d.ts +0 -35
- package/dist/server/transports/http/health.js +0 -93
- package/dist/server/transports/http/health.js.map +0 -1
- package/dist/server/transports/http/index.d.ts +0 -43
- package/dist/server/transports/http/index.js +0 -147
- package/dist/server/transports/http/index.js.map +0 -1
- package/dist/server/transports/http/middleware.d.ts +0 -53
- package/dist/server/transports/http/middleware.js +0 -133
- package/dist/server/transports/http/middleware.js.map +0 -1
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview HTTP middleware for rate limiting, logging, and CORS
|
|
3
|
-
* @module server/transports/http/middleware
|
|
4
|
-
* @description Express middleware stack for the HTTP transport
|
|
5
|
-
*/
|
|
6
|
-
import rateLimit from 'express-rate-limit';
|
|
7
|
-
/**
|
|
8
|
-
* Creates a rate limiter middleware
|
|
9
|
-
* Default: 100 requests per minute per IP
|
|
10
|
-
*
|
|
11
|
-
* @param maxRequests - Maximum requests per window (default: 100)
|
|
12
|
-
* @param windowMs - Window size in milliseconds (default: 60000 = 1 minute)
|
|
13
|
-
* @returns Express rate limiting middleware
|
|
14
|
-
*/
|
|
15
|
-
export function createRateLimiter(maxRequests = 100, windowMs = 60000) {
|
|
16
|
-
return rateLimit({
|
|
17
|
-
windowMs,
|
|
18
|
-
max: maxRequests,
|
|
19
|
-
// Suppress ERR_ERL_KEY_GEN_IPV6 ValidationError — we're behind Cloudflare
|
|
20
|
-
// Tunnel which always provides X-Forwarded-For, so IPv6 validation is irrelevant
|
|
21
|
-
validate: { keyGeneratorIpFallback: false },
|
|
22
|
-
message: {
|
|
23
|
-
error: 'Too Many Requests',
|
|
24
|
-
message: `Rate limit exceeded. Maximum ${maxRequests} requests per ${windowMs / 1000} seconds.`,
|
|
25
|
-
},
|
|
26
|
-
standardHeaders: true,
|
|
27
|
-
legacyHeaders: false,
|
|
28
|
-
// Use X-Forwarded-For header if behind proxy (Cloudflare Tunnel)
|
|
29
|
-
keyGenerator: (req) => {
|
|
30
|
-
const forwarded = req.headers['x-forwarded-for'];
|
|
31
|
-
if (typeof forwarded === 'string') {
|
|
32
|
-
// Take the first IP if there are multiple
|
|
33
|
-
return forwarded.split(',')[0].trim();
|
|
34
|
-
}
|
|
35
|
-
return req.ip ?? req.socket.remoteAddress ?? 'unknown';
|
|
36
|
-
},
|
|
37
|
-
// Skip rate limiting for health checks
|
|
38
|
-
skip: (req) => {
|
|
39
|
-
return req.path === '/health' || req.path === '/health/ready';
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Request timing middleware
|
|
45
|
-
* Adds startTime to request for duration calculation
|
|
46
|
-
*
|
|
47
|
-
* @returns Express middleware function
|
|
48
|
-
*/
|
|
49
|
-
export function requestTiming() {
|
|
50
|
-
return (req, _res, next) => {
|
|
51
|
-
req.startTime = Date.now();
|
|
52
|
-
next();
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Request logging middleware
|
|
57
|
-
* Logs request details after response is sent
|
|
58
|
-
*
|
|
59
|
-
* @returns Express middleware function
|
|
60
|
-
*/
|
|
61
|
-
export function requestLogging() {
|
|
62
|
-
return (req, res, next) => {
|
|
63
|
-
// Log after response is finished
|
|
64
|
-
res.on('finish', () => {
|
|
65
|
-
const duration = req.startTime ? Date.now() - req.startTime : 0;
|
|
66
|
-
const logEntry = {
|
|
67
|
-
timestamp: new Date().toISOString(),
|
|
68
|
-
method: req.method,
|
|
69
|
-
path: req.path,
|
|
70
|
-
status: res.statusCode,
|
|
71
|
-
duration,
|
|
72
|
-
ip: (typeof req.headers['x-forwarded-for'] === 'string'
|
|
73
|
-
? req.headers['x-forwarded-for'].split(',')[0].trim()
|
|
74
|
-
: undefined) ??
|
|
75
|
-
req.ip ??
|
|
76
|
-
req.socket.remoteAddress ??
|
|
77
|
-
'unknown',
|
|
78
|
-
};
|
|
79
|
-
// Add user if available from Cloudflare Access
|
|
80
|
-
if (req.cfAccessEmail) {
|
|
81
|
-
logEntry.user = req.cfAccessEmail;
|
|
82
|
-
}
|
|
83
|
-
// Log to stderr to avoid interfering with stdio transport
|
|
84
|
-
// Use structured JSON for easy parsing
|
|
85
|
-
process.stderr.write(`${JSON.stringify(logEntry)}\n`);
|
|
86
|
-
});
|
|
87
|
-
next();
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* CORS middleware for handling preflight requests
|
|
92
|
-
* Configured for Cloudflare Tunnel / Access
|
|
93
|
-
*
|
|
94
|
-
* @returns Express middleware function
|
|
95
|
-
*/
|
|
96
|
-
export function corsMiddleware() {
|
|
97
|
-
return (req, res, next) => {
|
|
98
|
-
// Allow requests from same origin or Cloudflare
|
|
99
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
100
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
|
|
101
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Cf-Access-Jwt-Assertion, Mcp-Session-Id, Last-Event-Id');
|
|
102
|
-
res.setHeader('Access-Control-Expose-Headers', 'Mcp-Session-Id');
|
|
103
|
-
res.setHeader('Access-Control-Max-Age', '86400');
|
|
104
|
-
// Handle preflight requests
|
|
105
|
-
if (req.method === 'OPTIONS') {
|
|
106
|
-
res.status(204).end();
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
next();
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Error handling middleware
|
|
114
|
-
* Catches unhandled errors and returns appropriate response
|
|
115
|
-
*
|
|
116
|
-
* @returns Express error handling middleware
|
|
117
|
-
*/
|
|
118
|
-
export function errorHandler() {
|
|
119
|
-
return (err, _req, res, _next) => {
|
|
120
|
-
// Log error to stderr
|
|
121
|
-
process.stderr.write(`${JSON.stringify({ timestamp: new Date().toISOString(), error: err.message, stack: err.stack })}\n`);
|
|
122
|
-
// Send error response if not already sent
|
|
123
|
-
if (!res.headersSent) {
|
|
124
|
-
res.status(500).json({
|
|
125
|
-
error: 'Internal Server Error',
|
|
126
|
-
message: process.env.NODE_ENV === 'production'
|
|
127
|
-
? 'An unexpected error occurred'
|
|
128
|
-
: err.message,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=middleware.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/server/transports/http/middleware.ts"],"names":[],"mappings":"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"}
|