@llmindset/hf-mcp-server 0.1.16

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 (147) hide show
  1. package/LICENSE +21 -0
  2. package/components.json +21 -0
  3. package/dist/server/application.d.ts +30 -0
  4. package/dist/server/application.d.ts.map +1 -0
  5. package/dist/server/application.js +131 -0
  6. package/dist/server/application.js.map +1 -0
  7. package/dist/server/gradio-endpoint-connector.d.ts +46 -0
  8. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -0
  9. package/dist/server/gradio-endpoint-connector.js +348 -0
  10. package/dist/server/gradio-endpoint-connector.js.map +1 -0
  11. package/dist/server/gradio-endpoint-connector.test.d.ts +2 -0
  12. package/dist/server/gradio-endpoint-connector.test.d.ts.map +1 -0
  13. package/dist/server/gradio-endpoint-connector.test.js +313 -0
  14. package/dist/server/gradio-endpoint-connector.test.js.map +1 -0
  15. package/dist/server/lib/logger.d.ts +5 -0
  16. package/dist/server/lib/logger.d.ts.map +1 -0
  17. package/dist/server/lib/logger.js +45 -0
  18. package/dist/server/lib/logger.js.map +1 -0
  19. package/dist/server/lib/mcp-api-client.d.ts +42 -0
  20. package/dist/server/lib/mcp-api-client.d.ts.map +1 -0
  21. package/dist/server/lib/mcp-api-client.js +188 -0
  22. package/dist/server/lib/mcp-api-client.js.map +1 -0
  23. package/dist/server/lib/tool-selection-strategy.d.ts +29 -0
  24. package/dist/server/lib/tool-selection-strategy.d.ts.map +1 -0
  25. package/dist/server/lib/tool-selection-strategy.js +113 -0
  26. package/dist/server/lib/tool-selection-strategy.js.map +1 -0
  27. package/dist/server/lib/tool-selection-strategy.test.d.ts +2 -0
  28. package/dist/server/lib/tool-selection-strategy.test.d.ts.map +1 -0
  29. package/dist/server/lib/tool-selection-strategy.test.js +407 -0
  30. package/dist/server/lib/tool-selection-strategy.test.js.map +1 -0
  31. package/dist/server/mcp-proxy.d.ts +5 -0
  32. package/dist/server/mcp-proxy.d.ts.map +1 -0
  33. package/dist/server/mcp-proxy.js +66 -0
  34. package/dist/server/mcp-proxy.js.map +1 -0
  35. package/dist/server/mcp-server.d.ts +8 -0
  36. package/dist/server/mcp-server.d.ts.map +1 -0
  37. package/dist/server/mcp-server.js +219 -0
  38. package/dist/server/mcp-server.js.map +1 -0
  39. package/dist/server/sse.d.ts +3 -0
  40. package/dist/server/sse.d.ts.map +1 -0
  41. package/dist/server/sse.js +47 -0
  42. package/dist/server/sse.js.map +1 -0
  43. package/dist/server/stdio.d.ts +3 -0
  44. package/dist/server/stdio.d.ts.map +1 -0
  45. package/dist/server/stdio.js +49 -0
  46. package/dist/server/stdio.js.map +1 -0
  47. package/dist/server/streamableHttp.d.ts +3 -0
  48. package/dist/server/streamableHttp.d.ts.map +1 -0
  49. package/dist/server/streamableHttp.js +53 -0
  50. package/dist/server/streamableHttp.js.map +1 -0
  51. package/dist/server/transport/base-transport.d.ts +132 -0
  52. package/dist/server/transport/base-transport.d.ts.map +1 -0
  53. package/dist/server/transport/base-transport.js +390 -0
  54. package/dist/server/transport/base-transport.js.map +1 -0
  55. package/dist/server/transport/json-rpc-errors.d.ts +36 -0
  56. package/dist/server/transport/json-rpc-errors.d.ts.map +1 -0
  57. package/dist/server/transport/json-rpc-errors.js +53 -0
  58. package/dist/server/transport/json-rpc-errors.js.map +1 -0
  59. package/dist/server/transport/sse-transport.d.ts +17 -0
  60. package/dist/server/transport/sse-transport.d.ts.map +1 -0
  61. package/dist/server/transport/sse-transport.js +170 -0
  62. package/dist/server/transport/sse-transport.js.map +1 -0
  63. package/dist/server/transport/stateless-http-transport.d.ts +11 -0
  64. package/dist/server/transport/stateless-http-transport.d.ts.map +1 -0
  65. package/dist/server/transport/stateless-http-transport.js +172 -0
  66. package/dist/server/transport/stateless-http-transport.js.map +1 -0
  67. package/dist/server/transport/stateless-http-transport.test.d.ts +2 -0
  68. package/dist/server/transport/stateless-http-transport.test.d.ts.map +1 -0
  69. package/dist/server/transport/stateless-http-transport.test.js +58 -0
  70. package/dist/server/transport/stateless-http-transport.test.js.map +1 -0
  71. package/dist/server/transport/stdio-transport.d.ts +12 -0
  72. package/dist/server/transport/stdio-transport.d.ts.map +1 -0
  73. package/dist/server/transport/stdio-transport.js +78 -0
  74. package/dist/server/transport/stdio-transport.js.map +1 -0
  75. package/dist/server/transport/streamable-http-transport.d.ts +21 -0
  76. package/dist/server/transport/streamable-http-transport.d.ts.map +1 -0
  77. package/dist/server/transport/streamable-http-transport.js +220 -0
  78. package/dist/server/transport/streamable-http-transport.js.map +1 -0
  79. package/dist/server/transport/transport-factory.d.ts +5 -0
  80. package/dist/server/transport/transport-factory.d.ts.map +1 -0
  81. package/dist/server/transport/transport-factory.js +21 -0
  82. package/dist/server/transport/transport-factory.js.map +1 -0
  83. package/dist/server/utils/api-metrics.d.ts +15 -0
  84. package/dist/server/utils/api-metrics.d.ts.map +1 -0
  85. package/dist/server/utils/api-metrics.js +39 -0
  86. package/dist/server/utils/api-metrics.js.map +1 -0
  87. package/dist/server/utils/auth-utils.d.ts +6 -0
  88. package/dist/server/utils/auth-utils.d.ts.map +1 -0
  89. package/dist/server/utils/auth-utils.js +25 -0
  90. package/dist/server/utils/auth-utils.js.map +1 -0
  91. package/dist/server/utils/browser-detection.d.ts +2 -0
  92. package/dist/server/utils/browser-detection.d.ts.map +1 -0
  93. package/dist/server/utils/browser-detection.js +15 -0
  94. package/dist/server/utils/browser-detection.js.map +1 -0
  95. package/dist/server/utils/browser-detection.test.d.ts +2 -0
  96. package/dist/server/utils/browser-detection.test.d.ts.map +1 -0
  97. package/dist/server/utils/browser-detection.test.js +50 -0
  98. package/dist/server/utils/browser-detection.test.js.map +1 -0
  99. package/dist/server/utils/gradio-metrics.d.ts +22 -0
  100. package/dist/server/utils/gradio-metrics.d.ts.map +1 -0
  101. package/dist/server/utils/gradio-metrics.js +60 -0
  102. package/dist/server/utils/gradio-metrics.js.map +1 -0
  103. package/dist/server/utils/query-params.d.ts +3 -0
  104. package/dist/server/utils/query-params.d.ts.map +1 -0
  105. package/dist/server/utils/query-params.js +17 -0
  106. package/dist/server/utils/query-params.js.map +1 -0
  107. package/dist/server/utils/query-params.test.d.ts +2 -0
  108. package/dist/server/utils/query-params.test.d.ts.map +1 -0
  109. package/dist/server/utils/query-params.test.js +75 -0
  110. package/dist/server/utils/query-params.test.js.map +1 -0
  111. package/dist/server/web-server.d.ts +29 -0
  112. package/dist/server/web-server.d.ts.map +1 -0
  113. package/dist/server/web-server.js +273 -0
  114. package/dist/server/web-server.js.map +1 -0
  115. package/dist/shared/constants.d.ts +5 -0
  116. package/dist/shared/constants.d.ts.map +1 -0
  117. package/dist/shared/constants.js +4 -0
  118. package/dist/shared/constants.js.map +1 -0
  119. package/dist/shared/settings.d.ts +19 -0
  120. package/dist/shared/settings.d.ts.map +1 -0
  121. package/dist/shared/settings.js +47 -0
  122. package/dist/shared/settings.js.map +1 -0
  123. package/dist/shared/transport-info.d.ts +18 -0
  124. package/dist/shared/transport-info.d.ts.map +1 -0
  125. package/dist/shared/transport-info.js +22 -0
  126. package/dist/shared/transport-info.js.map +1 -0
  127. package/dist/shared/transport-info.test.d.ts +2 -0
  128. package/dist/shared/transport-info.test.d.ts.map +1 -0
  129. package/dist/shared/transport-info.test.js +90 -0
  130. package/dist/shared/transport-info.test.js.map +1 -0
  131. package/dist/shared/transport-metrics.d.ts +180 -0
  132. package/dist/shared/transport-metrics.d.ts.map +1 -0
  133. package/dist/shared/transport-metrics.js +247 -0
  134. package/dist/shared/transport-metrics.js.map +1 -0
  135. package/dist/shared/transport-metrics.test.d.ts +2 -0
  136. package/dist/shared/transport-metrics.test.d.ts.map +1 -0
  137. package/dist/shared/transport-metrics.test.js +10 -0
  138. package/dist/shared/transport-metrics.test.js.map +1 -0
  139. package/dist/web/assets/button-C4Q2P8Ns.css +1 -0
  140. package/dist/web/assets/button-DOWMQOme.js +79 -0
  141. package/dist/web/assets/hf-logo-DbjPOSLw.svg +21 -0
  142. package/dist/web/assets/main-CB77vUha.js +115 -0
  143. package/dist/web/assets/mcpWelcome-Cpw1-KJi.js +1 -0
  144. package/dist/web/hf-logo-DbjPOSLw.svg +21 -0
  145. package/dist/web/index.html +15 -0
  146. package/dist/web/mcp-welcome.html +92 -0
  147. package/package.json +100 -0
