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.
@@ -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":"AAAA;;;;GAIG;AAGH,OAAO,SAAS,MAAM,oBAAoB,CAAC;AAyB3C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAW,GAAG,GAAG,EACjB,QAAQ,GAAG,KAAK;IAEhB,OAAO,SAAS,CAAC;QACf,QAAQ;QACR,GAAG,EAAE,WAAW;QAChB,0EAA0E;QAC1E,iFAAiF;QACjF,QAAQ,EAAE,EAAE,sBAAsB,EAAE,KAAK,EAAE;QAC3C,OAAO,EAAE;YACP,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,gCAAgC,WAAW,iBAAiB,QAAQ,GAAG,IAAI,WAAW;SAChG;QACD,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,KAAK;QACpB,iEAAiE;QACjE,YAAY,EAAE,CAAC,GAAY,EAAU,EAAE;YACrC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAClC,0CAA0C;gBAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;QACzD,CAAC;QACD,uCAAuC;QACvC,IAAI,EAAE,CAAC,GAAY,EAAW,EAAE;YAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;QAChE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa;IAK3B,OAAO,CAAC,GAAiB,EAAE,IAAc,EAAE,IAAkB,EAAQ,EAAE;QACrE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAK5B,OAAO,CAAC,GAAiB,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QACpE,iCAAiC;QACjC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,MAAM,QAAQ,GAAoB;gBAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,UAAU;gBACtB,QAAQ;gBACR,EAAE,EACA,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,QAAQ;oBACjD,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBACrD,CAAC,CAAC,SAAS,CAAC;oBACd,GAAG,CAAC,EAAE;oBACN,GAAG,CAAC,MAAM,CAAC,aAAa;oBACxB,SAAS;aACZ,CAAC;YAEF,+CAA+C;YAC/C,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBACtB,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC;YACpC,CAAC;YAED,0DAA0D;YAC1D,uCAAuC;YACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAK5B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAC/D,gDAAgD;QAChD,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,CAAC;QAC5E,GAAG,CAAC,SAAS,CACX,8BAA8B,EAC9B,sEAAsE,CACvE,CAAC;QACF,GAAG,CAAC,SAAS,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,CAAC;QACjE,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAEjD,4BAA4B;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAM1B,OAAO,CACL,GAAU,EACV,IAAa,EACb,GAAa,EACb,KAAmB,EACb,EAAE;QACR,sBAAsB;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CACrG,CAAC;QAEF,0CAA0C;QAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,uBAAuB;gBAC9B,OAAO,EACL,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;oBACnC,CAAC,CAAC,8BAA8B;oBAChC,CAAC,CAAC,GAAG,CAAC,OAAO;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}