@stackmemoryai/stackmemory 0.2.4 → 0.2.6

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 (179) hide show
  1. package/README.md +108 -0
  2. package/dist/index.js +382 -0
  3. package/dist/src/analytics/api/analytics-api.d.ts +24 -0
  4. package/dist/src/analytics/api/analytics-api.d.ts.map +1 -0
  5. package/dist/src/analytics/api/analytics-api.js +279 -0
  6. package/dist/src/analytics/api/analytics-api.js.map +1 -0
  7. package/dist/src/analytics/core/analytics-service.d.ts +23 -0
  8. package/dist/src/analytics/core/analytics-service.d.ts.map +1 -0
  9. package/dist/src/analytics/core/analytics-service.js +160 -0
  10. package/dist/src/analytics/core/analytics-service.js.map +1 -0
  11. package/dist/src/analytics/index.d.ts +12 -0
  12. package/dist/src/analytics/index.d.ts.map +1 -0
  13. package/dist/src/analytics/index.js +11 -0
  14. package/dist/src/analytics/index.js.map +1 -0
  15. package/dist/src/analytics/queries/metrics-queries.d.ts +11 -0
  16. package/dist/src/analytics/queries/metrics-queries.d.ts.map +1 -0
  17. package/dist/src/analytics/queries/metrics-queries.js +179 -0
  18. package/dist/src/analytics/queries/metrics-queries.js.map +1 -0
  19. package/dist/src/analytics/types/metrics.d.ts +60 -0
  20. package/dist/src/analytics/types/metrics.d.ts.map +1 -0
  21. package/dist/src/analytics/types/metrics.js +2 -0
  22. package/dist/src/analytics/types/metrics.js.map +1 -0
  23. package/dist/src/cli/analytics-viewer.d.ts +3 -0
  24. package/dist/src/cli/analytics-viewer.d.ts.map +1 -0
  25. package/dist/src/cli/analytics-viewer.js +89 -0
  26. package/dist/src/cli/analytics-viewer.js.map +1 -0
  27. package/dist/src/cli/browser-test.d.ts +6 -0
  28. package/dist/src/cli/browser-test.d.ts.map +1 -0
  29. package/dist/src/cli/browser-test.js +32 -0
  30. package/dist/src/cli/browser-test.js.map +1 -0
  31. package/dist/src/cli/cli.js +157 -0
  32. package/dist/src/cli/cli.js.map +1 -1
  33. package/dist/src/cli/commands/projects.d.ts +8 -0
  34. package/dist/src/cli/commands/projects.d.ts.map +1 -0
  35. package/dist/src/cli/commands/projects.js +220 -0
  36. package/dist/src/cli/commands/projects.js.map +1 -0
  37. package/dist/src/cli/index.d.ts +7 -0
  38. package/dist/src/cli/index.d.ts.map +1 -0
  39. package/dist/src/cli/index.js +704 -0
  40. package/dist/src/cli/index.js.map +1 -0
  41. package/dist/src/cli/project-commands.d.ts +8 -0
  42. package/dist/src/cli/project-commands.d.ts.map +1 -0
  43. package/dist/src/cli/project-commands.js +212 -0
  44. package/dist/src/cli/project-commands.js.map +1 -0
  45. package/dist/src/cli/utils/viewer.d.ts +3 -0
  46. package/dist/src/cli/utils/viewer.d.ts.map +1 -0
  47. package/dist/src/cli/utils/viewer.js +89 -0
  48. package/dist/src/cli/utils/viewer.js.map +1 -0
  49. package/dist/src/core/context/frame-manager.d.ts +106 -0
  50. package/dist/src/core/context/frame-manager.d.ts.map +1 -0
  51. package/dist/src/core/context/frame-manager.js +387 -0
  52. package/dist/src/core/context/frame-manager.js.map +1 -0
  53. package/dist/src/core/logger.test.js +1 -1
  54. package/dist/src/core/logger.test.js.map +1 -1
  55. package/dist/src/core/monitoring/error-handler.d.ts +46 -0
  56. package/dist/src/core/monitoring/error-handler.d.ts.map +1 -0
  57. package/dist/src/core/monitoring/error-handler.js +212 -0
  58. package/dist/src/core/monitoring/error-handler.js.map +1 -0
  59. package/dist/src/core/monitoring/logger.d.ts +24 -0
  60. package/dist/src/core/monitoring/logger.d.ts.map +1 -0
  61. package/dist/src/core/monitoring/logger.js +121 -0
  62. package/dist/src/core/monitoring/logger.js.map +1 -0
  63. package/dist/src/core/monitoring/metrics.d.ts +7 -0
  64. package/dist/src/core/monitoring/metrics.d.ts.map +1 -0
  65. package/dist/src/core/monitoring/metrics.js +13 -0
  66. package/dist/src/core/monitoring/metrics.js.map +1 -0
  67. package/dist/src/core/monitoring/progress-tracker.d.ts +95 -0
  68. package/dist/src/core/monitoring/progress-tracker.d.ts.map +1 -0
  69. package/dist/src/core/monitoring/progress-tracker.js +178 -0
  70. package/dist/src/core/monitoring/progress-tracker.js.map +1 -0
  71. package/dist/src/core/project-manager.d.ts +130 -0
  72. package/dist/src/core/project-manager.d.ts.map +1 -0
  73. package/dist/src/core/project-manager.js +582 -0
  74. package/dist/src/core/project-manager.js.map +1 -0
  75. package/dist/src/core/projects/project-manager.d.ts +130 -0
  76. package/dist/src/core/projects/project-manager.d.ts.map +1 -0
  77. package/dist/src/core/projects/project-manager.js +591 -0
  78. package/dist/src/core/projects/project-manager.js.map +1 -0
  79. package/dist/src/core/utils/update-checker.d.ts +38 -0
  80. package/dist/src/core/utils/update-checker.d.ts.map +1 -0
  81. package/dist/src/core/utils/update-checker.js +156 -0
  82. package/dist/src/core/utils/update-checker.js.map +1 -0
  83. package/dist/src/features/analytics/api/analytics-api.d.ts +24 -0
  84. package/dist/src/features/analytics/api/analytics-api.d.ts.map +1 -0
  85. package/dist/src/features/analytics/api/analytics-api.js +289 -0
  86. package/dist/src/features/analytics/api/analytics-api.js.map +1 -0
  87. package/dist/src/features/analytics/core/analytics-service.d.ts +23 -0
  88. package/dist/src/features/analytics/core/analytics-service.d.ts.map +1 -0
  89. package/dist/src/features/analytics/core/analytics-service.js +160 -0
  90. package/dist/src/features/analytics/core/analytics-service.js.map +1 -0
  91. package/dist/src/features/analytics/index.d.ts +12 -0
  92. package/dist/src/features/analytics/index.d.ts.map +1 -0
  93. package/dist/src/features/analytics/index.js +11 -0
  94. package/dist/src/features/analytics/index.js.map +1 -0
  95. package/dist/src/features/analytics/queries/metrics-queries.d.ts +11 -0
  96. package/dist/src/features/analytics/queries/metrics-queries.d.ts.map +1 -0
  97. package/dist/src/features/analytics/queries/metrics-queries.js +183 -0
  98. package/dist/src/features/analytics/queries/metrics-queries.js.map +1 -0
  99. package/dist/src/features/analytics/types/metrics.d.ts +60 -0
  100. package/dist/src/features/analytics/types/metrics.d.ts.map +1 -0
  101. package/dist/src/features/analytics/types/metrics.js +2 -0
  102. package/dist/src/features/analytics/types/metrics.js.map +1 -0
  103. package/dist/src/features/browser/browser-mcp.d.ts +94 -0
  104. package/dist/src/features/browser/browser-mcp.d.ts.map +1 -0
  105. package/dist/src/features/browser/browser-mcp.js +456 -0
  106. package/dist/src/features/browser/browser-mcp.js.map +1 -0
  107. package/dist/src/features/tasks/pebbles-task-store.d.ts +117 -0
  108. package/dist/src/features/tasks/pebbles-task-store.d.ts.map +1 -0
  109. package/dist/src/features/tasks/pebbles-task-store.js +335 -0
  110. package/dist/src/features/tasks/pebbles-task-store.js.map +1 -0
  111. package/dist/src/features/tasks/task-aware-context.d.ts +103 -0
  112. package/dist/src/features/tasks/task-aware-context.d.ts.map +1 -0
  113. package/dist/src/features/tasks/task-aware-context.js +412 -0
  114. package/dist/src/features/tasks/task-aware-context.js.map +1 -0
  115. package/dist/src/index.d.ts +4 -4
  116. package/dist/src/index.d.ts.map +1 -1
  117. package/dist/src/index.js +4 -4
  118. package/dist/src/index.js.map +1 -1
  119. package/dist/src/integrations/browser-mcp.d.ts +94 -0
  120. package/dist/src/integrations/browser-mcp.d.ts.map +1 -0
  121. package/dist/src/integrations/browser-mcp.js +431 -0
  122. package/dist/src/integrations/browser-mcp.js.map +1 -0
  123. package/dist/src/integrations/linear/auth.d.ts +99 -0
  124. package/dist/src/integrations/linear/auth.d.ts.map +1 -0
  125. package/dist/src/integrations/linear/auth.js +319 -0
  126. package/dist/src/integrations/linear/auth.js.map +1 -0
  127. package/dist/src/integrations/linear/auto-sync.d.ts +77 -0
  128. package/dist/src/integrations/linear/auto-sync.d.ts.map +1 -0
  129. package/dist/src/integrations/linear/auto-sync.js +268 -0
  130. package/dist/src/integrations/linear/auto-sync.js.map +1 -0
  131. package/dist/src/integrations/linear/client.d.ts +86 -0
  132. package/dist/src/integrations/linear/client.d.ts.map +1 -0
  133. package/dist/src/integrations/linear/client.js +277 -0
  134. package/dist/src/integrations/linear/client.js.map +1 -0
  135. package/dist/src/integrations/linear/config.d.ts +51 -0
  136. package/dist/src/integrations/linear/config.d.ts.map +1 -0
  137. package/dist/src/integrations/linear/config.js +103 -0
  138. package/dist/src/integrations/linear/config.js.map +1 -0
  139. package/dist/src/integrations/linear/sync.d.ts +97 -0
  140. package/dist/src/integrations/linear/sync.d.ts.map +1 -0
  141. package/dist/src/integrations/linear/sync.js +391 -0
  142. package/dist/src/integrations/linear/sync.js.map +1 -0
  143. package/dist/src/integrations/mcp/server.d.ts +40 -0
  144. package/dist/src/integrations/mcp/server.d.ts.map +1 -0
  145. package/dist/src/integrations/mcp/server.js +828 -0
  146. package/dist/src/integrations/mcp/server.js.map +1 -0
  147. package/dist/src/mcp/mcp-server.d.ts +1 -0
  148. package/dist/src/mcp/mcp-server.d.ts.map +1 -1
  149. package/dist/src/mcp/mcp-server.js +11 -0
  150. package/dist/src/mcp/mcp-server.js.map +1 -1
  151. package/dist/src/railway/index.d.ts +7 -0
  152. package/dist/src/railway/index.d.ts.map +1 -0
  153. package/dist/src/railway/index.js +401 -0
  154. package/dist/src/railway/index.js.map +1 -0
  155. package/dist/src/runway/auth/auth-middleware.d.ts +66 -0
  156. package/dist/src/runway/auth/auth-middleware.d.ts.map +1 -0
  157. package/dist/src/runway/auth/auth-middleware.js +337 -0
  158. package/dist/src/runway/auth/auth-middleware.js.map +1 -0
  159. package/dist/src/runway/server/runway-mcp-server.d.ts +46 -0
  160. package/dist/src/runway/server/runway-mcp-server.d.ts.map +1 -0
  161. package/dist/src/runway/server/runway-mcp-server.js +601 -0
  162. package/dist/src/runway/server/runway-mcp-server.js.map +1 -0
  163. package/dist/src/runway.bak/auth/auth-middleware.d.ts +66 -0
  164. package/dist/src/runway.bak/auth/auth-middleware.d.ts.map +1 -0
  165. package/dist/src/runway.bak/auth/auth-middleware.js +337 -0
  166. package/dist/src/runway.bak/auth/auth-middleware.js.map +1 -0
  167. package/dist/src/runway.bak/server/runway-mcp-server.d.ts +46 -0
  168. package/dist/src/runway.bak/server/runway-mcp-server.d.ts.map +1 -0
  169. package/dist/src/runway.bak/server/runway-mcp-server.js +601 -0
  170. package/dist/src/runway.bak/server/runway-mcp-server.js.map +1 -0
  171. package/dist/src/servers/production/auth-middleware.d.ts +66 -0
  172. package/dist/src/servers/production/auth-middleware.d.ts.map +1 -0
  173. package/dist/src/servers/production/auth-middleware.js +346 -0
  174. package/dist/src/servers/production/auth-middleware.js.map +1 -0
  175. package/dist/src/servers/railway/index.d.ts +7 -0
  176. package/dist/src/servers/railway/index.d.ts.map +1 -0
  177. package/dist/src/servers/railway/index.js +401 -0
  178. package/dist/src/servers/railway/index.js.map +1 -0
  179. package/package.json +27 -5
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Production Authentication Middleware for Runway MCP Server
3
+ * Implements JWT validation with Auth0, refresh tokens, and rate limiting
4
+ */
5
+ import { Request, Response, NextFunction } from 'express';
6
+ import { RateLimiterRes } from 'rate-limiter-flexible';
7
+ export interface AuthUser {
8
+ id: string;
9
+ email: string;
10
+ sub: string;
11
+ name?: string;
12
+ picture?: string;
13
+ tier: 'free' | 'pro' | 'enterprise';
14
+ organizations?: string[];
15
+ permissions: string[];
16
+ metadata?: Record<string, any>;
17
+ }
18
+ export interface AuthRequest extends Request {
19
+ user?: AuthUser;
20
+ rateLimitInfo?: RateLimiterRes;
21
+ }
22
+ export declare class AuthMiddleware {
23
+ private config;
24
+ private jwksClient;
25
+ private redis;
26
+ private rateLimiters;
27
+ private blacklistedTokens;
28
+ constructor(config: {
29
+ auth0Domain: string;
30
+ auth0Audience: string;
31
+ redisUrl: string;
32
+ jwtSecret?: string;
33
+ bypassAuth?: boolean;
34
+ });
35
+ private initializeRateLimiters;
36
+ private setupTokenBlacklistSync;
37
+ private getSigningKey;
38
+ /**
39
+ * Main authentication middleware
40
+ */
41
+ authenticate: (req: AuthRequest, res: Response, next: NextFunction) => Promise<void>;
42
+ /**
43
+ * WebSocket authentication handler
44
+ */
45
+ authenticateWebSocket: (token: string) => Promise<AuthUser | null>;
46
+ /**
47
+ * Permission checking middleware
48
+ */
49
+ requirePermission: (permission: string) => (req: AuthRequest, res: Response, next: NextFunction) => Response<any, Record<string, any>>;
50
+ /**
51
+ * Organization access middleware
52
+ */
53
+ requireOrganization: (req: AuthRequest, res: Response, next: NextFunction) => Response<any, Record<string, any>>;
54
+ private extractToken;
55
+ private loadUser;
56
+ private getMockUser;
57
+ /**
58
+ * Revoke a token (add to blacklist)
59
+ */
60
+ revokeToken(token: string): Promise<void>;
61
+ /**
62
+ * Cleanup resources
63
+ */
64
+ close(): Promise<void>;
65
+ }
66
+ //# sourceMappingURL=auth-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../../../src/runway/auth/auth-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKzE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,qBAAa,cAAc;IAOvB,OAAO,CAAC,MAAM;IANhB,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,iBAAiB,CAA0B;gBAGzC,MAAM,EAAE;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB;IAeH,OAAO,CAAC,sBAAsB;IAoC9B,OAAO,CAAC,uBAAuB;YAgBjB,aAAa;IAiB3B;;OAEG;IACI,YAAY,GACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,MAAM,YAAY,KACjB,OAAO,CAAC,IAAI,CAAC,CAgId;IAEF;;OAEG;IACI,qBAAqB,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAmB5E;IAEF;;OAEG;IACI,iBAAiB,GAAI,YAAY,MAAM,MACpC,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,wCAmB3D;IAEF;;OAEG;IACI,mBAAmB,GAAI,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,wCAkB/E;IAEF,OAAO,CAAC,YAAY;YAUN,QAAQ;IAwBtB,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IActD;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Production Authentication Middleware for Runway MCP Server
3
+ * Implements JWT validation with Auth0, refresh tokens, and rate limiting
4
+ */
5
+ import jwt from 'jsonwebtoken';
6
+ import jwksRsa from 'jwks-rsa';
7
+ import { RateLimiterRedis } from 'rate-limiter-flexible';
8
+ import Redis from 'ioredis';
9
+ import { logger } from '../monitoring/logger.js';
10
+ import { metrics } from '../monitoring/metrics.js';
11
+ export class AuthMiddleware {
12
+ config;
13
+ jwksClient;
14
+ redis;
15
+ rateLimiters;
16
+ blacklistedTokens = new Set();
17
+ constructor(config) {
18
+ this.config = config;
19
+ this.redis = new Redis(config.redisUrl);
20
+ this.jwksClient = jwksRsa({
21
+ jwksUri: `https://${config.auth0Domain}/.well-known/jwks.json`,
22
+ cache: true,
23
+ cacheMaxAge: 600000, // 10 minutes
24
+ rateLimit: true,
25
+ jwksRequestsPerMinute: 5
26
+ });
27
+ this.initializeRateLimiters();
28
+ this.setupTokenBlacklistSync();
29
+ }
30
+ initializeRateLimiters() {
31
+ // Different rate limits for different tiers
32
+ this.rateLimiters = new Map([
33
+ ['free', new RateLimiterRedis({
34
+ storeClient: this.redis,
35
+ keyPrefix: 'rl:free',
36
+ points: 100, // requests
37
+ duration: 900, // per 15 minutes
38
+ blockDuration: 900 // block for 15 minutes
39
+ })],
40
+ ['pro', new RateLimiterRedis({
41
+ storeClient: this.redis,
42
+ keyPrefix: 'rl:pro',
43
+ points: 1000,
44
+ duration: 900,
45
+ blockDuration: 300
46
+ })],
47
+ ['enterprise', new RateLimiterRedis({
48
+ storeClient: this.redis,
49
+ keyPrefix: 'rl:enterprise',
50
+ points: 10000,
51
+ duration: 900,
52
+ blockDuration: 60
53
+ })]
54
+ ]);
55
+ // Special rate limiter for auth endpoints
56
+ this.rateLimiters.set('auth', new RateLimiterRedis({
57
+ storeClient: this.redis,
58
+ keyPrefix: 'rl:auth',
59
+ points: 10, // Only 10 auth attempts
60
+ duration: 900,
61
+ blockDuration: 3600 // Block for 1 hour on excessive auth attempts
62
+ }));
63
+ }
64
+ setupTokenBlacklistSync() {
65
+ // Subscribe to token revocation events
66
+ const subscriber = new Redis(this.config.redisUrl);
67
+ subscriber.subscribe('token:revoked');
68
+ subscriber.on('message', (channel, token) => {
69
+ if (channel === 'token:revoked') {
70
+ this.blacklistedTokens.add(token);
71
+ // Clean up old tokens periodically
72
+ if (this.blacklistedTokens.size > 10000) {
73
+ this.blacklistedTokens.clear();
74
+ }
75
+ }
76
+ });
77
+ }
78
+ async getSigningKey(kid) {
79
+ return new Promise((resolve, reject) => {
80
+ this.jwksClient.getSigningKey(kid, (err, key) => {
81
+ if (err) {
82
+ reject(err);
83
+ }
84
+ else {
85
+ const signingKey = key?.getPublicKey();
86
+ if (!signingKey) {
87
+ reject(new Error('No signing key found'));
88
+ }
89
+ else {
90
+ resolve(signingKey);
91
+ }
92
+ }
93
+ });
94
+ });
95
+ }
96
+ /**
97
+ * Main authentication middleware
98
+ */
99
+ authenticate = async (req, res, next) => {
100
+ const startTime = Date.now();
101
+ try {
102
+ // Bypass auth for health checks
103
+ if (req.path === '/health' || req.path === '/metrics') {
104
+ return next();
105
+ }
106
+ // Development bypass
107
+ if (this.config.bypassAuth && process.env.NODE_ENV === 'development') {
108
+ req.user = this.getMockUser();
109
+ return next();
110
+ }
111
+ // Extract token
112
+ const token = this.extractToken(req);
113
+ if (!token) {
114
+ metrics.increment('auth.missing_token');
115
+ return res.status(401).json({
116
+ error: 'Authentication required',
117
+ code: 'MISSING_TOKEN'
118
+ });
119
+ }
120
+ // Check blacklist
121
+ if (this.blacklistedTokens.has(token)) {
122
+ metrics.increment('auth.blacklisted_token');
123
+ return res.status(401).json({
124
+ error: 'Token has been revoked',
125
+ code: 'TOKEN_REVOKED'
126
+ });
127
+ }
128
+ // Decode and verify token
129
+ const decoded = jwt.decode(token, { complete: true });
130
+ if (!decoded) {
131
+ metrics.increment('auth.invalid_token');
132
+ return res.status(401).json({
133
+ error: 'Invalid token format',
134
+ code: 'INVALID_TOKEN'
135
+ });
136
+ }
137
+ // Get signing key and verify
138
+ const signingKey = await this.getSigningKey(decoded.header.kid);
139
+ const verified = jwt.verify(token, signingKey, {
140
+ algorithms: ['RS256'],
141
+ audience: this.config.auth0Audience,
142
+ issuer: `https://${this.config.auth0Domain}/`
143
+ });
144
+ // Load user from database or cache
145
+ const user = await this.loadUser(verified.sub);
146
+ if (!user) {
147
+ metrics.increment('auth.user_not_found');
148
+ return res.status(403).json({
149
+ error: 'User not found',
150
+ code: 'USER_NOT_FOUND'
151
+ });
152
+ }
153
+ // Check user suspension
154
+ if (user.metadata?.suspended) {
155
+ metrics.increment('auth.user_suspended');
156
+ return res.status(403).json({
157
+ error: 'Account suspended',
158
+ code: 'ACCOUNT_SUSPENDED'
159
+ });
160
+ }
161
+ // Apply rate limiting
162
+ const rateLimiter = this.rateLimiters.get(user.tier) || this.rateLimiters.get('free');
163
+ try {
164
+ const rateLimitRes = await rateLimiter.consume(user.id);
165
+ req.rateLimitInfo = rateLimitRes;
166
+ // Add rate limit headers
167
+ res.setHeader('X-RateLimit-Limit', rateLimiter.points.toString());
168
+ res.setHeader('X-RateLimit-Remaining', rateLimitRes.remainingPoints.toString());
169
+ res.setHeader('X-RateLimit-Reset', new Date(Date.now() + rateLimitRes.msBeforeNext).toISOString());
170
+ }
171
+ catch (rateLimitError) {
172
+ metrics.increment('auth.rate_limited');
173
+ res.setHeader('Retry-After', Math.round(rateLimitError.msBeforeNext / 1000).toString());
174
+ return res.status(429).json({
175
+ error: 'Too many requests',
176
+ code: 'RATE_LIMITED',
177
+ retryAfter: rateLimitError.msBeforeNext
178
+ });
179
+ }
180
+ // Attach user to request
181
+ req.user = user;
182
+ // Track metrics
183
+ metrics.increment('auth.success', { tier: user.tier });
184
+ metrics.timing('auth.duration', Date.now() - startTime);
185
+ logger.info('Authentication successful', {
186
+ userId: user.id,
187
+ tier: user.tier,
188
+ path: req.path
189
+ });
190
+ next();
191
+ }
192
+ catch (error) {
193
+ metrics.increment('auth.error');
194
+ logger.error('Authentication error', error);
195
+ if (error.name === 'TokenExpiredError') {
196
+ return res.status(401).json({
197
+ error: 'Token expired',
198
+ code: 'TOKEN_EXPIRED'
199
+ });
200
+ }
201
+ if (error.name === 'JsonWebTokenError') {
202
+ return res.status(401).json({
203
+ error: 'Invalid token',
204
+ code: 'INVALID_TOKEN'
205
+ });
206
+ }
207
+ res.status(500).json({
208
+ error: 'Authentication failed',
209
+ code: 'AUTH_ERROR'
210
+ });
211
+ }
212
+ };
213
+ /**
214
+ * WebSocket authentication handler
215
+ */
216
+ authenticateWebSocket = async (token) => {
217
+ try {
218
+ const decoded = jwt.decode(token, { complete: true });
219
+ if (!decoded || this.blacklistedTokens.has(token)) {
220
+ return null;
221
+ }
222
+ const signingKey = await this.getSigningKey(decoded.header.kid);
223
+ const verified = jwt.verify(token, signingKey, {
224
+ algorithms: ['RS256'],
225
+ audience: this.config.auth0Audience,
226
+ issuer: `https://${this.config.auth0Domain}/`
227
+ });
228
+ return await this.loadUser(verified.sub);
229
+ }
230
+ catch (error) {
231
+ logger.error('WebSocket authentication failed', error);
232
+ return null;
233
+ }
234
+ };
235
+ /**
236
+ * Permission checking middleware
237
+ */
238
+ requirePermission = (permission) => {
239
+ return (req, res, next) => {
240
+ if (!req.user) {
241
+ return res.status(401).json({
242
+ error: 'Authentication required',
243
+ code: 'NOT_AUTHENTICATED'
244
+ });
245
+ }
246
+ if (!req.user.permissions.includes(permission)) {
247
+ metrics.increment('auth.permission_denied', { permission });
248
+ return res.status(403).json({
249
+ error: 'Insufficient permissions',
250
+ code: 'PERMISSION_DENIED',
251
+ required: permission
252
+ });
253
+ }
254
+ next();
255
+ };
256
+ };
257
+ /**
258
+ * Organization access middleware
259
+ */
260
+ requireOrganization = (req, res, next) => {
261
+ const orgId = req.params.orgId || req.query.orgId;
262
+ if (!req.user || !orgId) {
263
+ return res.status(401).json({
264
+ error: 'Authentication required',
265
+ code: 'NOT_AUTHENTICATED'
266
+ });
267
+ }
268
+ if (!req.user.organizations?.includes(orgId)) {
269
+ return res.status(403).json({
270
+ error: 'Organization access denied',
271
+ code: 'ORG_ACCESS_DENIED'
272
+ });
273
+ }
274
+ next();
275
+ };
276
+ extractToken(req) {
277
+ const authHeader = req.headers.authorization;
278
+ if (authHeader?.startsWith('Bearer ')) {
279
+ return authHeader.substring(7);
280
+ }
281
+ // Also check cookie for web clients
282
+ return req.cookies?.access_token || null;
283
+ }
284
+ async loadUser(sub) {
285
+ // Try cache first
286
+ const cached = await this.redis.get(`user:${sub}`);
287
+ if (cached) {
288
+ return JSON.parse(cached);
289
+ }
290
+ // Load from database (implement your database logic)
291
+ // This is a placeholder - implement actual database loading
292
+ const user = {
293
+ id: sub,
294
+ sub,
295
+ email: `${sub}@example.com`,
296
+ tier: 'free',
297
+ permissions: ['read', 'write'],
298
+ organizations: []
299
+ };
300
+ // Cache for 5 minutes
301
+ await this.redis.setex(`user:${sub}`, 300, JSON.stringify(user));
302
+ return user;
303
+ }
304
+ getMockUser() {
305
+ return {
306
+ id: 'mock-user-id',
307
+ sub: 'mock-sub',
308
+ email: 'test@example.com',
309
+ name: 'Test User',
310
+ tier: 'pro',
311
+ permissions: ['read', 'write', 'admin'],
312
+ organizations: ['test-org']
313
+ };
314
+ }
315
+ /**
316
+ * Revoke a token (add to blacklist)
317
+ */
318
+ async revokeToken(token) {
319
+ this.blacklistedTokens.add(token);
320
+ await this.redis.publish('token:revoked', token);
321
+ // Also store in Redis with TTL matching token expiry
322
+ const decoded = jwt.decode(token);
323
+ if (decoded?.exp) {
324
+ const ttl = decoded.exp - Math.floor(Date.now() / 1000);
325
+ if (ttl > 0) {
326
+ await this.redis.setex(`blacklist:${token}`, ttl, '1');
327
+ }
328
+ }
329
+ }
330
+ /**
331
+ * Cleanup resources
332
+ */
333
+ async close() {
334
+ await this.redis.quit();
335
+ }
336
+ }
337
+ //# sourceMappingURL=auth-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.js","sourceRoot":"","sources":["../../../../src/runway/auth/auth-middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Runway MCP Server Implementation
3
+ * Production-ready MCP server with authentication, WebSocket support, and monitoring
4
+ */
5
+ export declare class RunwayMCPServer {
6
+ private config;
7
+ private app;
8
+ private httpServer;
9
+ private wss;
10
+ private mcpServer;
11
+ private connections;
12
+ private auth;
13
+ private db;
14
+ private cache;
15
+ private queue;
16
+ private monitoring;
17
+ private circuitBreaker;
18
+ constructor(config: {
19
+ port: number;
20
+ auth0Domain: string;
21
+ auth0Audience: string;
22
+ databaseUrl: string;
23
+ redisUrl: string;
24
+ environment: 'development' | 'staging' | 'production';
25
+ });
26
+ private initializeServices;
27
+ private setupExpress;
28
+ private setupRoutes;
29
+ private createAPIRouter;
30
+ private setupWebSocket;
31
+ private handleWebSocketMessage;
32
+ private setupMCPServer;
33
+ private registerMCPTools;
34
+ private setupMCPHandlers;
35
+ private executeTool;
36
+ private startHealthChecks;
37
+ private getHealthStatus;
38
+ private getAllowedOrigins;
39
+ private getProjectLimit;
40
+ private generateRequestId;
41
+ private generateConnectionId;
42
+ private findConnectionId;
43
+ start(): Promise<void>;
44
+ stop(): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=runway-mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runway-mcp-server.d.ts","sourceRoot":"","sources":["../../../../src/runway/server/runway-mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH,qBAAa,eAAe;IAcd,OAAO,CAAC,MAAM;IAb1B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAyC;IAE5D,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,EAAE,CAAkB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,cAAc,CAAiB;gBAEnB,MAAM,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;KACvD;IAQD,OAAO,CAAC,kBAAkB;IAsC1B,OAAO,CAAC,YAAY;IAkFpB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,eAAe;IAgJvB,OAAO,CAAC,cAAc;YAoFR,sBAAsB;IAsDpC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,gBAAgB;YAmCV,WAAW;IAkBzB,OAAO,CAAC,iBAAiB;YAaX,eAAe;IA0C7B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,gBAAgB;IASX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBnC"}