@@ -0,0 +1,220 @@
1
+ import { StatefulTransport } from './base-transport.js';
2
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { logger } from '../lib/logger.js';
5
+ import { JsonRpcErrors, extractJsonRpcId } from './json-rpc-errors.js';
6
+ import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
7
+ import { extractQueryParamsToHeaders } from '../utils/query-params.js';
8
+ export class StreamableHttpTransport extends StatefulTransport {
9
+ initialize(_options) {
10
+ this.setupRoutes();
11
+ this.startStaleConnectionCheck();
12
+ this.startPingKeepAlive();
13
+ logger.info('StreamableHTTP transport initialized', {
14
+ heartbeatInterval: this.HEARTBEAT_INTERVAL,
15
+ staleCheckInterval: this.STALE_CHECK_INTERVAL,
16
+ staleTimeout: this.STALE_TIMEOUT,
17
+ pingEnabled: this.PING_ENABLED,
18
+ pingInterval: this.PING_INTERVAL,
19
+ });
20
+ return Promise.resolve();
21
+ }
22
+ setupRoutes() {
23
+ this.app.post('/mcp', (req, res) => {
24
+ this.trackRequest();
25
+ void (async () => {
26
+ await this.handleRequest(req, res, 'POST');
27
+ })();
28
+ });
29
+ this.app.get('/mcp', (req, res) => {
30
+ this.trackRequest();
31
+ void (async () => {
32
+ await this.handleRequest(req, res, 'GET');
33
+ })();
34
+ });
35
+ this.app.delete('/mcp', (req, res) => {
36
+ this.trackRequest();
37
+ void (async () => {
38
+ await this.handleRequest(req, res, 'DELETE');
39
+ })();
40
+ });
41
+ }
42
+ async handleRequest(req, res, method) {
43
+ try {
44
+ const sessionId = req.headers['mcp-session-id'];
45
+ if (sessionId && this.sessions.has(sessionId)) {
46
+ this.updateSessionActivity(sessionId);
47
+ }
48
+ switch (method) {
49
+ case 'POST':
50
+ await this.handlePostRequest(req, res, sessionId);
51
+ break;
52
+ case 'GET':
53
+ await this.handleGetRequest(req, res, sessionId);
54
+ break;
55
+ case 'DELETE':
56
+ await this.handleDeleteRequest(req, res, sessionId);
57
+ break;
58
+ }
59
+ }
60
+ catch (error) {
61
+ logger.error({ error, method }, 'Request handling error');
62
+ this.trackError(500, error instanceof Error ? error : new Error(String(error)));
63
+ if (!res.headersSent) {
64
+ res.status(500).json(JsonRpcErrors.internalError(extractJsonRpcId(req.body ?? null)));
65
+ }
66
+ }
67
+ }
68
+ async handlePostRequest(req, res, sessionId) {
69
+ const trackingName = this.extractMethodForTracking(req.body);
70
+ if (trackingName && sessionId && this.sessions.has(sessionId)) {
71
+ const session = this.sessions.get(sessionId);
72
+ if (session) {
73
+ session.metadata.requestCount++;
74
+ }
75
+ }
76
+ try {
77
+ if (!sessionId && this.isShuttingDown) {
78
+ this.trackError(503);
79
+ this.metrics.trackMethod(trackingName, undefined, true);
80
+ res.status(503).json(JsonRpcErrors.serverShuttingDown(extractJsonRpcId(req.body)));
81
+ return;
82
+ }
83
+ let transport;
84
+ if (sessionId && this.sessions.has(sessionId)) {
85
+ const existingSession = this.sessions.get(sessionId);
86
+ if (!existingSession) {
87
+ this.trackError(404);
88
+ this.metrics.trackMethod(trackingName, undefined, true);
89
+ res.status(404).json(JsonRpcErrors.sessionNotFound(sessionId, extractJsonRpcId(req.body)));
90
+ return;
91
+ }
92
+ transport = existingSession.transport;
93
+ }
94
+ else if (!sessionId && isInitializeRequest(req.body)) {
95
+ const headers = req.headers;
96
+ extractQueryParamsToHeaders(req, headers);
97
+ const authResult = await this.validateAuthAndTrackMetrics(headers);
98
+ if (!authResult.shouldContinue) {
99
+ this.trackError(authResult.statusCode || 401);
100
+ this.metrics.trackMethod(trackingName, undefined, true);
101
+ res.set('WWW-Authenticate', 'Bearer resource_metadata="https://huggingface.co/.well-known/oauth-protected-resources/mcp"');
102
+ res.status(authResult.statusCode || 401).send('Unauthorized');
103
+ return;
104
+ }
105
+ transport = await this.createSession(headers);
106
+ }
107
+ else if (!sessionId) {
108
+ this.trackError(400);
109
+ this.metrics.trackMethod(trackingName, undefined, true);
110
+ res
111
+ .status(400)
112
+ .json(JsonRpcErrors.invalidRequest(extractJsonRpcId(req.body), 'Missing session ID for non-initialization request'));
113
+ return;
114
+ }
115
+ else {
116
+ this.trackError(404);
117
+ this.metrics.trackMethod(trackingName, undefined, true);
118
+ res.status(404).json(JsonRpcErrors.sessionNotFound(sessionId, extractJsonRpcId(req.body)));
119
+ return;
120
+ }
121
+ await transport.handleRequest(req, res, req.body);
122
+ this.metrics.trackMethod(trackingName, undefined, false);
123
+ }
124
+ catch (error) {
125
+ this.metrics.trackMethod(trackingName, undefined, true);
126
+ throw error;
127
+ }
128
+ }
129
+ async handleGetRequest(req, res, sessionId) {
130
+ if (!sessionId || !this.sessions.has(sessionId)) {
131
+ this.trackError(400);
132
+ res.status(400).json(JsonRpcErrors.sessionNotFound(sessionId || 'missing', null));
133
+ return;
134
+ }
135
+ const session = this.sessions.get(sessionId);
136
+ if (!session) {
137
+ this.trackError(404);
138
+ res.status(404).json(JsonRpcErrors.sessionNotFound(sessionId, null));
139
+ return;
140
+ }
141
+ const lastEventId = req.headers['last-event-id'];
142
+ if (lastEventId) {
143
+ logger.warn({ sessionId, lastEventId }, 'Client attempting to result with Last-Event-ID');
144
+ }
145
+ session.activeResponse = res;
146
+ this.startHeartbeat(sessionId, res);
147
+ this.setupSseEventHandlers(sessionId, res);
148
+ await session.transport.handleRequest(req, res);
149
+ }
150
+ async handleDeleteRequest(req, res, sessionId) {
151
+ if (!sessionId || !this.sessions.has(sessionId)) {
152
+ this.trackError(404);
153
+ res.status(404).json(JsonRpcErrors.sessionNotFound(sessionId || 'missing', extractJsonRpcId(req.body)));
154
+ return;
155
+ }
156
+ logger.info({ sessionId }, 'Session termination requested');
157
+ const session = this.sessions.get(sessionId);
158
+ if (!session) {
159
+ this.trackError(404);
160
+ res.status(404).json(JsonRpcErrors.sessionNotFound(sessionId, extractJsonRpcId(req.body)));
161
+ return;
162
+ }
163
+ await session.transport.handleRequest(req, res, req.body);
164
+ await this.removeSession(sessionId);
165
+ }
166
+ async createSession(requestHeaders) {
167
+ const server = await this.serverFactory(requestHeaders || null);
168
+ const transport = new StreamableHTTPServerTransport({
169
+ sessionIdGenerator: () => randomUUID(),
170
+ onsessioninitialized: (sessionId) => {
171
+ logger.info({ sessionId }, 'Session initialized');
172
+ const session = {
173
+ transport,
174
+ server,
175
+ metadata: {
176
+ id: sessionId,
177
+ connectedAt: new Date(),
178
+ lastActivity: new Date(),
179
+ requestCount: 0,
180
+ capabilities: {},
181
+ },
182
+ };
183
+ this.sessions.set(sessionId, session);
184
+ this.trackSessionCreated(sessionId);
185
+ },
186
+ });
187
+ transport.onclose = () => {
188
+ const sessionId = transport.sessionId;
189
+ if (sessionId && this.sessions.has(sessionId)) {
190
+ logger.debug({ sessionId }, 'Transport closed, cleaning up session');
191
+ void this.removeSession(sessionId);
192
+ }
193
+ };
194
+ server.server.onerror = (error) => {
195
+ this.trackError(undefined, error);
196
+ logger.error({ error, sessionId: transport.sessionId }, 'StreamableHTTP server error');
197
+ };
198
+ server.server.oninitialized = () => {
199
+ const sessionId = transport.sessionId;
200
+ if (sessionId) {
201
+ this.createClientInfoCapture(sessionId)();
202
+ }
203
+ };
204
+ await server.connect(transport);
205
+ return transport;
206
+ }
207
+ async removeSession(sessionId) {
208
+ await this.cleanupSession(sessionId);
209
+ }
210
+ async removeStaleSession(sessionId) {
211
+ logger.info({ sessionId }, 'Removing stale session');
212
+ await this.cleanupSession(sessionId);
213
+ }
214
+ async cleanup() {
215
+ this.stopStaleConnectionCheck();
216
+ await this.cleanupAllSessions();
217
+ logger.info('StreamableHTTP transport cleanup complete');
218
+ }
219
+ }
220
+ //# sourceMappingURL=streamable-http-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamable-http-transport.js","sourceRoot":"","sources":["../../../src/server/transport/streamable-http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA2C,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAQvE,MAAM,OAAO,uBAAwB,SAAQ,iBAA0B;IACtE,UAAU,CAAC,QAA0B;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;YACnD,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,kBAAkB,EAAE,IAAI,CAAC,oBAAoB;YAC7C,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;SAChC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAEO,WAAW;QAElB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACjC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACpC,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,IAAI,EAAE;gBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAY,EAAE,GAAa,EAAE,MAAc;QACtE,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAW,CAAC;YAG1D,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;YAED,QAAQ,MAAM,EAAE,CAAC;gBAChB,KAAK,MAAM;oBACV,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBAClD,MAAM;gBACP,KAAK,KAAK;oBACT,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBACjD,MAAM;gBACP,KAAK,QAAQ;oBACZ,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpD,MAAM;YACR,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACvF,CAAC;QACF,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAY,EAAE,GAAa,EAAE,SAAkB;QAC9E,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAG7D,IAAI,YAAY,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YACjC,CAAC;QACF,CAAC;QAED,IAAI,CAAC;YAEJ,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAErB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnF,OAAO;YACR,CAAC;YAED,IAAI,SAAwC,CAAC;YAE7C,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrD,IAAI,CAAC,eAAe,EAAE,CAAC;oBACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAC3F,OAAO;gBACR,CAAC;gBACD,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;YACvC,CAAC;iBAAM,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAExD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAiC,CAAC;gBACtD,2BAA2B,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBAG1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC;gBACnE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;oBAChC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;oBAC9C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBACxD,GAAG,CAAC,GAAG,CACN,kBAAkB,EAClB,6FAA6F,CAC7F,CAAC;oBACF,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAC9D,OAAO;gBACR,CAAC;gBAED,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBAEvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACxD,GAAG;qBACD,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CACJ,aAAa,CAAC,cAAc,CAC3B,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAC1B,mDAAmD,CACnD,CACD,CAAC;gBACH,OAAO;YACR,CAAC;iBAAM,CAAC;gBAEP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;gBACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3F,OAAO;YACR,CAAC;YAED,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAGlD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAEhB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,GAAa,EAAE,SAAkB;QAC7E,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YAClF,OAAO;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO;QACR,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,gDAAgD,CAAC,CAAC;QAC3F,CAAC;QAGD,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC;QAG7B,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAGpC,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAE3C,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,GAAY,EAAE,GAAa,EAAE,SAAkB;QAChF,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,IAAI,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxG,OAAO;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3F,OAAO;QACR,CAAC;QAED,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,cAAuC;QAGlE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YACnD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;YACtC,oBAAoB,EAAE,CAAC,SAAiB,EAAE,EAAE;gBAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,qBAAqB,CAAC,CAAC;gBAGlD,MAAM,OAAO,GAAY;oBACxB,SAAS;oBACT,MAAM;oBACN,QAAQ,EAAE;wBACT,EAAE,EAAE,SAAS;wBACb,WAAW,EAAE,IAAI,IAAI,EAAE;wBACvB,YAAY,EAAE,IAAI,IAAI,EAAE;wBACxB,YAAY,EAAE,CAAC;wBACf,YAAY,EAAE,EAAE;qBAChB;iBACD,CAAC;gBAEF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAEtC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC;SACD,CAAC,CAAC;QAGH,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACxB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACtC,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,uCAAuC,CAAC,CAAC;gBACrE,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACF,CAAC,CAAC;QAGF,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAAE,6BAA6B,CAAC,CAAC;QACxF,CAAC,CAAC;QAGF,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,EAAE;YAClC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACtC,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,CAAC;QACF,CAAC,CAAC;QAGF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAKS,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACnD,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACrD,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO;QAEZ,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAGhC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1D,CAAC;CACD"}
@@ -0,0 +1,5 @@
1
+ import { type Express } from 'express';
2
+ import { type TransportType } from '../../shared/constants.js';
3
+ import type { BaseTransport, ServerFactory } from './base-transport.js';
4
+ export declare const createTransport: (type: TransportType, serverFactory: ServerFactory, app: Express) => BaseTransport;
5
+ //# sourceMappingURL=transport-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-factory.d.ts","sourceRoot":"","sources":["../../../src/server/transport/transport-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AASxE,eAAO,MAAM,eAAe,GAAI,MAAM,aAAa,EAAE,eAAe,aAAa,EAAE,KAAK,OAAO,KAAG,aAajG,CAAC"}
@@ -0,0 +1,21 @@
1
+ import {} from 'express';
2
+ import {} from '../../shared/constants.js';
3
+ import { StdioTransport } from './stdio-transport.js';
4
+ import { SseTransport } from './sse-transport.js';
5
+ import { StreamableHttpTransport } from './streamable-http-transport.js';
6
+ import { StatelessHttpTransport } from './stateless-http-transport.js';
7
+ export const createTransport = (type, serverFactory, app) => {
8
+ switch (type) {
9
+ case 'stdio':
10
+ return new StdioTransport(serverFactory, app);
11
+ case 'sse':
12
+ return new SseTransport(serverFactory, app);
13
+ case 'streamableHttp':
14
+ return new StreamableHttpTransport(serverFactory, app);
15
+ case 'streamableHttpJson':
16
+ return new StatelessHttpTransport(serverFactory, app);
17
+ default:
18
+ throw new Error(`Unsupported transport type: ${type}`);
19
+ }
20
+ };
21
+ //# sourceMappingURL=transport-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-factory.js","sourceRoot":"","sources":["../../../src/server/transport/transport-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,SAAS,CAAC;AACvC,OAAO,EAAsB,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAKvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAmB,EAAE,aAA4B,EAAE,GAAY,EAAiB,EAAE;IACjH,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,OAAO;YACX,OAAO,IAAI,cAAc,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC/C,KAAK,KAAK;YACT,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QAC7C,KAAK,gBAAgB;YACpB,OAAO,IAAI,uBAAuB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACxD,KAAK,oBAAoB;YACxB,OAAO,IAAI,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACvD;YACC,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;AACF,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface ApiCallMetrics {
2
+ anonymous: number;
3
+ authenticated: number;
4
+ unauthorized: number;
5
+ forbidden: number;
6
+ }
7
+ declare class ApiMetricsCollector {
8
+ private metrics;
9
+ recordCall(hasToken: boolean, status: number): void;
10
+ getMetrics(): ApiCallMetrics;
11
+ resetMetrics(): void;
12
+ }
13
+ export declare const apiMetrics: ApiMetricsCollector;
14
+ export {};
15
+ //# sourceMappingURL=api-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/utils/api-metrics.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,mBAAmB;IACxB,OAAO,CAAC,OAAO,CAKb;IAOF,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBnD,UAAU,IAAI,cAAc;IAO5B,YAAY,IAAI,IAAI;CAQpB;AAGD,eAAO,MAAM,UAAU,qBAA4B,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { logger } from '../lib/logger.js';
2
+ class ApiMetricsCollector {
3
+ metrics = {
4
+ anonymous: 0,
5
+ authenticated: 0,
6
+ unauthorized: 0,
7
+ forbidden: 0,
8
+ };
9
+ recordCall(hasToken, status) {
10
+ logger.debug(`Recording API call: hasToken=${hasToken}, status=${status}`);
11
+ if (status === 200) {
12
+ if (hasToken) {
13
+ this.metrics.authenticated++;
14
+ }
15
+ else {
16
+ this.metrics.anonymous++;
17
+ }
18
+ }
19
+ else if (status === 401) {
20
+ this.metrics.unauthorized++;
21
+ }
22
+ else if (status === 403) {
23
+ this.metrics.forbidden++;
24
+ }
25
+ }
26
+ getMetrics() {
27
+ return { ...this.metrics };
28
+ }
29
+ resetMetrics() {
30
+ this.metrics = {
31
+ anonymous: 0,
32
+ authenticated: 0,
33
+ unauthorized: 0,
34
+ forbidden: 0,
35
+ };
36
+ }
37
+ }
38
+ export const apiMetrics = new ApiMetricsCollector();
39
+ //# sourceMappingURL=api-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-metrics.js","sourceRoot":"","sources":["../../../src/server/utils/api-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAY1C,MAAM,mBAAmB;IAChB,OAAO,GAAmB;QACjC,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;KACZ,CAAC;IAOF,UAAU,CAAC,QAAiB,EAAE,MAAc;QAC3C,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,YAAY,MAAM,EAAE,CAAC,CAAC;QAC3E,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACpB,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC1B,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;IACF,CAAC;IAKD,UAAU;QACT,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,CAAC;IAKD,YAAY;QACX,IAAI,CAAC,OAAO,GAAG;YACd,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,CAAC;YACf,SAAS,EAAE,CAAC;SACZ,CAAC;IACH,CAAC;CACD;AAGD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function extractAuthBouquetAndMix(headers: Record<string, string> | null): {
2
+ hfToken: string | undefined;
3
+ bouquet: string | undefined;
4
+ mix: string | undefined;
5
+ };
6
+ //# sourceMappingURL=auth-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../../src/server/utils/auth-utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;IACjF,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACxB,CA+BA"}
@@ -0,0 +1,25 @@
1
+ import { logger } from '../lib/logger.js';
2
+ export function extractAuthBouquetAndMix(headers) {
3
+ let tokenFromHeader;
4
+ let bouquet;
5
+ let mix;
6
+ if (headers) {
7
+ if ('authorization' in headers) {
8
+ const authHeader = headers.authorization || '';
9
+ if (authHeader.startsWith('Bearer ')) {
10
+ tokenFromHeader = authHeader.slice(7).trim();
11
+ }
12
+ }
13
+ if ('x-mcp-bouquet' in headers) {
14
+ bouquet = headers['x-mcp-bouquet'];
15
+ logger.info({ bouquet }, 'Bouquet parameter received');
16
+ }
17
+ if ('x-mcp-mix' in headers) {
18
+ mix = headers['x-mcp-mix'];
19
+ logger.info({ mix }, 'Mix parameter received');
20
+ }
21
+ }
22
+ const hfToken = tokenFromHeader || process.env.DEFAULT_HF_TOKEN;
23
+ return { hfToken, bouquet, mix };
24
+ }
25
+ //# sourceMappingURL=auth-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-utils.js","sourceRoot":"","sources":["../../../src/server/utils/auth-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1C,MAAM,UAAU,wBAAwB,CAAC,OAAsC;IAK9E,IAAI,eAAmC,CAAC;IACxC,IAAI,OAA2B,CAAC;IAChC,IAAI,GAAuB,CAAC;IAE5B,IAAI,OAAO,EAAE,CAAC;QAEb,IAAI,eAAe,IAAI,OAAO,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;YAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,CAAC;QACF,CAAC;QAGD,IAAI,eAAe,IAAI,OAAO,EAAE,CAAC;YAChC,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,4BAA4B,CAAC,CAAC;QACxD,CAAC;QAGD,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YAC5B,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAGD,MAAM,OAAO,GAAG,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEhE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isBrowser(headers: Record<string, string | string[] | undefined>): boolean;
2
+ //# sourceMappingURL=browser-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-detection.d.ts","sourceRoot":"","sources":["../../../src/server/utils/browser-detection.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,CAqBzF"}
@@ -0,0 +1,15 @@
1
+ export function isBrowser(headers) {
2
+ const acceptHeader = headers['accept'];
3
+ if (!acceptHeader) {
4
+ return false;
5
+ }
6
+ const accept = Array.isArray(acceptHeader) ? acceptHeader.join(',') : acceptHeader;
7
+ if (accept.includes('text/event-stream') || accept.includes('application/json')) {
8
+ return false;
9
+ }
10
+ if (accept.includes('*/*')) {
11
+ return true;
12
+ }
13
+ return false;
14
+ }
15
+ //# sourceMappingURL=browser-detection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-detection.js","sourceRoot":"","sources":["../../../src/server/utils/browser-detection.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,OAAsD;IAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAGnF,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACjF,OAAO,KAAK,CAAC;IACd,CAAC;IAGD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACb,CAAC;IAGD,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=browser-detection.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-detection.test.d.ts","sourceRoot":"","sources":["../../../src/server/utils/browser-detection.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isBrowser } from './browser-detection.js';
3
+ describe('isBrowser', () => {
4
+ it('returns false when accept header is missing', () => {
5
+ expect(isBrowser({})).toBe(false);
6
+ expect(isBrowser({ 'user-agent': 'Mozilla/5.0' })).toBe(false);
7
+ });
8
+ it('returns false when accept contains text/event-stream', () => {
9
+ expect(isBrowser({ accept: 'text/event-stream' })).toBe(false);
10
+ expect(isBrowser({ accept: 'text/event-stream, text/html' })).toBe(false);
11
+ });
12
+ it('returns false when accept contains application/json', () => {
13
+ expect(isBrowser({ accept: 'application/json' })).toBe(false);
14
+ expect(isBrowser({ accept: 'application/json, text/plain' })).toBe(false);
15
+ });
16
+ it('returns true when accept contains */*', () => {
17
+ expect(isBrowser({ accept: '*/*' })).toBe(true);
18
+ expect(isBrowser({ accept: 'text/html, */*' })).toBe(true);
19
+ });
20
+ it('returns false for other accept headers', () => {
21
+ expect(isBrowser({ accept: 'text/html' })).toBe(false);
22
+ expect(isBrowser({ accept: 'text/plain' })).toBe(false);
23
+ expect(isBrowser({ accept: 'image/png' })).toBe(false);
24
+ });
25
+ it('handles array accept headers', () => {
26
+ expect(isBrowser({ accept: ['text/event-stream'] })).toBe(false);
27
+ expect(isBrowser({ accept: ['*/*', 'text/html'] })).toBe(true);
28
+ expect(isBrowser({ accept: ['application/json', 'text/plain'] })).toBe(false);
29
+ });
30
+ it('real browser examples', () => {
31
+ expect(isBrowser({
32
+ accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
33
+ })).toBe(true);
34
+ expect(isBrowser({
35
+ accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
36
+ })).toBe(true);
37
+ expect(isBrowser({
38
+ accept: 'text/event-stream',
39
+ })).toBe(false);
40
+ expect(isBrowser({
41
+ accept: 'text/event-stream',
42
+ })).toBe(false);
43
+ });
44
+ it('API client examples', () => {
45
+ expect(isBrowser({ accept: 'text/event-stream' })).toBe(false);
46
+ expect(isBrowser({ accept: 'application/json' })).toBe(false);
47
+ expect(isBrowser({ accept: 'application/json, text/event-stream' })).toBe(false);
48
+ });
49
+ });
50
+ //# sourceMappingURL=browser-detection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-detection.test.js","sourceRoot":"","sources":["../../../src/server/utils/browser-detection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAE/D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAEhC,MAAM,CACL,SAAS,CAAC;YACT,MAAM,EAAE,kGAAkG;SAC1G,CAAC,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGb,MAAM,CACL,SAAS,CAAC;YACT,MAAM,EAAE,iEAAiE;SACzE,CAAC,CACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGb,MAAM,CACL,SAAS,CAAC;YACT,MAAM,EAAE,mBAAmB;SAC3B,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAGd,MAAM,CACL,SAAS,CAAC;YACT,MAAM,EAAE,mBAAmB;SAC3B,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAE9B,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAG/D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAG9D,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface GradioToolMetrics {
2
+ success: number;
3
+ failure: number;
4
+ byTool: Record<string, {
5
+ success: number;
6
+ failure: number;
7
+ }>;
8
+ }
9
+ export declare class GradioMetricsCollector {
10
+ private static instance;
11
+ private metrics;
12
+ private constructor();
13
+ static getInstance(): GradioMetricsCollector;
14
+ recordSuccess(toolName: string): void;
15
+ recordFailure(toolName: string): void;
16
+ getMetrics(): Readonly<GradioToolMetrics>;
17
+ reset(): void;
18
+ getSummary(): string;
19
+ }
20
+ export declare const gradioMetrics: GradioMetricsCollector;
21
+ export declare function getMetricsSafeName(toolName: string): string;
22
+ //# sourceMappingURL=gradio-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradio-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/utils/gradio-metrics.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAEhB,OAAO,EAAE,MAAM,CAAC;IAEhB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAED,qBAAa,sBAAsB;IAClC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAChD,OAAO,CAAC,OAAO,CAIb;IAEF,OAAO;WAEO,WAAW,IAAI,sBAAsB;IAW5C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAiBrC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAgBrC,UAAU,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAOzC,KAAK,IAAI,IAAI;IAWb,UAAU,IAAI,MAAM;CAK3B;AAGD,eAAO,MAAM,aAAa,wBAAuC,CAAC;AAUlE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAe3D"}
@@ -0,0 +1,60 @@
1
+ import { createHash } from 'crypto';
2
+ import { GRADIO_PRIVATE_PREFIX } from '../../shared/constants.js';
3
+ export class GradioMetricsCollector {
4
+ static instance;
5
+ metrics = {
6
+ success: 0,
7
+ failure: 0,
8
+ byTool: {},
9
+ };
10
+ constructor() { }
11
+ static getInstance() {
12
+ if (!GradioMetricsCollector.instance) {
13
+ GradioMetricsCollector.instance = new GradioMetricsCollector();
14
+ }
15
+ return GradioMetricsCollector.instance;
16
+ }
17
+ recordSuccess(toolName) {
18
+ this.metrics.success++;
19
+ if (!this.metrics.byTool[toolName]) {
20
+ this.metrics.byTool[toolName] = { success: 0, failure: 0 };
21
+ }
22
+ this.metrics.byTool[toolName].success++;
23
+ }
24
+ recordFailure(toolName) {
25
+ this.metrics.failure++;
26
+ if (!this.metrics.byTool[toolName]) {
27
+ this.metrics.byTool[toolName] = { success: 0, failure: 0 };
28
+ }
29
+ this.metrics.byTool[toolName].failure++;
30
+ }
31
+ getMetrics() {
32
+ return { ...this.metrics, byTool: { ...this.metrics.byTool } };
33
+ }
34
+ reset() {
35
+ this.metrics = {
36
+ success: 0,
37
+ failure: 0,
38
+ byTool: {},
39
+ };
40
+ }
41
+ getSummary() {
42
+ const total = this.metrics.success + this.metrics.failure;
43
+ const successRate = total > 0 ? ((this.metrics.success / total) * 100).toFixed(1) : '0.0';
44
+ return `Gradio Tool Calls - Total: ${total}, Success: ${this.metrics.success}, Failure: ${this.metrics.failure}, Success Rate: ${successRate}%`;
45
+ }
46
+ }
47
+ export const gradioMetrics = GradioMetricsCollector.getInstance();
48
+ export function getMetricsSafeName(toolName) {
49
+ if (toolName.startsWith(GRADIO_PRIVATE_PREFIX)) {
50
+ const match = toolName.match(/^grp(\d+)_(.*)$/);
51
+ if (match && match[1] && match[2]) {
52
+ const index = match[1];
53
+ const privateName = match[2];
54
+ const hash = createHash('sha256').update(privateName).digest('hex').substring(0, 6);
55
+ return `grp${index}_[private_${hash}]`;
56
+ }
57
+ }
58
+ return toolName;
59
+ }
60
+ //# sourceMappingURL=gradio-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradio-metrics.js","sourceRoot":"","sources":["../../../src/server/utils/gradio-metrics.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAWlE,MAAM,OAAO,sBAAsB;IAC1B,MAAM,CAAC,QAAQ,CAAyB;IACxC,OAAO,GAAsB;QACpC,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE;KACV,CAAC;IAEF,gBAAuB,CAAC;IAEjB,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YACtC,sBAAsB,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,sBAAsB,CAAC,QAAQ,CAAC;IACxC,CAAC;IAMM,aAAa,CAAC,QAAgB;QAEpC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAGvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC5D,CAAC;QAGD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAMM,aAAa,CAAC,QAAgB;QAEpC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAGvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC5D,CAAC;QAGD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAKM,UAAU;QAChB,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAChE,CAAC;IAKM,KAAK;QACX,IAAI,CAAC,OAAO,GAAG;YACd,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,EAAE;SACV,CAAC;IACH,CAAC;IAKM,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC1D,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1F,OAAO,8BAA8B,KAAK,cAAc,IAAI,CAAC,OAAO,CAAC,OAAO,cAAc,IAAI,CAAC,OAAO,CAAC,OAAO,mBAAmB,WAAW,GAAG,CAAC;IACjJ,CAAC;CACD;AAGD,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC,WAAW,EAAE,CAAC;AAUlE,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IAElD,IAAI,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAEhD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,OAAO,MAAM,KAAK,aAAa,IAAI,GAAG,CAAC;QACxC,CAAC;IACF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Request } from 'express';
2
+ export declare function extractQueryParamsToHeaders(req: Request, headers: Record<string, string>): void;
3
+ //# sourceMappingURL=query-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-params.d.ts","sourceRoot":"","sources":["../../../src/server/utils/query-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOvC,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAkB/F"}
@@ -0,0 +1,17 @@
1
+ export function extractQueryParamsToHeaders(req, headers) {
2
+ const bouquet = req.query.bouquet;
3
+ const mix = req.query.mix;
4
+ const forceauth = req.query.forceauth;
5
+ const login = req.query.login;
6
+ const auth = req.query.auth;
7
+ if (bouquet) {
8
+ headers['x-mcp-bouquet'] = bouquet;
9
+ }
10
+ if (mix) {
11
+ headers['x-mcp-mix'] = mix;
12
+ }
13
+ if (forceauth || login !== undefined || auth !== undefined) {
14
+ headers['x-mcp-force-auth'] = 'true';
15
+ }
16
+ }
17
+ //# sourceMappingURL=query-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-params.js","sourceRoot":"","sources":["../../../src/server/utils/query-params.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,2BAA2B,CAAC,GAAY,EAAE,OAA+B;IACxF,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAA6B,CAAC;IACxD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAyB,CAAC;IAChD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAA+B,CAAC;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IAE5B,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC;IACpC,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;IAC5B,CAAC;IAGD,IAAI,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5D,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;IACtC,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=query-params.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-params.test.d.ts","sourceRoot":"","sources":["../../../src/server/utils/query-params.test.ts"],"names":[],"mappings":""}